2010-10-04 8 views
15

Używam AVAudioRecorder do nagrywania dźwięku z mikrofonu iPhone'a, ale chcę odrzucić okresy ciszy: rozpocząć nagrywanie po wykryciu dźwięku i zatrzymać nagrywanie, gdy następna cisza.IOS AVAudioRecorder, Jak nagrywać tylko wtedy, gdy wejście audio jest obecne (nie cisza)?

Nie można wymyślić, jak to zrobić:

Jakaś radę?

Thanx!

+0

Cześć Marta, można dodawać swoje rozwiązanie , Proszę? Mam ten sam problem i stosuję zasadę opublikowaną przez Jake'a. Ale nagrywanie rozpoczyna się z niewielkim opóźnieniem, więc zwykle brakuje mi pierwszej litery mowy. Zastanawiam się, czy możliwe jest przechwycenie go poprawnie za pomocą Audio Queues lub, jeśli na początku pojawiłby się ten sam problem z opóźnieniem. –

+0

Przygotowuję samouczek na ten temat. Wystarczy to dokończyć. – Martha

+0

Czy skończyłeś ten samouczek? Jeśli tak, czy mógłbyś powiedzieć, w jaki sposób to zrobiłeś, czy też jakikolwiek link byłby preferowany, aby dobrze zrozumieć? –

Odpowiedz

3

Znalazłem sposób na podstawie usług kolejki audio. Jest to o wiele bardziej skomplikowane, ale o wiele zabawniejsze, gdy definiujesz bufory kolejki dla przychodzących pakietów audio.

Musisz zdefiniować wywołanie zwrotne, gdy bufor jest pełny, więc masz bufor pełen pakietów, które możesz przetwarzać, jak chcesz, w moim przypadku, aby wykryć ciszę i kilka innych rzeczy.

Później mając więcej czasu źle po rozwiązanie. Jeśli ktoś namawiał, że nie mogę się doczekać, wyślij mi e-mail i niech mi będzie miło pomóc.

zobacz przykład speakhere tutaj: http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html

+3

"Jeśli ktoś namawiał, że nie mogę się doczekać, wyślij mi e-mail i niech mi będzie miło pomóc" Więc gdzie jest twój identyfikator e-mail? –

+0

Marta, jak to rozwiązałeś? – Dewayne

+0

@Martha. Czy mogę użyć przykładu SpeakHear w moim projekcie? –

12

Być może można użyć funkcji AVAudioRecorder do obsługi pomiaru poziomu dźwięku, aby śledzić poziomy audio i umożliwić nagrywanie, gdy poziomy są powyżej określonego progu. trzeba by umożliwić dozowanie z:

[anAVAudioRecorder setMeteringEnabled:YES]; 

a następnie okresowo można nazwać:

[anAVAudioRecorder updateMeters]; 
power = [anAVAudioRecorder averagePowerForChannel:0]; 
if (power > threshold && anAVAudioRecorder.recording==NO) { 
    [anAVAudioRecorder record]; 
} else if (power < threshold && anAVAudioRecorder.recording==YES) { 
    [anAVAudioRecorder stop]; 
} 

czy coś takiego.

+2

Jake, dziękuję za odpowiedź. Nie można używać pomiaru, ponieważ mierzy średnie i szczytowe wartości. Jeśli jest mieszany ciąg ciszy i wejście audio, nie zauważysz, kiedy pojawi się nowa cisza po dźwięku ciszy. – Martha

+3

Wygląda również na to, że liczniki aktualizują się tylko podczas nagrywania AVAudioRecorder. – arlomedia

+0

Jaka jest wartość progowa? –