Я получаю заикающееся звучание, когда я впервые запускаю 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