2011-12-02 44 views
1

我想玩一些只有數字的文本到語音。我可以錄製10個wav文件,但我怎樣才能以編程方式將它們結合起來?如何以編程方式組合.wav文件?

例如,用戶鍵入1234,並且文本到語音將1.wav與2.wav,3.wav和4.wav結合以產生播放「一二三四」的1234.wav。

+0

從字典中讀取它們?無論如何,你不會在形象上將它們「結合」起來,而是依次閱讀它們。 – AsTheWormTurns

+0

@AsTheWormTurns我閱讀文本輸入(只有數字),每個數字都會被分開,所以我不需要將哪些數字文件(1.wav,2.wav ...)合併,並按照哪個順序排列 –

回答

0

1)創建一個新的目標樣本緩衝區(您將需要知道大小)。

2)讀取樣本(例如使用AudioFile和ExtAudioFile API)並將它們按順序寫入緩衝區。您可能想要在文件之間添加靜音。

如果你的文件都是相同的深度(目標比特深度 - 16應該沒問題)和採樣率,這將有所幫助。另外,如果所有文件都有固定的已知採樣率和位深度,則可以將它們保存爲原始採樣數據,並且可以在更短的時間內完成,因爲您可以直接追加數據而無需全部寫入額外的音頻文件閱讀程序。

+0

您可以詳細介紹一下一個音頻noob?我想我可以控制速度和位深度,因爲我會手動記錄原始文件。但我不知道這些是什麼。我可以在Audacity中設置這個值嗎? –

+1

是的 - 使用編輯器(如Audacity),您可以記錄和導出特定位深度和採樣率的文件。要更改位深度,只需以16位重新導出文件(例如)。要更改採樣率,請使用Tracks-> Resample。或者你可以用這些設置來記錄它們(通常聽起來比應用採樣率轉換更好)。如果要導出爲原始音頻,請使用其他 - >導出 - >其他 - >選項 - > RAW。 – justin

+0

@justin我愛你!花了大量時間來了解如何導出爲Audacity中的原始數據! – Avi

0

開放源碼項目wavtools爲這類工作提供了一個很好的參考,如果你確定perl。否則,有一些類似的question以及一些java示例。

0

simplist common .wav(RIFF)文件格式在原始PCM樣本前面只有一個44字節的標題。因此,對於這些簡單類型的.wav文件,您可以嘗試將文件作爲原始字節讀取,從除第一個文件以外的所有文件中刪除44個字節的標題,並對樣本進行連接。或者直接使用音頻隊列API播放連接的樣本。