2014-06-06 4 views
0

다음은 비동기 오디오 플레이어 용 코드입니다. 문제는 p.open(...) 이후 즉시 콜백 함수를 호출한다는 것입니다. start_streamstop_stream 함수는 무엇을합니까? pyaudio.Stream 문서에서PyAudio에서 스트림을 만든 직후 스트리밍을 시작하지 않으려면 어떻게해야합니까?

class AsyncAudioPlayer(object): 

    def __init__(self, sampling_frequency, sample_width=2): 
     self.p = PyAudio() 
     self.buffer = MyBuffer() 
     self.stream = self.p.open(format=self.p.get_format_from_width(width=sample_width), rate=sampling_frequency, 
            output=True, channels=1, stream_callback=self.on_ready_to_play) 
     self.started = False 

    def close(self): 
     self.stream.stop_stream() 
     self.stream.close() 

    def start(self): 
     self.started = True 
     self.stream.start_stream() 

    def schedule_to_play(self, frame): 
     self.buffer.put_frames(frame) 
     if not self.started: 
      print("Not started. Starting now") 
      # self.start() 

    def on_ready_to_play(self, in_data, frame_count, time_info, status_flags): 
     print("frame count is {}, time_info {}, status flags {}".format(frame_count, time_info, status_flags)) 
     return self.buffer.get_frames(frame_count), paContinue 
+0

콜백 번 발사, 또는 반복적인가? 스트림을 시작할 때 즉시 재생할 수 있도록 한 버퍼의 데이터를 대기열에 넣으려고합니까? –

+0

paContinue 플래그에 따라 반복적으로 실행되지 않겠습니까? 제 솔직히 말해서 구체적으로 말하기 전에 한 번도 불을 지르지 않아야합니다. PortAudio의 문서를 읽은 후에 나는 내가 옳다고 생각합니다. – user1685095

답변

1

:

시작 - 스트림이 즉시 실행 시작합니다. 기본값은 True입니다. 일반적으로이 값을 False으로 설정할 이유가 없습니다.

그래서 당신은 당신 pyaudio.PyAudio.open 전화에 약간의 수정이 필요합니다

self.stream = self.p.open(format=self.p.get_format_from_width(width=sample_width), 
          rate=sampling_frequency,output=True, channels=1, 
          stream_callback=self.on_ready_to_play, start=False)