¿Alguien sabe de una manera sensata de crear una onda de sonido ARBITRARIO en C# y reproducirla desde los altavoces?Generación de sonido real de bajo nivel en C#?
Este problema ha venido apareciendo de vez en cuando durante años, siempre termino renunciando después de un montón de fallas sin encontrar una solución.
Lo que quiero hacer es como un visualizador inverso, es decir, no quiero generar "números" a partir del sonido, quiero generar sonido a partir de los números.
Como obtener una función que proporciono con frecuencia de muestreo, tamaño de muestra y datos de sonido (una matriz de enteros, por ejemplo), y generaría el archivo wav apropiado (la reproducción de sonido en tiempo real sería ideal , pero estaría más que satisfecho con esto también).
Sé que las especificaciones del archivo wav están en todo el interweb, e hice varios intentos para crear la función anterior, tuve cierto éxito para las frecuencias bajas, pero una vez que comencé a jugar con bits por muestra, etc. se convirtió en ENORME , desastre incontrolable.
¿Esto ya no está hecho de ninguna manera? No me importaría lo que use, siempre que haya un contenedor administrado .NET para él (y puedo acceder desde el VS más reciente al tiempo). XNA no admite audio de bajo nivel de esta manera. También se encontraron varios ejemplos que afirman lograr algo similar, pero o bien no funcionan en absoluto, o hacen algo completamente diferente.
Gracias.
Esto se ve realmente increíble, y me siento realmente avergonzado, pero aún no tuve tiempo de jugar realmente con eso. Solo una pregunta: ¿es fácil hacerlo de 4 bytes por muestra? – jssyjrm
Puede convertirlo en 4 bytes por muestra, pero no sé si Windows lo reproducirá. Es posible, simplemente no lo sé. De todos modos, si desea hacer esto, cambie todas las referencias a sizeof (short) to sizeof (int), cambie el tipo de muestra a int, cambie el factor de escala (short.MaxValue) a int.MaxValue y corrige el bucle que llena la matriz de bytes para agregar cuatro bytes por muestra. Pero me sorprendería si puedes escuchar la diferencia. – arx
Muchas gracias por esto. ¿Cómo puedo agregar funcionalidad stop (y quizás pausa) aquí? Supongo que necesitaría un trabajador de segundo plano para que el resto de la GUI sea gratuito. ¿A qué tipo de código se parecería un "sonido de parada"? –