2009-11-23 84 views
7

我的問題並不完全與編程有關,但我認爲這是正確的問題。如何混合音頻樣本?

在我的程序中,我生成一些音頻數據並將音軌保存爲WAV文件。一切聲音發生器都可以正常工作。但現在我想添加更多的生成器並將生成的音頻數據混合到一個文件中。不幸的是,它比起初看起來更復雜。 此外,我沒有找到有關如何混合一組音頻樣本的很多有用信息。

那麼有沒有人可以給我建議?

編輯:

我用C++編程。但這並不重要,因爲我對混合兩個音軌背後的理論感興趣。我的問題是我不能總結樣本,因爲這經常會產生失真的聲音。

+0

什麼編程語言和平臺的髒組合? – 2009-11-23 16:46:53

+0

你在用什麼語言?什麼庫?提供更多的細節。 – Poindexter 2009-11-23 16:47:11

回答

6

我認爲你的問題是,對於每一個音頻源你,你不必降低水平正在增加。

如果應用程序爲用戶提供控制權,讓他們直接控制級別。熱情是他們的責任,而不是你的責任。這是「總結」。

如果混合是自動的,you're about to go on a journey。如果沒有限制,你可能需要壓縮。 (極限是壓縮的極端版本​​。)

需要注意的是什麼,你做音頻(包括壓縮和限制)是失真的一種形式,所以你將有音頻的着色。您選擇的壓縮和限制算法會影響聲音。

既然你不產生實時的音頻輸出,必須做「磚牆」限制的可能性。那是因爲你已經預知了關卡的水平。實時限制更爲有限,因爲您無法知道即將發生的事情 - 您必須做出反應。

這是音樂,音效,聲音,什麼?

程序員here處理這一切的時候。

+0

謝謝你猜我想問我的原始問題;) – ralle 2009-11-23 18:38:30

+0

這是一個很常見的問題,正如你可能想象的那樣。 – Nosredna 2009-11-23 18:47:27

+0

這當然是,我遇到了同樣的問題,在actionscript 3中混合了兩個生成的聲音。感謝鏈接,看起來我有一些讀取壓縮機! – vitch 2010-02-23 23:42:08

0

你從來沒有說過什麼編程語言和平臺,但現在我會假設Windows使用C#。

http://www.codeplex.com/naudio

偉大的開源庫,真正覆蓋掉大量的在大多數音頻操作你會遇到的東西。

5

混音音頻樣本意味着將它們加在一起,就是這樣。通常情況下,您可以將它們添加到更大的數據類型中,以便在返回到目標緩衝區之前檢測溢出並限制值。如果您事先知道您會發生溢出,那麼您可以在添加之前縮放它們的幅度 - 只需乘以介於0和1之間的浮點值,再次牢記精度問題,可能首先轉換爲更大的數據類型。

如果您有沒有被這個解決一個具體問題,隨時更新你原來的問題。

+0

夾持是限制性的,聽起來很糟糕。在這個限制上,他更可能想要膝蓋。 :-) – Nosredna 2009-11-23 18:48:16

+0

他可能,但這在技術上是別的,而不是他所問:) – Kylotan 2009-11-24 00:06:12