2012-08-22 29 views
1

我目前有一個2頻道的wav文件。我希望能夠一次播放一個頻道。使用來自PyAudio網站的示例,您可以通過wave模塊讀取大塊數據,然後寫入流,但我不確定是否需要以某種方式讀取一個數據通道並寫入一個通道流,或者如果存在是一些其他解決方案。謝謝您的幫助。使用PyAudio或類似的播放單聲道音頻

回答

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()