Python 从PyTTS音频流编码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

我使用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文件(在复制时)听起来像唐老鸭一样无法压缩:-) 下面是一段代码:

            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)进行编码:对于您的程序,它看起来像是在使用中间文件,但实际上不会