AVAudioPlayer лаг при вызове воспроизведения - PullRequest
6 голосов
/ 01 марта 2011

Я настроил объект AVAudioPlayer в viewDidLoad в соответствии с рекомендациями Apple, назвав prepareToPlay последней строкой в ​​viewDidLoad (я также попытался в awakeFromNib).

Когда я нажимаю кнопку воспроизведения, появляетсяэто пауза, так как казалось бы, чтобы загрузить файл, а затем он играет.

В режиме audioPlayerDidFinishPlaying я перезагружаю проигрыватель с другим звуком, и при повторном нажатии кнопки воспроизведения файл воспроизводится мгновенно.

Что может вызвать задержку проигрывателя при первом воспроизведении?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 01 марта 2011

Задержка вызвана инициализацией AVAudioPlayer.Пожалуйста, смотрите этот ответ .

0 голосов
/ 01 марта 2011

Аудиосистема работает на нескольких асинхронных программных процессах (аудиоустройства, драйверы ОС и т. Д.) И аппаратных системах (DMA, ЦАП, блоки питания аудиоусилителя и т. Д.), Которые никогда полностью не завершают инициализацию, пока какой-то звук на самом деле не станетВоспроизведение полностью из динамиков или наушников.

Вот один из способов сделать это: создать звуковой файл, содержащий полсекунды тишины.При запуске приложения, когда приложение и контроллер представления все еще загружаются, используйте AVAudioPlayer для воспроизведения этого файла молчания.Теперь, когда ваш вид завершает загрузку, AVAudioPlayer должен быть готов воспроизводить последующие немые звуки гораздо быстрее, поскольку некоторое аудио (тишина) уже дошло до динамиков.

0 голосов
/ 01 марта 2011

Какой звук вы играете?Оповещения, что-нибудь дольше?Если оповещения, я пошел по этому пути, и с лагами гораздо лучше ...

  • создать системный звук с AudioServicesCreateSystemSoundID
  • воспроизвести системный звук с AudioServicesPlaySystemSound
  • избавьтесь от системного звука с помощью AudioServicesDisposeSystemSoundID

... вам нужно хранить SystemSoundID только для каждого звука, который вы хотите воспроизвести.

...