2015-03-06 3 views
0

Мне просто нужно знать, когда пользователь начинает говорить в микрофон. Я не буду делать какую-либо обработку речи или что-нибудь интересное, просто обнаружите, когда микрофон взял что-нибудь. Я искал час и не могу найти ничего такого простого. Может кто-нибудь указать мне в правильном направлении?Доступ к микрофону на iOS

Update 1

Я извиняюсь за то, как поздно это; У меня проблемы с подключением. Вот код, который я использую:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let audioEngine = AVAudioEngine() 
    let inputNode = audioEngine.inputNode 
    let bus = 0 
    inputNode.installTapOnBus(bus, bufferSize: 8192, format:inputNode.inputFormatForBus(bus)) { 
     (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in 
     println("Speech detected.") 
    } 

    audioEngine.prepare() 
    audioEngine.startAndReturnError(nil) 

} 
+0

Это учебник: http://www.whatsoniphone.com/blog/tutorial-detecting-when-a-user-blows-into-the-mic/ – LoVo

+0

Опубликовать код, который вы пробовали – Bamsworld

+0

@Bamsworld обновлен. –

ответ

0

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

Для того, чтобы действительно идентифицировать начало речи, вам нужно будет посмотреть данные в буфере.

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

Даже с адаптивным порогом продолжительные громкие звуки по-прежнему считаются «речью». Если вам нужно также вытащить их, вам нужно посмотреть на какой-то частотный анализ (например, FFT) и определить достаточную амплитуду и изменение во времени в речевых частотах. Или вы можете передать буферы в механизм распознавания речи (например, SFSpeechRecognizer) и посмотреть, узнает ли он что-либо, следовательно, совместимость с обработкой сигналов Apple. Но это очень тяжелый вес, если вы часто это делаете.

 Смежные вопросы

  • Нет связанных вопросов^_^