AudioQueue 経由でオーディオ データを読み込もうとしています。そうすると、ファイルのビット深度が 16 ビットであることを確認できます。しかし、実際のサンプル データを取得すると、-128 から 128 までの値しか表示されません。しかし、インターリーブされた不審なデータも表示されるため、データを正しく読み取っていないことがわかります。
まず、ソース ファイルが 44100、16 ビット、モノ wav ファイルであることを確認できます。
私のバッファは次のように割り当てられます:
char *buffer= NULL; バッファ = malloc(BUFFER_SIZE); アサート (バッファ);
関連するすべての値が設定され、以下で使用されます。
AudioFileReadPackets(inAudioFile,false,&bytesRead,NULL,packetNum,&numPackets,buffer);
テストとして、取得したデータを確認できるように、次を実行します。
for(int i=0;i<BUFFER_SIZE;i++){ NSLog(@"%i", バッファ[i]); }
これで、ソース ファイルがいたるところでピークに達していることがわかりましたが、表示される値は -128 と 128 の最大値しかありません。これは 16 ビット ファイルであるため、値は -32768 から 32768 になると予想されます。
また、データには2パターンあるようです。返されるデータの例を次に示します。
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
次に、2 行目 (-13) から 1 行おきに見ていきます。均等にではなく、少なくともスムーズに増加する様子をご覧ください。奇数行はそれほど滑らかではありません。
私の最初の考えでは、これはインターリーブされたステレオ データですが、いや、それは 1 つのチャンネルだけなので、インターリーブはありませんよね?
私の推測では、データを間違って読み取っているだけなので、サンプル データは 2 つのリターンにまたがっています。正しく読む方法はありますか?
質問全体を読んでくれてありがとう、そしてあなたが提供できる洞察をありがとう。