Я хочу генерировать звуковую волну программно и играть ее с AVAudioPlayer. У меня есть код для кодирования моей формы сигнала линейным PCM, 44100 Гц, моно, 8 битов за образец.
Я не ясен на том, какой конверт я должен перенести этот буфер так, чтобы AVAudioPlayer распознал его как PCM.
PCM - это просто цифровое представление аналогового аудиосигнала. К сожалению, он не инкапсулирует какие-либо метаданные об аудио - каналах, битовой глубине или частоте дискретизации - все, что необходимо для правильного чтения указанных данных PCM. Я предполагаю, что AVAudioPlayer примет эти данные PCM, завернутые в объект NSData, если вы можете установить эти переменные вручную в объекте AVAudioPlayer. К сожалению, эти переменные доступны только для чтения, поэтому, хотя в документации говорится, что AVAudioPlayer может обрабатывать все, что может обрабатывать Core Audio, у него нет возможности обрабатывать необработанные данные LPCM.
Как заявил zoul, я полагаю, что самый простой способ сделать это - добавить WAV-заголовок, поскольку заголовок информирует AVPlayer о перечисленных выше необходимых переменных. Это 44 байта, легко моделируется и красиво определяется - я использовал то же определение , приведенное выше, для реализации кодирования и декодирования заголовка wav. Кроме того, он просто добавлен к вашим немодифицированным данным LPCM.