Генерация LPCM буферизует в памяти для AVAudioPlayer initWithData

Я хочу генерировать звуковую волну программно и играть ее с AVAudioPlayer. У меня есть код для кодирования моей формы сигнала линейным PCM, 44100 Гц, моно, 8 битов за образец.

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

6
задан iter 28 March 2010 в 07:46
поделиться

2 ответа

Может, добавление WAV-заголовка поможет?

4
ответ дан 10 December 2019 в 02:45
поделиться

PCM - это просто цифровое представление аналогового аудиосигнала. К сожалению, он не инкапсулирует какие-либо метаданные об аудио - каналах, битовой глубине или частоте дискретизации - все, что необходимо для правильного чтения указанных данных PCM. Я предполагаю, что AVAudioPlayer примет эти данные PCM, завернутые в объект NSData, если вы можете установить эти переменные вручную в объекте AVAudioPlayer. К сожалению, эти переменные доступны только для чтения, поэтому, хотя в документации говорится, что AVAudioPlayer может обрабатывать все, что может обрабатывать Core Audio, у него нет возможности обрабатывать необработанные данные LPCM.

Как заявил zoul, я полагаю, что самый простой способ сделать это - добавить WAV-заголовок, поскольку заголовок информирует AVPlayer о перечисленных выше необходимых переменных. Это 44 байта, легко моделируется и красиво определяется - я использовал то же определение , приведенное выше, для реализации кодирования и декодирования заголовка wav. Кроме того, он просто добавлен к вашим немодифицированным данным LPCM.

5
ответ дан 10 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: