我一直在努力研究這個問題很長一段時間了,並且沒有在網絡上完成的代碼示例。誰能幫我?Objective-c/IOS:向後播放音頻文件最簡單的方法是什麼
我的應用程序使用AVFoundation來錄製音頻。 @ 16位深度,2個通道,WAV
我可以訪問音頻的字節,我只是不知道如何反轉它。
我一直在努力研究這個問題很長一段時間了,並且沒有在網絡上完成的代碼示例。誰能幫我?Objective-c/IOS:向後播放音頻文件最簡單的方法是什麼
我的應用程序使用AVFoundation來錄製音頻。 @ 16位深度,2個通道,WAV
我可以訪問音頻的字節,我只是不知道如何反轉它。
在波數據樣本中是交錯的。這意味着數據是這樣組織的。由於每個採樣是16位(2字節),所以前2個通道採樣(即,對於左和右)是4個字節大小。
你知道,在波數據塊的最後一個樣本是如下這樣:
wavDataSize - 4
然後,您可以在同一時間通過複製到不同的緩衝區由從末端開始加載每個樣品的錄音和倒退。當您到達波形數據的起點時,您已經顛倒了波形數據,並且將會顛倒播放。
編輯:如果您想在iOS上輕鬆閱讀wave文件,請查看Audio File Services Reference。
編輯2:
readPoint = waveDataSize;
writePoint = 0;
while(readPoint > 0)
{
readPoint -= 4;
Uint32 bytesToRead = 4;
Uint32 sample;
AudioFileReadBytes(inFile, false, maxData, &bytesToRead &sample);
AudioFileWriteBytes(outFile, false, writePoint, &bytesToRead, &sample);
writePoint += 4;
}
假定一個單塊的WAV文件,嘗試memmapping該文件,並以相反的順序出複製的樣品中,從文件的末端開始,到音頻隊列或RemoteIO緩衝器,在回調期間,使用其中一種API播放音頻。在到達WAV/RIFF頭部之前停止複製(通常是第44個字節)。
要反轉音頻,爲什麼不使用MPMediaPlayback的currentPlaybackRate(https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)
的難點在於它是否具有標題和塊的wav文件格式。 – zaph
@CocoaFu:不是。 Apple爲您提供了一大堆處理波形文件的函數。這種格式並不是你自己很難完成的。 – Goz
@Goz謝謝,如果問得不是太麻煩,你能提供一個代碼樣本來幫助我理解嗎?這將如何實現代碼明智? – DaveSmith122