如何解决在pyaudio的回调模式下使用pydub播放音频时出现问题
我有一个脚本,该脚本使用pydub读取音频媒体文件,然后将其输出到pyaudio流。使用下面的代码,它可以快速播放,并且我只听见音频片段。我认为问题在于pydub使用毫秒,而pyaudio却需要帧。
def _load_media(self,media_location) :
self.media = AudioSegment.from_file(media_location)
self.stream = self.p.open( format=self.p.get_format_from_width(self.media.sample_width),channels=self.media.channels,rate=self.media.frame_rate,output=True,stream_callback=self._load_frames)
self.media_loaded = True
def _load_frames(self,in_data,frame_count,time_info,status) :
data = self.media[:frame_count].raw_data
self.media = self.media[frame_count:]
return (data,pyaudio.paContinue)
解决方法
我遇到了和你一样的问题,我已经解决了。您的想法是正确的,pyDub 正在使用 ms,其中 pyAudio 为其提供帧。你只需要像这样转换它:
def _load_frames(self,in_data,frame_count,time_info,status) :
time = ( frame_count / self.media.frame_rate ) * 1000.0
data = self.media[:time].raw_data
self.media = self.media[time:]
return (data,pyaudio.paContinue)