Tomar sonido del micrófono en C#

malebolgia

Buenas compañeros.

Ando buscando el código necesario para poder enviar el sonido recogido por el micrófono del ordenador a la tarjeta de sonido.

¡Muchas gracias!

cabron

Pues no lo sé, pero yo he capturado audio usando el api de windows. Si puedes llamar al API de Windows desde C# te puedo decir como hacerlo usando el API.

kas

Yo si lo he hecho pero o tengo el codigo aqui. El lunes te respondere con lo que tenga, si embargo creo que es como dice cabron, usando el API.

malebolgia

Muchas gracias. Supongo que se podrá llamar al API de windows, pero estoy muy verde en programación, así que me tocará pelearme con el código

kas

Pues de momento vete mirando manuales y articulso de pInvoke, que es el metodo para llamar al API desde .NET.

Te recomiendo:

www.codeproject.com

malebolgia

Arrg! Me estoy volviendo loco!

¿No hay algo tan sencillo similar a lo necesario para reproducir *.wav con System.Media o mp3 con winmm.dll y dos simples llamadas a dos métodos ( Play(); y Stop(); ), pero para el micrófono?

Es que solo me encuentro por ahí mezcladores de sonidos y esquemas de clases imposibles

kas

Te repito que vuelvas a mirarte todo el tema de pInkvoke.

Realmente se necesitan mas llamadas, no es una sola. Ademas te tendars que hacer una función poruqe debes hacer un bucle de espera y/o implementar un timeout (por si acaso).

kas

Lo prometido es deuda:

http://www.kas.unexpected.es/Software/ModuloAudioBykas.rar

El proyecto de prueba es para Windows Mobile 2005, pero la dll puedes aprovecharla.

No lo he provado para PC normal, asi que, por favor, tanto si te funciona como si no, dimelo!

Espero que te ayude!

malebolgia

Muchas gracias.

Al compilar muestra un mensaje de error que indica que ActiveSync no está instalado.

De todas formas, he visto que lo has inplementado con las clases WaveIn, WaveOut y Wave en vez de mediante DirectX, así supongo que será la forma más sencilla.
He encontrado un proyecto que lo implementa de forma similar a la tuya para pc, intentaré sacar algo en claro.

Muchas gracias de todos modos por acordarte!

kas

Como te he dicho, el proyecto de prueba de la solucion es para Windows mobile 2005, es decir, una PDA.

Puedes añadir un proyecto de windows forms normal y corriente, agregarle la referencia al proyecto AudioController y probar las funciones publicas, que como veras no son las de las clases wave's, no sin antes establecerlo como proyecto de inicio predeterminado.

Otra cosa, tambien veras que el hacer un play asincrono no le pasa el async al API, si no que lanza un threat en background. Esto puedes cambiarlo si te apetece, yo lo tube que hacer por un tema muy especifico qe no recuerdo bien.

Un salido!

malebolgia

Bueno, solucionado el tema de tomar sonido a través del micrófono, me surge una nueva duda.

¿Cómo puedo controlar el nivel del volumen de entrada del micrófono?

He buscado como un loco, pero no hay una función similar a waveOutSetVolume() para waveIn.

Gracias de todos modos!

Usuarios habituales

  • malebolgia
  • kas
  • cabron