我正在使用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,described here.
据我所知,在这种情况下,我需要以某种方式计算每个数据包的帧数。我唯一的附加信息是nBlockAlign字段,多媒体wiki将其描述为“IMA编码数据块的大小”。
我对此感到茫然。
每个数据包的帧数是如何计算的?它是否涉及nBlockAlign的块大小?
我将kAudioFormatDVIIntelIMA和kAudioFormatAppleIMA4列为格式。 iOS甚至支持这种ADPCM吗?