python - 从 PyTTS 音频流编码 mp3

标签 python mp3 text-to-speech encoder

我使用 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.Channelsformat.BitsPerSampleformat.SamplesPerSec

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

关于python - 从 PyTTS 音频流编码 mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199151/

相关文章:

python - 如何更改 Squish 中 waitForObject 函数使用的默认超时

python - 在脚本标签内解析 json var

ios - AVaudioPlayer 不工作,mp3 位于编译包中

python - 爆破喇叭ffmpeg音效

java - J2ME Native Mp3 Player - 播放大于 1.5 MB 的 mp3 文件

exception - Windows 7 上的 C++ Builder 中的语音 API (SAPI) 浮点除以零

python - 如何添加带有泡沫的新对象?

android - 使用 PyCrypto 验证来自 Google Licensing 的 RSA 签名

text-to-speech - 使用 google cloud api 时的计费/配额问题

java - 如何强制 Android 的文本转语音从手机的顶部扬声器中发出,就像普通电话一样