Есть ли “простой” способ воспроизведения линейного PCM-звука на iPhone?

StackOverflow https://stackoverflow.com/questions/2215009

Вопрос

Я создаю приложение для воспроизведения мультимедиа, которое получает несжатый линейный PCM (über raw) звук из стороннего декодера, но я схожу с ума, когда дело доходит до простого воспроизведения самого простого аудиоформата, который я могу себе представить..

Конечное приложение будет получать данные PCM постепенно по мере поступления исходного файла с сервера, поэтому сначала я изучил очереди аудио (поскольку, казалось бы, я могу просто передавать их байтами на ходу), но это оказалось выдумкой - тем более, что собственный пример кода очереди аудио от Apple, похоже, отправляется в волшебное путешествие по OpenGL и ненужной инкапсуляции..

В итоге я использовал AVAudioPlayer во время (непотокового) прототипирования;В настоящее время я создаю заголовок WAVE и добавляю его в начало данных PCM, чтобы заставить AVAudioPlayer принять его (поскольку он не может принимать необработанный PCM)

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

..по существу:есть ли способ просто предоставить iPhone OS несколько байтов PCM и заставить ее воспроизвести их?

Это было полезно?

Решение

Вам следует вернуться к AudioQueue код.Как только вы уберете всю болтовню, у вас должно получиться около 2 страниц кода плюс обратный вызов, в котором вы можете предоставить необработанный PCM.Этот обратный вызов также синхронен с вашим основным циклом, так что вам даже не нужно беспокоиться о блокировке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top