使用 numpy
来生成信号,
使用 matplotlib
可视化信号,
使用 sounddevice
播放声音。
以下生成和播放 432 Hz 的正弦波信号:
python
import numpy as np
import sounddevice as sd
import matplotlib.pyplot as plt
# 生成单音函数
def generate_tone(frequency, duration, sampling_rate):
t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)
return 0.5 * np.sin(2 * np.pi * frequency * t)
# 生成和弦(多个频率同时播放)
def generate_chord(frequencies, duration, sampling_rate):
chord = np.zeros(int(sampling_rate * duration))
for freq in frequencies:
chord += generate_tone(freq, duration, sampling_rate)
return chord / len(frequencies) # 归一化
def fun_music(frequency = 432, sampling_rate = 44100, duration = 2):
# 参数设置
frequency = 432 # 频率(赫兹)
sampling_rate = 44100 # 采样率(赫兹)
duration = 2 # 持续时间(秒)
# 时间轴
t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)
# 生成正弦波信号
signal = 0.5 * np.sin(2 * np.pi * frequency * t)
# 播放声音
sd.play(signal, samplerate=sampling_rate)
sd.wait() # 等待声音播放完成
# 绘制信号
plt.plot(t[:1000], signal[:1000]) # 只绘制前1000个点
plt.title(f'Sine Wave - {frequency} Hz')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.show()
fun_music()
- 参数设置:定义了频率为 432 Hz、采样率为 44100 Hz 和持续时间为 2 秒。
- 生成时间轴 :使用
numpy.linspace
创建时间轴。 - 生成正弦波信号 :使用
numpy.sin
生成 432 Hz 的正弦波信号。 - 播放声音 :使用
sounddevice
库的play
函数播放生成的音频信号。 - 绘制信号 :使用
matplotlib
可视化生成的音频信号。
执行结果: