使用 numpy
来生成信号,
使用 matplotlib
可视化信号,
使用 sounddevice
播放声音。
以下生成和播放 432 Hz 的正弦波信号:
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
可视化生成的音频信号。
执行结果: