Creo que la ruta más fácil es utilizar la antigua API multimedia de Windows porque es muy sencilla.
Aquí está el enlace a MSDN: http://msdn.microsoft.com/en-us/library/dd743586(v=VS.85).aspx
Lo que se hace es que se utiliza la función waveInOpen
para obtener un dispositivo de entrada. Para averiguar qué dispositivo usar, no enumera todos los dispositivos pero puede consultar cada uno de ellos. La cantidad de dispositivos instalados se devuelve llamando al waveInGetNumDevs
. Luego puede llamar al waveInGetDevCaps
para cada dispositivo e inspeccionar esas propiedades.
Cuando tenga el mango de su dispositivo, llame repetidamente al waveInAddBuffer
para obtener pequeños trozos de datos. Dependiendo del formato que haya especificado durante waveInOpen
, los bytes representan los datos de audio en bruto. Amplitud en muestras de 8 o 16 bits con o sin señal muestreadas con cierta frecuencia.
A continuación, puede aplicar un promedio continuo para suavizar la señal y simplemente imprimir eso.
C# no tiene una API de sonido que yo sepa, por lo que lo que hace es utilizar P/Invoke para obtener las funciones de API de Win32. Esto es bastante directo, solo necesita portar versiones pequeñas de los encabezados de Win32 para poder llamarlos directamente desde C#.
Si eres más duro, podrías escribir una biblioteca contenedora en C++/CLI. No es una mala idea porque permite usar los archivos de encabezado de Windows C/C++ existentes y mezclar C++ y el código administrado de manera interesante. Solo tenga cuidado con los recursos no administrados y tendrá una biblioteca de intropabilidad muy poderosa en muy poco tiempo.
Pero también hay API de audio más avanzadas que comienzan con Windows Vista, los componentes de Windows Core Audio que podrían ser más interesantes más adelante en la línea. Pero para el funcionamiento básico de E/S, las funciones multimedia de Windows lo llevarán más rápido.
He utilizado estas funciones en varias ocasiones al crear sintetizadores de software simples. Lamentablemente, ese código se fue hace mucho tiempo.
¿Has probado DirectX DirectSound? – JYelton
¿Ha intentado configurar su programa desde "Cualquier CPU" a "32 bits solamente"? La mayoría de los programas no se benefician mucho al ejecutarse en modo de 64 bits. – CodesInChaos
Ya lo intenté, pero no tuve suerte hasta ahora. No he encontrado ningún ejemplo simple de directSound también. También probé SlimDX, pero parece que siempre hay problemas con todos esos ejemplos. Además, en mi caso, necesito un valor entero con actualización dinámica (muestreado algunas veces por segundo). Alguien tiene alguna experiencia con eso? Gracias por cualquier ayuda. – Marian