我正在使用 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 字段,多媒体 wiki 将其描述为“IMA 编码数据块的大小”。
我对此感到茫然。
每个数据包的帧数是如何计算的?它是否涉及来自 nBlockAlign 的块大小?
我看到 kAudioFormatDVIIntelIMA 和 kAudioFormatAppleIMA4 被列为格式。iOS甚至支持这种ADPCM吗?