當我第一次啓動AUGraph並用kAudioUnitSubType_AudioFilePlayer
組件播放歌曲時,我收到了一個口吃的聲音。口吃約3秒鐘,但它足以打擾我,我注意到音樂停止一秒鐘有時在播放(我想緩衝?)。我試圖將kAudioUnitProperty_ScheduledFilePrime
更改爲隨機值,但注意不變。停止AUGraph的口吃
爲了擺脫這個缺陷,我應該改變什麼變量或值?這是流格式的問題嗎?
我使用YBAudioUnit從https://github.com/ronaldmannak/YBAudioFramework/tree/master/YBAudioUnit
代碼:
YBAudioFilePlayer:
- (void)setFileURL:(NSURL *)fileURL typeHint:(AudioFileTypeID)typeHint {
if (_fileURL) {
// Release old file:
AudioFileClose(_audioFileID);
}
_fileURL = fileURL;
if (_fileURL) {
YBAudioThrowIfErr(AudioFileOpenURL((__bridge CFURLRef)fileURL, kAudioFileReadPermission, typeHint, &_audioFileID));
YBAudioThrowIfErr(AudioUnitSetProperty(_auAudioUnit, kAudioUnitProperty_ScheduledFileIDs, kAudioUnitScope_Global, 0, &_audioFileID, sizeof(AudioFileID)));
// Get number of audio packets in the file:
UInt32 propsize = sizeof(_filePacketsCount);
YBAudioThrowIfErr(AudioFileGetProperty(_audioFileID, kAudioFilePropertyAudioDataPacketCount, &propsize, &_filePacketsCount));
// Get file's asbd:
propsize = sizeof(_fileASBD);
YBAudioThrowIfErr(AudioFileGetProperty(_audioFileID, kAudioFilePropertyDataFormat, &propsize, &_fileASBD));
// Get unit's asbd:
propsize = sizeof(_fileASBD);
AudioUnitGetProperty(_auAudioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &_unitASBD, &propsize);
if (_fileASBD.mSampleRate > 0 && _unitASBD.mSampleRate > 0) {
_sampleRateRatio = _unitASBD.mSampleRate/_fileASBD.mSampleRate;
} else {
_sampleRateRatio = 1.;
}
}
}
要發揮我呼籲YBAudioFilePlayer這些方法:
[player1 setFileURL:item.url typeHint:0];
[player1 scheduleEntireFilePrimeAndStartImmediately];
[graph start];//On a YBAudioUnitGraph which is really just a basic AUGraph
這是在模擬器上?裝置?或兩者? – Nick
它在設備上 – kezi
你在使用回調嗎?如果是的話,你可以發佈代碼嗎? – Merlevede