Извлекать плавающие объекты с помощью расширенных аудиофайлов - PullRequest
3 голосов
/ 24 января 2011

Я пытаюсь написать программу для записи значений сэмплов в аудио-файл.Мои шаги следующие:

  1. Открытие расширенного аудиофайла
  2. Настройка формата аудио (AudioStreamBasicDescription)
  3. Применение формата аудио к моему расширенному аудиофайлу
  4. Настройка AudioBufferList
  5. Чтение расширенного аудиофайла в AudioBufferList с помощью ExtAudioFileRead ()
  6. Запись значений с плавающей запятой AudioBufferList

Я положил все 90класс строки в этой сущности: https://gist.github.com/792630

Проблема в том, что, если я применяю аудиоформат к моему Расширенному аудиофайлу (Шаг 3), я получаю ошибку, пытаясь прочитать файл (Шаг 5).Если я закомментирую шаг 5, файл будет читаться нормально, но я не буду принудительно применять мой формат для чтения, и я не получу плавающие числа при регистрации.

Любые предложения будут с благодарностью.Спасибо!

1 Ответ

3 голосов
/ 24 января 2011

Одна вещь, которую я сразу заметил, заключается в том, что вы выделяете AudioBufferList в стеке, но устанавливаете mNumberBuffers равным 2. Хорошо использовать ABL в стеке, но если вы это сделаете, они могут содержать только один буфер.Но так как вы установили для клиента формат моно, это не ваша настоящая проблема.

Реальная проблема в том, что вы не передаете адрес fileRef в ExtAudioFileOpenURL - вы передаете значение - такнет никакого способа, чтобы вызов мог правильно инициализировать переменную.

Вызов должен выглядеть следующим образом:

CheckResult(ExtAudioFileOpenURL(inputFileURL, &fileRef), "ExtAudioFileOpenURL failed");

Я сделал это, скомпилировал ваш код, и все работало нормально.

...