python播放WAVE文件

首先,让我们播放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/2sin(2pi8000x)+randomGauss(0,0.1)

如果您只想播放声音,则可以使用除pyaudio之外的其他库。

  • winsound(仅Windows)
  • pygame

如果要在编辑波形后回放,我认为最好的方法是将波形数据直接发送到像pyaudio这样的流中。它会自动吸收操作系统之间的差异,非常有用。除了wav,我还要介绍如何播放和转换其他音频文件,例如mp3和ogg。

你可能感兴趣的:(python)