首先,让我们播放WAVE文件,因为它是基本文件。Python有一个wave模块,可以读写WAVE文件并提取信息。但是,由于不能仅通过wave模块来再现声音,因此将其与另一个名为pyaudio的模块结合使用。pyaudio需要单独安装。
#coding: utf-8
import wave
import pyaudio
def printWaveInfo(wf):
"""获取WAVE文件信息"""
print ("打印通道数:", wf.getnchannels())
print ("采样宽度:", wf.getsampwidth())
print ("采样频率:", wf.getframerate())
print ("帧数:", wf.getnframes())
print ("参数:", wf.getparams())
print ("长度秒:", float(wf.getnframes()) / wf.getframerate())
if __name__ == '__main__':
wf = wave.open("nandeyouqingren_.wav", "r")
printWaveInfo(wf)
# 打开一个流
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# 以块的形式输出到流并播放音频
chunk = 1024
data = wf.readframes(chunk)
while data != '':
stream.write(data)
data = wf.readframes(chunk)
stream.close()
p.terminate()
该声音文件是带有噪音的8000Hz正弦波噪音。我使用AU的语音分析工具完成了此任务。由于频谱分析和音高编辑很容易,因此经常用于研究。在8000Hz声音(Doremi的“ La”)中加上随机噪声后产生声音的波形公式为:
1 / 2 ∗ s i n ( 2 ∗ p i ∗ 8000 ∗ x ) + r a n d o m G a u s s ( 0 , 0.1 ) 1/2 * sin(2*pi*8000*x) + randomGauss(0,0.1) 1/2∗sin(2∗pi∗8000∗x)+randomGauss(0,0.1)
如果您只想播放声音,则可以使用除pyaudio之外的其他库。
如果要在编辑波形后回放,我认为最好的方法是将波形数据直接发送到像pyaudio这样的流中。它会自动吸收操作系统之间的差异,非常有用。除了wav,我还要介绍如何播放和转换其他音频文件,例如mp3和ogg。