1

我已经编写了自己的音频库。(傻,我知道,但我喜欢它。)现在,我用它来播放 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() 的调用中进行了时间测量,所以我知道不是我的代码减慢了这个过程。应该是配置问题吧?

非常感谢您的帮助甚至猜测!

干杯,克里斯托弗

4

1 回答 1

5

您不应该在音频回调中读取音频文件 - 您应该在另一个线程中缓冲并传递样本。

你违反了基本音频规则#4

  1. 不要在音频线程上进行文件或网络 IO。比如读、写或发送。
于 2017-03-21T00:27:32.790 回答