1 xcode objective-c core-audio audio-recording
在使用 remoteIO 对 iphone 音频进行采样时,我面临着一个真正的误解。
一方面,我可以做这个数学运算:44khz 采样率意味着每 1 毫秒 44 个样本。这意味着如果我将 bufferSize 设置为 0.005:
float bufferLength = 0.00005;
AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(bufferLength), &bufferLength);
Run Code Online (Sandbox Code Playgroud)
这意味着 5ms 缓冲区大小 - 这意味着每个回调缓冲区中有 44*5=220 个样本。但是我从inNumberFrames每个回调中得到 512 个样本。即使我更改缓冲区长度,它也保持固定。
另一件事,我的回调每 11 毫秒一次并且没有改变!我需要更快的回调。
所以 !这里发生了什么 ?谁设置什么?
我需要在 FSK 调制中传递数字信息,并且必须确切知道样本中的缓冲区大小,以及它具有的信号的时间,以便知道如何正确地对其进行 FFT。
对此有何解释?多谢。
所有当前的 iOS 10 设备都无法以比每 5 到 6 毫秒更快的速度获得 RemoteIO 音频记录缓冲区回调。操作系统甚至可能决定在运行时切换到以更低的回调率发送更大的缓冲区。您请求的速率只是一个请求,然后操作系统决定硬件、设备驱动程序和设备状态可能的实际速率。这个速率可能会也可能不会保持固定,所以你的应用程序只需要处理不同的缓冲区大小和速率。
您的选择之一可能是将每个回调缓冲区连接到您自己的缓冲区,然后根据您的喜好在音频回调之外切碎第二个缓冲区。但这不会减少实际延迟。
补充:一些较新的 iOS 设备允许返回持续时间短于 5.x 毫秒的音频单元缓冲区,通常在 48000 采样率下大小为 2 的幂。
| 归档时间: |
|
| 查看次数: |
6150 次 |
| 最近记录: |