2010-10-04 11 views
15

Estoy usando AVAudioRecorder para grabar audio desde el micrófono del iphone pero quiero descartar los períodos de silencio: comience a grabar cuando detecte sonido y deje de grabar cuando próximo silencio.IOS AVAudioRecorder, Cómo grabar solo cuando hay entrada de audio presente (sin silencio)

No se puede encontrar la manera de hacer que

Algún consejo?

Gracias!

+0

Hola marta, puede publicar su solución , ¿Por favor? Estoy teniendo el mismo problema y estoy usando el principio que publicó Jake. Pero la grabación comienza con poca demora, así que generalmente extraño la primera letra del discurso. Me pregunto si es posible capturarlo correctamente utilizando Audio Queues o si también habría el mismo problema con la demora al principio. –

+0

Im preparando un tutorial al respecto. Solo necesito terminarlo. – Martha

+0

¿Terminaste ese tutorial? En caso afirmativo, ¿podría decir cómo lo hizo o algún enlace sería preferible para entender bien? –

Respuesta

3

He encontrado el camino basado en los servicios de cola de audio. Es mucho más complicado pero también mucho más divertido a medida que defines los buffers de cola para los paquetes de audio entrantes.

Debe definir la devolución de llamada cuando el búfer está lleno, por lo que tiene el búfer lleno de paquetes que puede procesar como desee, en mi caso para detectar silencio y algunas cosas más.

Después de tener más tiempo enfermo, publico la solución. Si alguien le pide que simplemente no puede esperar, envíeme un correo electrónico y estaré encantado de ayudarlo.

Comprobar ejemplo SPEAKHERE aquí: http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html

+3

"Si alguien le pide que simplemente no puede esperar, envíeme un correo electrónico y estaré encantado de ayudarlo" Entonces, ¿dónde está su identificación de correo electrónico? –

+0

Marta, ¿cómo resolviste esto? – Dewayne

+0

@Martha. ¿Puedo usar el ejemplo de SpeakHear en mi proyecto? –

12

Quizás podría utilizar el soporte AVAudioRecorder para la medición de nivel de audio para realizar un seguimiento de los niveles de audio y habilitar la grabación cuando los niveles están por encima de un umbral determinado. Se necesitaría para permitir la medición con:

[anAVAudioRecorder setMeteringEnabled:YES]; 

y entonces se podría llamar periódicamente:

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

O algo por el estilo.

+2

Jake, gracias por la respuesta. No se puede usar la medición porque lo que mide es el promedio y los picos. Si hay una cadena mixta de silencios y entrada de audio, no se dará cuenta cuando haya un nuevo silencio después de un silencio-audio. – Martha

+3

Además, parece que los medidores solo se actualizan cuando está grabando AVAudioRecorder. – arlomedia

+0

¿Cuál es el valor de umbral? –

Cuestiones relacionadas