簡體   English   中英

從PyTTS的音頻流中編碼mp3

[英]encoding mp3 from a audio stream of PyTTS

我使用python 2.5處理音頻mp3文件中的文本到語音轉換文本。

我將pyTSS用作python Text-To-Speech模塊,以轉換音頻.wav文件中的文本(在pyTTS中無法直接以mp​​3格式編碼)。 因此,之后,我使用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()

...並將其正確acodecacodec 因此,可以使用屬性format.Channelsformat.BitsPerSampleformat.SamplesPerSec

關於第二個問題,如果聲音的格式相同,則應該可以將它們全部enc.encode傳遞給enc.encode

抱歉,無法在此處提供明確的答案。 但是有一些試驗和錯誤:我將查看pymedia模塊的文檔,以檢查是否可以設置任何質量配置。

另一個流行之處是,與波形或原始音頻不同,您將無法簡單地連接mp3編碼的音頻:無論采用哪種解決方案,都必須在未壓縮(未編碼)的同時連接/混合聲音,然后生成mp3編碼的音頻。

另外,有時我們會感覺到將文件記錄到磁盤上並進行重新轉換,而不是“一步一步”地進行操作是很尷尬的-而在pratie中,該軟件確實確實在幕后,即使我們未指定歸檔自己。 如果您使用的是類似Unix的系統,則始終可以創建一個FIFO特殊文件(使用mkfifo命令),並在一個單獨的進程中(使用la腳)將yoru .wav數據發送給encodin:對於您的程序,它看起來像是使用中間文件,但實際上不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM