1

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

4

1 回答 1

2

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

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()
于 2012-08-22T15:41:57.220 回答