ExtAudioFileRead 太慢了。如何让它更快?
ExtAudioFileRead is too slow. How to make it faster?
我已经编写了自己的音频库。 (愚蠢,我知道,但我喜欢它。)现在,我正在用它来播放 iOS 上 iPod 库中的立体声文件。除了有时对 ExtAudioFileRead() 的调用需要超过 23 毫秒之外,它运行良好。由于我的 AudioUnits 输出设置正在以 44.1KHz 播放音频,并且每个回调要求 1024 帧。我的代码 + ExtAudioFileRead() 的响应时间不得超过 23 毫秒。
我很惊讶 ExtAudioFileRead() 这么慢。我正在做的事情似乎很正常。我在想一定有一些我没有做的未记录的配置魔术。这是我的相关配置代码:
ExtAudioFileRef _extAudioFileRef;
OSStatus result;
result = ::ExtAudioFileOpenURL((__bridge CFURLRef)_url, &_extAudioFileRef);
AudioStreamBasicDescription format;
format.mBitsPerChannel = 8 * sizeof(float);
format.mBytesPerFrame = sizeof(float);
format.mBytesPerPacket = sizeof(float);
format.mChannelsPerFrame = channelCount;
format.mFormatFlags = kAudioFormatFlagIsFloat|kAudioFormatFlagIsNonInterleaved;
format.mFormatID = kAudioFormatLinearPCM;
format.mFramesPerPacket = 1;
format.mSampleRate = framesPerSecond;
result = ::ExtAudioFileSetProperty(_extAudioFileRef,
kExtAudioFileProperty_ClientDataFormat,
sizeof(format),
&format);
我没有设置 _extAudioFileRef 的任何其他属性。
我已经追查到这到底是怎么回事了。我已经将时间测量放在我对 ExtAudioFileRead() 的调用周围,所以我知道这不是我的代码减慢了这个过程。应该是配置问题吧?
非常感谢您的帮助甚至猜测!
干杯,
克里斯托弗
您不应该在音频回调中读取音频文件 - 您应该在另一个线程中缓冲并传递样本。
- Don’t do file or network IO on the audio thread.
Like read, write or sendto.
我已经编写了自己的音频库。 (愚蠢,我知道,但我喜欢它。)现在,我正在用它来播放 iOS 上 iPod 库中的立体声文件。除了有时对 ExtAudioFileRead() 的调用需要超过 23 毫秒之外,它运行良好。由于我的 AudioUnits 输出设置正在以 44.1KHz 播放音频,并且每个回调要求 1024 帧。我的代码 + ExtAudioFileRead() 的响应时间不得超过 23 毫秒。
我很惊讶 ExtAudioFileRead() 这么慢。我正在做的事情似乎很正常。我在想一定有一些我没有做的未记录的配置魔术。这是我的相关配置代码:
ExtAudioFileRef _extAudioFileRef;
OSStatus result;
result = ::ExtAudioFileOpenURL((__bridge CFURLRef)_url, &_extAudioFileRef);
AudioStreamBasicDescription format;
format.mBitsPerChannel = 8 * sizeof(float);
format.mBytesPerFrame = sizeof(float);
format.mBytesPerPacket = sizeof(float);
format.mChannelsPerFrame = channelCount;
format.mFormatFlags = kAudioFormatFlagIsFloat|kAudioFormatFlagIsNonInterleaved;
format.mFormatID = kAudioFormatLinearPCM;
format.mFramesPerPacket = 1;
format.mSampleRate = framesPerSecond;
result = ::ExtAudioFileSetProperty(_extAudioFileRef,
kExtAudioFileProperty_ClientDataFormat,
sizeof(format),
&format);
我没有设置 _extAudioFileRef 的任何其他属性。
我已经追查到这到底是怎么回事了。我已经将时间测量放在我对 ExtAudioFileRead() 的调用周围,所以我知道这不是我的代码减慢了这个过程。应该是配置问题吧?
非常感谢您的帮助甚至猜测!
干杯, 克里斯托弗
您不应该在音频回调中读取音频文件 - 您应该在另一个线程中缓冲并传递样本。
- Don’t do file or network IO on the audio thread. Like read, write or sendto.