ndr*_*ndr 5 audiounit ios remoteio ios16
我在 iOS 16 中收到错误。此错误不会出现在以前的 iOS 版本中。我正在使用 RemoteIO 以 4000 Hz 播放实时音频。错误如下:
输入数据过程返回不一致的2个186字节数据包;每个数据包 2 字节,实际上是 93 个数据包
这是音频格式和回调的设置方式:
// Set the Audio format
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 4000;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 2;
audioFormat.mBytesPerFrame = 2;
AURenderCallbackStruct callbackStruct;
// Set output callback
callbackStruct.inputProc = playbackCallback;
callbackStruct.inputProcRefCon = (__bridge void * _Nullable)(self);
status = AudioUnitSetProperty(audioUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Global,
kOutputBus,
&callbackStruct,
sizeof(callbackStruct));
Run Code Online (Sandbox Code Playgroud)
请注意,我设置的 mSampleRate 为 4000 Hz。在 iOS 15 中,我在每个回调中获得 0.02322 秒的缓冲持续时间 (IOBufferDuration) 和 93 帧。这是预期的,因为:
number of frames * buffer duration = sampling rate
93 * 0.02322 = 4000 Hz
Run Code Online (Sandbox Code Playgroud)
但是,在 iOS 16 中,我在回调中收到上述错误。
输入数据过程返回不一致的2个186字节数据包;每个数据包 2 字节,实际上是 93 个数据包
由于帧数等于数据包数,因此我在回调中收到 1 或 2 帧,并且缓冲区持续时间为 0.02322 秒。这并不影响“原始”信号的播放,但确实影响了“处理后”信号的播放。
number of frames * buffer duration = sampling rate
2 * 0.02322 = 0.046 Hz
Run Code Online (Sandbox Code Playgroud)
这没有任何意义。不同采样率(8000、16000、32000)会出现此错误,但 44100 不会出现此错误。但是我想保留 4000 作为我的采样率。
我还尝试使用 AVAudioSession 的 setPreferredSampleRate(_:) 函数设置采样率,但尝试没有成功。调用该函数后采样率仍然是44100。
任何有关此问题的帮助将不胜感激。
归档时间: |
|
查看次数: |
579 次 |
最近记录: |