2014-11-14 343 views
0

我有一个pyaudio问题。只有当我将频道号设置为1时,才能播放非阻塞流的声音。当我将其设置为2时,我听不到任何声音,脚本无法退出。即使数据是单声道的,它不应该正常播放吗?这里是我的代码片段:使用Python播放双声道声音PyAudio

pa = pyaudio.PyAudio() 
out_stream = pa.open(format = pyaudio.paFloat32, 
      channels = 2, 
      rate = 44100, 
      output = True, 
      stream_callback = self._output_callback(out_data), 
      frames_per_buffer=100) 

out_stream.start_stream() 
    while(out_stream.is_active()): 
     time.sleep(0.1) 
    out_stream.stop_stream() 

pa.terminate() 


@staticmethod 
def _output_callback(wav_data): 

    def callback(in_data, frame_count, time_info, status): 
     pos = callback.pos 
     callback.pos += frame_count 
     out_data = wav_data[pos:pos+frame_count] 
     return (out_data, pyaudio.paContinue) 
    callback.pos = 0 

    return callback 

OUT_DATA是numpy.float32格式numpy的阵列

回答

0

好吧,我知道其中的原因。以前我不知道,但跳水后一点到pyaudio soruce我意识到,在回调函数我应该返回

frame_count * number_of_channels 

帧。所以在我的情况的解决方案是在回调函数的开头插入

frame_count *= 2  # Because of 2 channels