2015-04-18 6 views
0

Я использовал образец кода Apple SpeakHere. Вот мой 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 байта больше). Это число меняется. И почему это меняется?

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

BTW: Я записываю в формате .wav, если это помогает.

ответ

0

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

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

+0

Спасибо за ответ. На самом деле я пытаюсь сделать следующее: я играю аудио 7 секунд и параллельно записываю результаты. Я останавливаю запись, когда звук воспроизводится. Я прекращаю запись при воспроизведении звука. Я предполагаю, что некоторые задержки произойдут до тех пор, пока не воспроизведет звук. Не могли бы вы предложить, как я могу определить ровно 7 секунд записи? Заранее спасибо. –