簡體   English   中英

ExtAudioFileRead太慢。 如何使其更快?

[英]ExtAudioFileRead is too slow. How to make it faster?

我已經編寫了自己的音頻庫。 (很傻,我知道,但我喜歡。)現在,我正在使用它來播放iOS上iPod庫中的立體聲文件。 它工作得很好,只是有時對ExtAudioFileRead()的調用花費的時間超過23ms。 由於我的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. 不要在音頻線程上執行文件或網絡IO。 喜歡讀,寫或發送到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM