Estoy tratando de escribir un programa para generar aleatoriamente música en base a un conjunto simple de reglas. Me gustaría que el programa genere sus propios sonidos, en lugar de tener un archivo con audio para cada nota. ¿Alguien sabe una forma simple de hacer esto? Sería bueno (pero no esencial) que el sonido fuera poltonal, y me gustaría una solución para Linux, usando C.¿Cómo toco un tono en Linux usando C?
Respuesta
Puede intentar encontrar un secuenciador midi C (como MIDI Sequencer). Consulte también la creación de archivos de audio con formato .au (es decir, consulte las especificaciones para los encabezados .au y el formato de datos de sonido). No podrá usar el formato .wav porque requiere una longitud en el encabezado para rellenar antes de la reproducción.
Le sugiero que pruebe la biblioteca de PortAudio. Es una biblioteca delgada multiplataforma que abstrae la funcionalidad de salida de audio.
Viene con un montón de pequeños ejemplos. Uno de ellos reproduce una onda sinusoidal única, y reproduce un montón de ondas sinusoidales al mismo tiempo. Dado que los ejemplos ya hacen el 90% de lo que necesita, debería tener su audio en funcionamiento en menos de media hora.
Nota: ¡La mejor documentación de PortAudio está en el archivo de encabezado!
Here is an ALSA example que reproduce un tono de onda sinusoidal pura. Accidentalmente, supongo, también demuestra por qué es posible que no desee hacer esto directamente en contra de la biblioteca ALSA.
Alsa parece ser bastante voluminosa en esta escena, extrañamente encuentro la versión OSS de algo similar mucho más comprensible; está aquí "http://manuals.opensound.com/developer/singen.c.html". Si hay algo que he aprendido de esto es que trabajar con sonido para Linux es un poco confuso. –
- 1. ¿Cómo crear un usuario de Linux usando C/C++?
- 2. ¿Cómo toco un archivo con los comandos estándar de Windows?
- 3. Detección de tono usando redes neuronales
- 4. Compruebe si un directorio está vacío usando C en Linux
- 5. ¿Cómo se crea un tono sepia?
- 6. Cómo obtener información de hardware en Linux usando C++
- 7. ¿Cómo producir un tono y silencio con precisión de tiempo?
- 8. ¿Cómo agregar un tono semitransparente sobre los elementos en WPF?
- 9. Enviar correo usando SMTP en C++ en Linux
- 10. Construir un ejecutable Linux usando GCC
- 11. ¿Cómo detectar la frecuencia/tono de sonido en un iPhone?
- 12. Ejecutando un programa C en Linux
- 13. lectura y escritura en fragmentos en Linux usando c
- 14. Ajuste de tono en Android
- 15. ¿Cómo busco un archivo ejecutable usando python en Linux?
- 16. Cómo crear un usuario en Linux usando python
- 17. Uptime en Linux en C
- 18. Cómo fusionar usando Meld en Linux
- 19. ¿Cómo puedo deshabilitar el desplazamiento cuando "toco" el iframe embebido?
- 20. Reproducir tono estéreo en android
- 21. ¿Cómo usar yaml-cpp en un programa C++ en Linux?
- 22. Crear un archivo en Linux utilizando C
- 23. ¿Cómo obtener la dirección MAC para una interfaz en Linux usando un programa C?
- 24. ¿Cómo encontrar qué dispositivo está conectado a un puerto serie USB en Linux usando C?
- 25. C threading en linux?
- 26. Cómo calcular un hash SHA-512 en C++ en Linux?
- 27. Cómo dormir o pausar un PThread en c en Linux
- 28. playbackRate en AUDIO y tono
- 29. cambiar el directorio actual en Linux usando C++
- 30. compila errores usando signal.h en Linux
Puede ver la fuente de http://en.wikipedia.org/wiki/SuperCollider – JasonTrue