2011-01-26 52 views
16

在我的高中,我們可以參加一門課,我們基本上可以自己學習一個學科的課程。我想我想了解「聲音編程」,但是我意識到我不知道這會帶來什麼。例如,我有興趣瞭解合成器的工作原理以及聲音如何在計算機科學中發揮作用。我真的想專注於低級代碼部分,而不是組成部分。這是一個可行的主題?有沒有對這個完全陌生的人有任何好的教程? 我知道C++並使用Windows。 this的第一個答案是我感興趣的東西(雖然它超出了我的頭)。我想學習音頻編程

+1

糟糕,我不知道我必須這樣做。感謝您的領導! – ahota 2011-01-26 06:07:19

回答

17

「聲音編程」是一個非常廣泛的領域。首先,這絕對是一個可行的主題,但是因爲你需要將東西塞進一個學期,所以你需要限制你的範圍。我可以看到你正在尋找一個開始的地方,所以這裏有一些想法讓你思考。

既然你提到的這兩個「如何在計算機科學的聲音作品」和「合成」,這是值得指出模擬之間的差別聽起來採樣聲音合成的聲音,因爲它們是不同的概念。我會在這裏簡要解釋一下。

模擬聲音聽起來像我們人類通常解釋的那樣 - 人耳感受到的空氣振動。您可以將聲音想象爲一維信號,其中自變量是時間,因變量是振動幅度。模擬聲音在時間和幅度域都是連續的。較舊的錄音方法(例如磁帶)使用模擬聲音表示法。模擬聲音不常用於計算機(計算機不適合存儲連續域數據),但理解模擬信號非常重要。如果沿着這條路走下去,預計會看到很多數學(例如複數,傅里葉變換)。

採樣聲音是一種聲音表示,很適合用計算機處理。人們通過CD和其他音樂錄音最熟悉採樣聲音。模擬信號以某個頻率被採樣(例如,用於CD記錄的44.1KHz)。所以採樣的聲音信號在時域中是離散的。如果信號是量化的那麼它在振幅域中也將是離散的。 MP3等格式是採樣格式。如果你感興趣的話,還有很多東西可以在這個領域學習,比如恢復(去除靜態等等)和壓縮(再次,編解碼器MP3,Ogg Vorbis)。這非常有趣,因爲有很多可以進行試驗和編碼。

模擬和採樣聲音都深深地挖掘出一個叫做的數字信號處理。谷歌周圍,以瞭解它是什麼感覺。它通常作爲大學課程教授,所以如果你真的熱衷於閱讀一些幻燈片,甚至嘗試一些較早,較簡單的項目。

合成聲音是適合於再現音樂曲目的表示,其中播放樂曲的樂器事先已知。把它看作電腦的樂譜。有人必須樂譜 - 你不能像模擬或採樣聲音一樣記錄它。這使得合成聲音一個完全不同的表示模擬聲音採樣聲音此外,計算機需要知道什麼是樂器(如鋼琴),以便它可以播放(合成)曲目。如果它不知道樂器,它會放棄或選擇一個近似匹配(例如用電子琴替換鋼琴)。我之前從未與合成器合作過,因此我無法評論他們的學習曲線。

所以,根據我寫的內容 - 選擇一個更感興趣的方向,谷歌周圍,然後優化你的問題。

編輯

一本好書讀的是this。你可以在亞馬遜環顧相關書籍並找到更新的東西,但是自從我進行音頻處理購物以來,這已經有一段時間了。

如果你有半個小時的空餘時間,那麼看看這個video tutorial。它涵蓋聲音,圖像和視頻處理 - 它們實際上是密切相關的領域。

+0

太棒了。你已經給我很多東西了。我一定會看看那本書! – ahota 2011-01-27 02:43:26

3

考慮通過書"Who Is Fourier?: A Mathematical Adventure"工作。你可以調整這些例子來做一些小的編程任務來演示基本概念。完成後,您應該能夠使用fft在發音元音a,e,i,o,u時製作聲音的聲譜圖 - 識別每個元音的基頻和前綴。

我推薦學習Python和模塊NumPy, SciPy, and matplotlib(這裏有很多,所以超出了基本教程,只是隨時學習)。 iPython shell具有「-pylab -p scipy」選項來自動將最常用的工具導入到您的名稱空間中。您可以使用PyAudio錄製和播放音頻。還有Pygame,它擴展SDL(簡單DirectMedia層)和pyglet,它使用OpenAL(音頻的OpenGL;它具有3D音頻和效果)。至於C/C++,還有用於信號處理的IT ++,SPUC和FFTW,以及用於連接硬件和音頻文件的SDL/SDL_mixer和OpenAL/ALmixer。

1