Есть ли “простой” способ воспроизведения линейного PCM-звука на iPhone?
-
19-09-2019 - |
Вопрос
Я создаю приложение для воспроизведения мультимедиа, которое получает несжатый линейный PCM (über raw) звук из стороннего декодера, но я схожу с ума, когда дело доходит до простого воспроизведения самого простого аудиоформата, который я могу себе представить..
Конечное приложение будет получать данные PCM постепенно по мере поступления исходного файла с сервера, поэтому сначала я изучил очереди аудио (поскольку, казалось бы, я могу просто передавать их байтами на ходу), но это оказалось выдумкой - тем более, что собственный пример кода очереди аудио от Apple, похоже, отправляется в волшебное путешествие по OpenGL и ненужной инкапсуляции..
В итоге я использовал AVAudioPlayer во время (непотокового) прототипирования;В настоящее время я создаю заголовок WAVE и добавляю его в начало данных PCM, чтобы заставить AVAudioPlayer принять его (поскольку он не может принимать необработанный PCM)
Очевидно, что это бесполезно для потоковой передачи (WAVE задает всю длину файла в заголовке, поэтому данные не могут быть добавлены на ходу)..
..по существу:есть ли способ просто предоставить iPhone OS несколько байтов PCM и заставить ее воспроизвести их?
Решение
Вам следует вернуться к AudioQueue
код.Как только вы уберете всю болтовню, у вас должно получиться около 2 страниц кода плюс обратный вызов, в котором вы можете предоставить необработанный PCM.Этот обратный вызов также синхронен с вашим основным циклом, так что вам даже не нужно беспокоиться о блокировке.