我目前有一个2频道的wav文件。我希望能够一次播放一个频道。使用PyAudio网站上的示例,您通过wave模块读取大量数据,然后写入流,我不确定是否需要以某种方式读取一个数据通道并写入一个通道流,或者是否存在是其他一些解决方案。谢谢你的帮助。
答案 0 :(得分: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()