使用synthesizing
回调,我们如何正确地将音频数据流到一个文件?我想写一个文件,只要音频数据发生,这不是我的最终意图,但如果这工作,我可以继续与更多的能力后。
我必须使用synthesizing
回调。
在下面的代码中server_bad_audio
有一个跳动的声音,server_audio
是所有好的。
这里有什么问题吗?有什么提示吗?
audio_queue = asyncio.Queue()
async def send_audio(self, queue):
with wave.open("server_bad_audio.wav", "wb") as wav_file:
wav_file.setnchannels(1)
wav_file.setsampwidth(SAMPLE_WIDTH)
wav_file.setframerate(FRAME_RATE)
while True:
audio_data = await queue.get()
if audio_data is None:
break
self.logger.info('Sending audio chunk of length {}'.format(len(audio_data)))
wav_file.writeframes(audio_data)
def synthesize_callback(evt: SpeechSynthesisEventArgs):
audio = evt.result.audio_data
self.logger.info('Audio chunk received of length {}, duration {}'.format(len(audio), evt.result.audio_duration))
audio_queue.put_nowait(audio)
...
audio_config = AudioOutputConfig(filename="server_audio.wav")
synthesizer = SpeechSynthesizer(speech_config=self.speech_config, audio_config=audio_config)
synthesizer.synthesizing.connect(synthesize_callback)
result = synthesizer.speak_ssml_async(ssml_text).get()
...
audio_queue.put_nowait(None)
await send_audio_task
字符串
1条答案
按热度按时间x759pob21#
问题是WAV文件格式要求在写入音频数据本身之前,用正确的音频属性写入头。
send_audio
函数,在写入音频数据之前写入WAV文件头。使用audio_queue
调用send_audio
函数。现在音频数据将通过回调接收。字符串
synthesize_callback()
函数将接收音频块,send_audio()
函数将音频数据流传输到WAV文件。下面的声明将帮助您确定问题是否存在于收到的音频数据或WAV文件创建中。
型
检查wav文件是否在同一应用程序目录中生成。
的数据
输出:
的