Воспроизведение Audio Toolbox воспроизводит только часть выходных буферов - PullRequest
3 голосов
/ 04 февраля 2010

Я работаю над проектом, который использует Audio Toolbox для записи и воспроизведения данных PCM, и у меня возникли проблемы с воспроизведением. В симуляторе я могу прекрасно записывать и воспроизводить аудио, используя собственный класс для обработки хранения и получения байтов PCM для буферов записи и воспроизведения по мере необходимости. На устройстве (iPhone (3.0.1) и iPod 2G (3.1.2)) запись работает нормально, воспроизводимые аудиофайлы правильные, но воспроизведение в приложении тормозит, как будто он воспроизводит только часть каждого буфера воспроизведения. Мои буферы имеют длину в одну секунду, и у меня есть 3 буфера, которые предварительно загружены перед началом воспроизведения; заикание происходит и в те первые 3 секунды, что, я думаю, исключает проблему с задержкой.

Я написал код Audio Toolbox до того, как это сработало, и я не делаю здесь ничего странного, кроме того, что я использую свой собственный класс для получения данных PCM вместо AudioFileReadBytes ()

Я знаю, что данные, исходящие из моего источника, хороши, потому что они воспроизводятся прямо на SIM-карте и записывают на диск как правильный аудиофайл

Я немного поиграл с частотой дискретизации; Я обычно использую сэмплирование 11025 Гц, чтобы сократить размер файла (это все голос, поэтому он звучит нормально). на частоте 44100 Гц, но с тем же размером буферов, я получаю ту же проблему заикания, но аудиосегменты идут намного быстрее, примерно в 4 раза быстрее. Вот почему я думаю, что он играет только часть каждого буфера.

Единственная причина, по которой я могу представить, что он будет играть только часть каждого буфера, - это проблема задержки ... например, в коде звукового инструментария заканчивается полный буфер, а я все еще заполняю пустой. Но это заставит его правильно воспроизводить предварительно загруженные буферы, и затем начнут заикаться, а этого не происходит, он заикается весь путь до

Я пробовал огромные буферы, например, буферы 10 МБ, и я просто получаю тишину и единственное заикание звука в конце воспроизведения. Я также попытался предварительно загрузить больше буферов, чем обычно, например, на 10 секунд аудио, и он ведет себя так же. Аудио сеанс устанавливается с помощью AVAudioSession, а не вызовов Audio Toolbox, и он устанавливается в категорию «Воспроизведение» для воспроизведения

Понятия не имею, как попытаться решить эту проблему, для меня нет смысла, что она отлично работает на симуляторе, но не на устройстве.

Код для воспроизводимого обратного вызова и настройки для служб аудио-очереди: http://pastebin.com/mfaa546c

1 Ответ

0 голосов
/ 10 февраля 2010

Оказывается, что использование NSData GetBytes: length: было причиной проблемы. Буфер, заполненный этим методом, воспроизводился некорректно. Однако выполнение memcpy из этого буфера в другой буфер предотвратит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...