我使用 python 2.5 在音频 mp3 文件中进行文本到语音转换。
我使用 pyTSS 作为 python 文本转语音模块,来转换音频 .wav 文件中的文本(在 pyTTS 中不可能直接编码为 mp3 格式)。之后,我使用 lame 命令行编码器以 mp3 格式对这些 wav 文件进行编码。
现在的问题是,我想插入(特别是音频 mp3 文件的两个单词之间的点)特定的外部声音文件(如声音警告)或(如果可能的话,生成的警告声音)。
问题是:
1) 我已经看到 PyTTS 可以将音频流保存在文件或内存流中。使用两个函数:
tts.SpeakToWave(文件, 文本) 或 tts.SpeakToMemory(文本)
利用 tts.SpeakToMemory(text) 函数,并使用 PyMedia 我已经能够直接保存 mp3,但 mp3 文件(复制时),听起来像唐老鸭一样难以理解! :-) 这是一段代码:
params = {'id': acodec.getCodecID('mp3'), 'bitrate': 128000, 'sample_rate': 44100, 'ext': 'mp3', 'channels': 2}
m = tts.SpeakToMemory(p.Text)
soundBytes = m.GetData()
enc = acodec.Encoder(params)
frames = enc.encode(soundBytes)
f = file("test.mp3", 'wb')
for frame in frames:
f.write(frame)
f.close()
我不明白问题出在哪里?!? 这种可能性(如果它能正常工作),最好跳过 wav 文件转换步骤。
2)作为第二个问题,我需要将音频 mp3 文件(从文本到语音模块获得)与特定的警告声音连接起来。
显然,如果我能够在将整个音频内存流编码到唯一的 mp3 文件之前,将文本音频内存流(在文本转语音模块之后)和警告声音流连接起来,那就太好了。
我还看到 tksnack 库可以连接音频,但它们无法写入 mp3 文件。
我希望已经说清楚了。 :-)
非常感谢您对我的问题的回答。
朱利奥
最佳答案
我认为 PyTTS 不会生成默认的 PCM 数据(即 44100 Hz、立体声、16 位)。您应该检查如下格式:
memStream = tts.SpeakToMemory("some text")
format = memStream.Format.GetWaveFormatEx()
...并将其正确交给acodec
。因此,您可以使用属性 format.Channels
、format.BitsPerSample
和 format.SamplesPerSec
。
关于你的第二个问题,如果声音的格式相同,你应该能够简单地将它们全部传递给 enc.encode
,一个接一个。
关于python - 从 PyTTS 音频流编码 mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199151/