2012-08-22 3 views
1

현재 2 채널 wav 파일이 있습니다. 한 번에 하나의 채널을 재생할 수있는 기능을 원합니다. 웨이브 모듈을 통해 데이터 덩어리를 읽고 스트림에 쓰는 PyAudio 웹 사이트의 예제를 사용하여 데이터의 한 채널을 읽고 한 채널 스트림에 쓸 필요가 있는지, 아니면 다른 해결책입니다. 도와 주셔서 감사합니다.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()