бесшовная динамическая аудио петля на iPhone - PullRequest
1 голос
/ 07 сентября 2010

Хорошо,

Итак, я пытаюсь бесшовно зациклить три звуковых файла, причем второй файл зацикливается на себя n раз.Давайте предположим, что я могу заставить их зацикливаться в другой программе, соединяя их вместе.однако, когда я использую метод делегата audioPlayerDidFinishPlaying для avaudioplayer, возникает небольшая задержка при стыковке (даже при использовании метода "prepareToPlay". Другая сложность заключается в том, что средний звук должен продолжать цикл n раз AKA до тех пор, пока touchesDidEndметод не был вызван, и в этот момент программа проиграет третий и последний клип, чтобы завершить звуковой «плейлист».

В качестве примера представьте, что аудитория дает аплодисменты после шоу. Звуковой файл A будет содержатьПри начальном всплеске аплодисментов звуковой файл 2 будет содержать зацикленный образец приветствия толпы с постоянной скоростью до тех пор, пока пользователь не поднимет кнопку, после чего программа должна нажать на 3-й звуковой файл, который будет аплодисментамитолпа исчезает.

Так что моя первоначальная попытка использования AVAudioPlayer, казалось, не была достаточно быстрой, чтобы вернуться к началу без задержки, поэтому мне нужен другой более быстрый способ сделать это, предложения?

1 Ответ

1 голос
/ 08 сентября 2010

Для зацикливания проверьте свойство numberOfLoops AVAudioPlayer. Работает лучше, чем пытаться обрабатывать логику цикла самостоятельно, используя делегат игрока.

Что касается плавного перехода от одного зацикленного семпла к «хвостовому» семплу, это будет трудно осуществить с помощью AVAudioPlayer. Вероятно, вам лучше всего запустить другого игрока с конечным звуковым файлом и использовать таймер для быстрого перекрестного затухания между ними, используя свойство volume каждого.

Если это неудовлетворительно (и я подозреваю, что это может быть не так), я не думаю, что у вас будет большой выбор, кроме как переключиться на API AudioQueue, чтобы осуществить это.

...