Запись аудио iPhone - значения AudioStreamBasicDescription - PullRequest
4 голосов
/ 27 мая 2009

Это значения, которые я передаю, это единственная комбинация значений, с которыми я работал.

dataFormat.mSampleRate = 44100;    
dataFormat.mFormatID = kAudioFormatLinearPCM;
dataFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsBigEndian;
dataFormat.mBytesPerPacket = 4;
dataFormat.mFramesPerPacket = 1;
dataFormat.mBytesPerFrame = 4;
dataFormat.mChannelsPerFrame = 2;
dataFormat.mBitsPerChannel = 16;

status = AudioQueueNewInput(  &dataFormat, AudioInputCallback, self, NULL, NULL,  0,  
                   &queue);

status = AudioFileCreateWithURL(fileUrl, kAudioFileCAFType, &dataformat, kAudioFileFlags_EraseFile, &audioFile

Запись работает, но много шума во время записи и при воспроизведении. Может ли это иметь какое-либо отношение к этому коду?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2010

Я вижу две возможные ошибки. Во-первых, как указал @invalidname, запись в стерео-формате, вероятно, не будет работать на монофоническом устройстве, таком как iPhone. Ну, это может сработать, но если это сработает, вы все равно просто вернете двойные монофонические стереопотоки, так зачем беспокоиться? Вы также можете настроить свой поток для работы в моно и сэкономить ресурсы ЦП.

Вторая проблема, вероятно, является источником искажения звука. Флаги формата описания вашего потока должны быть:

kAudioFormatFlagIsSignedInteger |
kAudioFormatFlagsNativeEndian |
kAudioFormatFlagIsPacked

Кроме того, не забудьте установить флаг mReserved в 0. Хотя значение этого флага, вероятно, игнорируется, не повредит явно установить его в 0 только для уверенности.

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

Для этого вам нужно открыть окно «Органайзер», нажать на свой телефон, а затем развернуть маленькую стрелку рядом с вашим приложением (там же, где вы обычно удаляете его). Теперь вы увидите небольшую стрелку, указывающую вниз, и если вы щелкнете по ней, Xcode скопирует данные из вашего приложения в другое место на вашем жестком диске. Если вы записываете свои записи на диск, вы найдете файлы, извлеченные здесь.

1 голос
/ 06 июля 2009

Какое у вас устройство ввода? Микрофон на прилагаемых наушниках или встроенный микрофон телефона или что? Или вы записываете в симулятор?

Помимо шума, все ли звучит правильно: скорость, высота звука и т. Д .?

Вероятно, это не вызывает проблем, но вы указываете двухканальный вход, в то время как ваше устройство ввода, вероятно, моно.

Последняя мысль: это iPhone первого поколения? Я думаю, что есть странная проблема с этой моделью, когда входной сигнал 8 кГц конвертируется до 44,1.

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