AudioUnit / RemoteIO API を使用して、ストリーミング オーディオの再生を実現しています。a-law や u-law などの他の形式は問題なく動作しています。
a-law 形式の設定方法の例を次に示します。
audioFormat.mSampleRate = format->nSamplesPerSec;
audioFormat.mFormatID = kAudioFormatALaw;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = format->nChannels;
audioFormat.mBitsPerChannel = format->wBitsPerSample;
audioFormat.mBytesPerFrame = (format->wBitsPerSample * format->nChannels) / 8;
audioFormat.mBytesPerPacket = audioFormat.mBytesPerFrame * audioFormat.mFramesPerPacket;
私が使用しようとしている形式は、ここで説明されている MS ADPCM です。
私が理解していることから、この場合、パケットあたりのフレーム数を何らかの方法で計算する必要があります。私が持っている唯一の追加情報は、nBlockAlign フィールドです。これは、マルチメディア ウィキが「IMA でエンコードされたデータのブロックのサイズ」と説明しています。
私はこれで途方に暮れています。
パケットあたりのフレーム数はどのように計算されますか? nBlockAlign のブロック サイズは関係しますか?
kAudioFormatDVIIntelIMA と kAudioFormatAppleIMA4 がフォーマットとしてリストされています。iOS はこの種の ADPCM をサポートしていますか?