iPhone обнаруживает звук и записывает его - PullRequest
1 голос
/ 22 января 2012

, поэтому я делаю приложение, и мне нужно, чтобы, например, когда кто-то начал говорить, мне нужно обнаружить наличие звука и затем записать его.
Я нашел этот урок http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/, но он начинает запись с начала, а затем, основываясь на записи, обнаруживает звук.
Есть ли другой способ обнаружить звук, не запуская рекордер? Я подумал о том, чтобы иметь 2 рекордера, один для обнаружения и один для записи звука. Другим решением будет редактировать (обрезать) звук после его записи.
Являются ли эти подходы стандартными или есть лучший способ обнаружения звука?
Спасибо.

редактировать: если кто-нибудь когда-либо читает это, я также нашел это http://bonkel.wordpress.com/2010/03/03/frequency-detection-using-fourier-transform/

Ответы [ 2 ]

4 голосов
/ 22 января 2012

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

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

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

Существует множество примеров Apple CoreAudioэто может направить вас.Сессии CoreAudio WWDC 2010 и 2010 также являются обязательными.

0 голосов
/ 22 января 2012

Вы можете использовать либо Audio Queue, либо Core Audio (RemoteIO Audio Unit) API. Если для вашего приложения не требуется низкая задержка, API Audio Queue может быть проще в использовании.

Вам нужно запустить API записи, чтобы обнаружить любой звук, но вам не нужно сохранять все, что вы получаете от обратного вызова записи, в файл.

...