1

我使用 python 2.5 处理音频 mp3 文件中的文本到语音转换文本。

我使用 pyTSS 作为 python Text-To-Speech 模块,以转换音频 .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 文件。

我希望已经清楚了。:-)

非常感谢您对我的问题的回答。

朱利奥

4

2 回答 2

1

我认为 PyTTS 不会产生默认的 PCM 数据(即 44100 Hz、立体声、16 位)。您应该像这样检查格式:

memStream = tts.SpeakToMemory("some text")
format = memStream.Format.GetWaveFormatEx()

...并将其正确移交给acodec. 因此,您可以使用属性format.Channels和。format.BitsPerSampleformat.SamplesPerSec

至于你的第二个问题,如果声音格式相同,你应该能够简单地将它们enc.encode一个接一个地传递给 。

于 2010-02-04T11:43:43.423 回答
0

在这里无法给出明确的答案,抱歉。但是有一些试验和错误:我会查看 pymedia 模块的文档以检查是否有任何可以设置的质量配置。

另一个想法是,与波形或原始音频不同,您将无法简单地连接 mp3 编码的音频:无论您达到何种解决方案,您都必须在未压缩(未编码)时连接/混合您的声音,然后生成 mp3 编码的音频。

此外,有时我们只是觉得将一个字段记录到磁盘并重新转换,而不是“一步”完成,这很尴尬 - 而在 pratie 中,即使我们没有指定自己归档。如果你在一个类 Unix 系统上,你总是可以创建一个 FIFO 特殊文件(使用 mkfifo 命令)并在一个单独的进程中发送 yoru .wav 数据用于编码(使用 lame):对于你的程序,它看起来像你使用中间文件,但您实际上不会。

于 2010-02-04T11:50:31.533 回答