【问题标题】:Playing a single channel of audio using PyAudio or similar使用 PyAudio 或类似工具播放单声道音频
【发布时间】:2012-08-22 15:09:24
【问题描述】:

我目前有一个 2 通道 wav 文件。我希望能够一次播放一个频道。使用 PyAudio 网站上的示例,您通过 wave 模块读取大量数据然后写入流,我不确定是否需要以某种方式读取一个数据通道并写入一个通道流,或者是否有是其他一些解决方案。感谢您的帮助。

【问题讨论】:

    标签: python pyaudio


    【解决方案1】:

    我建议您更改流并用您想收听的频道中的数据覆盖您不想收听的频道。通常,通道是交错的,所以下面应该可以解决问题。

    import pyaudio
    import wave
    import sys
    
    chunk = 1024
    
    def convert(data, sampleSize = 4, channel = 0):
        for i in range(0, len(data), 2*sampleSize):
            for j in range(0, sampleSize):
               data[i + j + sampleSize * channel] = data[i + j + sampleSize * (1 - channel)]
    
    if len(sys.argv) < 2:
        print "Plays a wave file.\n\n" +\
              "Usage: %s filename.wav" % sys.argv[0]
        sys.exit(-1)
    
    wf = wave.open(sys.argv[1], 'rb')
    
    p = pyaudio.PyAudio()
    
    # open stream
    stream = p.open(format =
                    p.get_format_from_width(wf.getsampwidth()),
                    channels = wf.getnchannels(),
                    rate = wf.getframerate(),
                    output = True)
    
    # read data
    data = wf.readframes(chunk)
    convert(data)
    
    # play stream
    while data != '':
        stream.write(data)
        data = wf.readframes(chunk)
        convert(data)
    
    stream.close()
    p.terminate()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多