Общее количество полученных байт аудио очереди во время записи

Я использовал пример кода SpeakHere от Apple. Вот мой mRecordFormat:

mRecordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
mRecordFormat.mChannelsPerFrame = 1;
mRecordFormat.mBitsPerChannel = 16;
mRecordFormat.mBytesPerPacket = mRecordFormat.mBytesPerFrame = (mRecordFormat.mBitsPerChannel / 8) * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mFramesPerPacket = 1;
mRecordFormat.mSampleRate = 11025.0;

Я записываю 7 секунд, и я предполагаю, что я получу 7 * 2 * 11025 байт (или 7 * 11025 коротких) общей информации. На самом деле я получаю немного больше: 154784 вместо 154350 байт (на 434 байта больше). Это число варьируется. И почему он меняется?

Может кто-нибудь объяснить, почему я получаю больше байтов, чем ожидал? Я ошибаюсь или что-то упускаю?

Кстати: я записываю в формате .wav, если это поможет.


person David V    schedule 18.04.2015    source источник


Ответы (1)


AudioQueue дает вам звуковые фрагменты определенного размера. Размер выбирается в соответствии с реализацией. Это объясняет, почему вы видите больше (или меньше), чем ожидаете, когда останавливаете очередь.

Если вы хотите записать ровно 7 секунд аудио, остановите очередь после того, как вы получили ровно 7 секунд сэмплов, и выбросьте все остатки.

person Rhythmic Fistman    schedule 18.04.2015
comment
Спасибо за ответ. На самом деле я пытаюсь сделать следующее: я проигрываю аудио 7 секунд и параллельно записываю результаты. Я останавливаю запись, когда воспроизводится звук. Я останавливаю запись, когда воспроизводится звук. Я полагаю, что некоторые задержки происходят до воспроизведения звука. Не могли бы вы подсказать, как я могу определить ровно 7 секунд записи? Заранее спасибо. - person David V; 19.04.2015