我使用Python2.5在音频mp3文件中处理文本到语音的转换。
我使用pyTSS作为python文本到语音转换模块,来转换音频.wav文件中的文本(在pyTTS中不能直接以mp3格式编码)。然后,我使用lame命令行编码器将这些wav文件编码为mp3格式。
现在,问题是,我想插入一个特定的外部声音文件(如声音警告)或(如果可能的话,一个生成的警告声音)(特别是音频mp3文件的两个单词之间)。
问题包括:
1)我已经看到PyTTS可以将音频流保存在文件或内存流中。使用两个函数:
Tts.SpeakToWave(文件,文本)或tts.SpeakToMemory(文本)
利用tts.SpeakToMemory(文本)函数,并使用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文件。
我希望已经说清楚了。:-)
非常感谢你对我的问题的回答。
朱利奥
发布于 2010-02-04 19:43:43
我不认为PyTTS产生默认的PCM数据(即44100 Hz,立体声,16位)。您应该像这样检查格式:
memStream = tts.SpeakToMemory("some text")
format = memStream.Format.GetWaveFormatEx()...and将它正确地交给acodec。因此,您可以使用属性format.Channels、format.BitsPerSample和format.SamplesPerSec。
至于你的第二个问题,如果声音是相同的格式,你应该能够简单地将它们一个接一个地传递给enc.encode。
发布于 2010-02-04 19:50:32
这里无法提供明确的答案,很抱歉。但也有一些尝试和错误:我会查看pymedia模块的文档说明,以检查是否有您可以设置的任何质量配置。
另一个要点是,与mp3或原始音频不同,你不能简单地连接mp3编码的音频:无论你得到什么解决方案,你都必须在声音未压缩(未编码)的时候连接/混合它们,然后生成mp3编码的音频。
此外,有时我们只是觉得把fiel记录到磁盘上并重新转换,而不是在“一步”中完成是很尴尬的-而实际上,即使我们自己没有指定一个文件,软件也会在幕后做到这一点。如果你在一个类Unix的系统上,你总是可以创建一个先进先出的特殊文件(使用mkfifo命令),并在一个单独的进程中发送你的.wav数据进行编码(使用lame):对于你的程序来说,它看起来像是在使用一个中间文件,但实际上你并不是这样做的。
https://stackoverflow.com/questions/2199151
复制相似问题