Python 从PyTTS音频流编码mp3
我使用python 2.5处理音频mp3文件中的文本到语音转换文本 我使用pyTSS作为python文本到语音模块,以转换audio.wav文件中的文本(在pyTTS中不可能直接以mp3格式编码)。在那之后,我使用lame命令行编码器以mp3格式对这些wav文件进行编码 现在,问题是,我想插入一个特定的外部声音文件(比如声音警告)或(如果可能的话,插入一个音频mp3文件的特定点,在两个单词之间) 问题是: 1) 我已经看到PyTTS可以将音频流保存在文件或内存流中。使用两个功能: tts.SpeakToWave(文件、文本)或tts.SpeakToMemory(文本) 利用tts.speaktomory(text)函数,并使用PyMedia,我可以直接保存mp3,但mp3文件(在复制时)听起来像唐老鸭一样无法压缩:-) 下面是一段代码:Python 从PyTTS音频流编码mp3,python,mp3,text-to-speech,encoder,Python,Mp3,Text To Speech,Encoder,我使用python 2.5处理音频mp3文件中的文本到语音转换文本 我使用pyTSS作为python文本到语音模块,以转换audio.wav文件中的文本(在pyTTS中不可能直接以mp3格式编码)。在那之后,我使用lame命令行编码器以mp3格式对这些wav文件进行编码 现在,问题是,我想插入一个特定的外部声音文件(比如声音警告)或(如果可能的话,插入一个音频mp3文件的特定点,在两个单词之间) 问题是: 1) 我已经看到PyTTS可以将音频流保存在文件或内存流中。使用两个功能: tts.Spe
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文件
我希望已经讲清楚了。:-)
非常感谢你回答我的问题
Giulio我认为PyTTS不会产生默认的PCM数据(即44100 Hz、立体声、16位)。您应该检查如下格式:
memStream = tts.SpeakToMemory("some text")
format = memStream.Format.GetWaveFormatEx()
…并将其正确地移交给acodec
。因此,您可以使用属性format.Channels
、format.BitsPerSample
和format.SamplesPerSec
至于你的第二个问题,如果声音的格式相同,你应该能够简单地将它们一个接一个地传递到
enc.encode
。我认为PyTTS不会产生默认的PCM数据(即44100 Hz、立体声、16位)。您应该检查如下格式:
memStream = tts.SpeakToMemory("some text")
format = memStream.Format.GetWaveFormatEx()
…并将其正确地移交给acodec
。因此,您可以使用属性format.Channels
、format.BitsPerSample
和format.SamplesPerSec
至于你的第二个问题,如果声音的格式相同,你应该能够简单地将它们一个接一个地传递到
enc.encode
。这里无法提供明确的答案,抱歉。但也有一些尝试和错误:我会查看pymedia模块的文档,以检查tehre是否有任何可以设置的质量配置
另一点是,与wave或原始音频不同,您无法简单地连接mp3编码音频:无论您采用何种解决方案,您都必须在声音未压缩(未编码)时连接/混合声音,然后生成mp3编码音频
此外,有时我们会觉得,将文件刻录到磁盘并重新确认,而不是“一步”完成这项工作是很尴尬的——而在实践中,该软件显然是在幕后完成的,即使我们自己没有指定文件。如果您使用的是类Unix系统,则始终可以创建一个FIFO特殊文件(使用mkfifo命令)并将yoru.wav数据发送到该文件,以便在单独的过程中进行编码(使用lame):对于您的程序,它看起来像是在使用中间文件,但实际上不会。抱歉,此处无法提供明确的答案。但也有一些尝试和错误:我会查看pymedia模块的文档,以检查tehre是否有任何可以设置的质量配置 另一点是,与wave或原始音频不同,您无法简单地连接mp3编码音频:无论您采用何种解决方案,您都必须在声音未压缩(未编码)时连接/混合声音,然后生成mp3编码音频 此外,有时我们会觉得,将文件刻录到磁盘并重新确认,而不是“一步”完成这项工作是很尴尬的——而在实践中,该软件显然是在幕后完成的,即使我们自己没有指定文件。如果您使用的是类Unix系统,则始终可以创建一个FIFO特殊文件(使用mkfifo命令),并将yoru.wav数据发送到该文件,以便在单独的过程中(使用lame)进行编码:对于您的程序,它看起来像是在使用中间文件,但实际上不会