2010-08-18 46 views
1

我是Core Audio的新手,真的迷路了,我試圖錄制音頻,然後將聲音調製應用於該錄製並播放它。我已經看過使用Audio Queue進行錄音的示例Speak Here。我被困在如何改變音頻樣本的部分。據我所知,可以在回撥功能中使用音頻單元來改變音頻樣本,但我不知道要對這些樣本應用什麼來改變它們(將改變音調的幫助?)。如何在iPhone Core Audio(音頻單元/遠程IO)中將錄製的語音轉換爲人的語音

如果你可以指示我一些源代碼或教程,或任何解釋語音調製目標C的網站將真的幫助我。謝謝大家。

+0

相關:http://stackoverflow.com/questions/1158950/voice-alteration-algorithm – cregox 2011-01-12 14:24:27

回答

2

你在這裏要做的並不是那麼簡單。基本上,你將不得不實現一個聲碼器(「語音編碼器」)來改變一個聲音。 Wikipedia links應該可以幫到你。

然後,您仍然在CoreAudio中操作這些示例。您可以使用Audio Queue Services來做到這一點,但這不完全是一個易於使用的API。使用其中一種更簡單的CoreAudio API並將聲碼器封裝在音頻單元中可能實際上並不麻煩。

你有一些音頻處理的經驗嗎?在沒有關於音頻處理的一些先前知識的情況下實施聲碼器通常是艱鉅的任務。

2

首先,要真正回答你的問題:當你調用AudioQueueNewInput()函數時,你會傳遞一個例程的名字,每當數據可用時你都會調用它。您可能稱之爲MyInputBufferHandler()或其他。它的第三個參數是一個保存傳入數據的AudioQueueBufferRef。

請注意,這不像看每個樣品(振幅)並降低或提高它那麼簡單。您將時域(時間)域中的樣本作爲幅度進行採樣。沒有可用的音調或頻率信息。你需要做的是將輸入樣本(波形)移動到頻域,其中該空間中的每個「點」都是一個頻率,並伴隨着功率和相位。你可以用FFT(快速傅里葉變換)來實現,但數學有些複雜。 Apple確實在加速框架中提供了FFT例程,但請注意,您正在這裏涉水很深。

相關問題