Воспроизведение звука iPhone/iPad с помощью setCurrentTimeFunction. Не AVAudioPlayer

Недавно я пытался включить интенсивный класс по управлению звуком, где точность воспроизведения звука является обязательным условием. Я ищу возможность загрузить звук, установить начальную позицию воспроизведения (или указатель воспроизведения), воспроизвести в течение определенного времени, приостановить звук, установить положение «указатель воспроизведения» на новый интервал и снова возобновить воспроизведение. (с динамическими интервалами). Я пытался использовать AVAudioPlayer в этом отношении, но кажется, что это слишком медленно. Производительность просто не та, что вы ожидаете, она отстает при вызове pause и setCurrentTime:.

Это самая простая в использовании библиотека и единственная с заявленной функцией setCurrentTime:.

Я пришел сюда с просьбой о вашей помощи, рекомендацией для достойного SoundEngine с открытым исходным кодом, который может обрабатывать настройку интервала (движение указателя воспроизведения) с малой задержкой, или ссылку на то, где указано, что инструменты OpenAL или AudioUnit могут обрабатывать настройку позиции воспроизведения.

Заранее спасибо,
~ Натанавра.


person natanavra    schedule 14.09.2010    source источник


Ответы (1)


Было бы полезно потратить время на изучение руководства программиста openAL, которое поставляется с SDK. В нем есть всякие вкусности! От этого:

Под источником: Каждый источник, сгенерированный alGenSources, имеет свойства, которые можно установить или получить. Семейства функций alSource[f, 3f, fv, i] и alGetSource[f, 3f, fv, i] можно использовать для установки или извлечения следующих свойств источника: ...

AL_SEC_OFFSET f, fv, i, iv the playback position, expressed in seconds
AL_SAMPLE_OFFSET f, fv, i, iv the playback position, expressed in samples
AL_BYTE_OFFSET f, fv, i, iv the playback position, expressed in bytes

Таким образом, вы можете получить позицию воспроизведения в секундах и разделить на 60, чтобы получить нормализованное время.

float pos = 0; alGetSourcef( sourceID, AL_SEC_OFFSET, &pos );
float normalizedPos = pos / 60.0f;

OpenAL определенно имеет возможность проигрывать звук в паузах, как вам угодно. помните, что OpenAL часто используется в играх, поскольку он обеспечивает воспроизведение звука с малой задержкой и воспроизведение по требованию. У вас есть большой контроль над звуком. по сравнению с классом AVAudioPlayer. Надеюсь, это поможет Ответить

Пк

person Pavan    schedule 19.09.2010
comment
Большое Вам спасибо. Я обязательно попробую это когда-нибудь. Тем временем мне удалось сделать класс AVAudioPlayer несколько более эффективным и снизить задержку, создав его подклассы и добавив к нему всевозможные методы. - person natanavra; 19.09.2010
comment
Приятно слышать. Я рад, что вы смогли уменьшить задержку, так как это очень важно, когда дело доходит до воспроизведения звука. Что касается вашего вопроса, где вы попросили ссылку на то, где указано, что инструменты OpenAL или AudioUnit могут обрабатывать настройку позиции воспроизведения; Я предоставил вам это, так что попробуйте, чтобы этот вопрос можно было закрыть. Спасибо. - person Pavan; 19.09.2010