我正在嘗試通過AudioQueue讀取音頻數據。當我這樣做時,我可以驗證文件的位深度是16位。但是當我得到實際的樣本數據時,我只能看到從-128到128的值。但是我也看到了可疑的交錯數據,這使我很確定我只是沒有正確讀取數據。使用AudioQueue讀取音頻緩衝區數據
所以首先,我可以驗證源文件是44100,16位單聲道wav文件。
我的緩衝區正是如此分配:
char *buffer= NULL; buffer = malloc(BUFFER_SIZE); assert(buffer);
所有相關的值設置和使用:
AudioFileReadPackets(inAudioFile,false,&bytesRead,NULL,packetNum,&numPackets,buffer);
作爲測試,只是讓我可以看到檢索到的數據,我跑:
for(int i=0;i<BUFFER_SIZE;i++){ NSLog(@"%i", buffer[i]); }
現在,我知道我的源文件在所有地方達到峯值,但是我所看到的值只在-128 nd 128.由於這是一個16位文件,因此我認爲這些值將是-32768到32768.
另外,數據中似乎有兩種模式。下面是一個返回數據的例子:
70 -13 31 -11 -118 -9 -15 -7 116 -4 31 -1 28 1 84 2 -123 3 -97 4 110 5 54 6 126
現在看看從第二行開始的每一行:-13。看看它是如何增加的,而不是均勻的,但至少順利嗎?奇數行幾乎沒有光滑的地方。
我的第一個想法是,這是交錯立體聲數據,但不是,它只有一個通道,所以不應該有任何交錯,對嗎?
我最好的猜測是我只是錯誤地讀取數據,所以樣本數據跨越兩個回報。任何想法如何正確讀取它?
感謝您閱讀整個問題,併爲您提供任何見解。
再次感謝彼得! – 2009-08-08 06:53:46