Sonidos generados por computadora, primeros pasos


Comencé a leer el libro "La música del cosmos". El capítulo 2 -llamado Kashmir a partir de la canción de Led Zepellin- se explica cómo funciona el sonido. Por casualidad llegué un video donde implementan un sintetizador en c++ en windows. Los conceptos explicados en el libro se muestran en el video.

A partir de esto la idea es poder lograr un generador de sonidos en c++. 

Teoría en c++

Audio in Standard C++ (video)

A Standard Audio API for C++ (propuesta estándar c++)

Repositorio trabajo en el estandar (solo para mac os)

Libro learning core audio (capítulo de la historia del audio)

Todo esto me llevó a querer realizar el ejercicio en mi notebook (windows con wsl), pero no es llegar y compilar para llegar a un resultado.


Windows 🤯

No es una tarea tan fácil instalar, configurar y compilar algo relacionado a audio en Windows sin visual studio code. Intenté con portaudio y libsounio y Cygwin pero sin resultados. La idea es hacerlo lo más directo posible (consola de comandos).

Para setear audio en WSL (No lo hice)

 https://research.wmz.ninja/articles/2017/11/setting-up-wsl-with-graphics-and-audio.html

Para instalar compiladores g++ en windows

https://www.youtube.com/watch?v=7QvNY9245hYç

nota: Hay que tener agregada la ruta a cygwin/bin en la variable de sistema Path

Para correr ejemplo portaudio (supuestamente)

https://blog.numerix-dsp.com/2018/01/compiling-portaudio-with-cygwingcc.html

Hay que instalar cmake (correr nuevamente el instalador de cygwin)

Linux 🐧

En Linux la cosa se hace un poco más fácil gracias a alsa. Existe buena documentación y ayuda.

Generación de ondas

Logré hacerlo funcionar en una raspberry pi 3. Se le puede ingresar la frecuencia en Hertz, y la frecuencia de sampleo. En este caso 441 Hertz y 12000 muestras por segundo para generar un la 



También hay un poco de juego con otro tipo de ondas (la segunda es escalar pero sin
variaciones pero no genera una nota a partir de la frecuencia). En la info de teoría
se puede revisar mucho más acerca de como almacenar en el buffer y otros detalles.


Frecuencias de muestreo

Cuántas muestras se recogen por segundo de una señal continua como la del seno wiki.
Acá una lista de las típicas


Seteo de hardware

En alsa se setea rápidamente con snd_pcm_set_params

Referencias

Otras Referencias

  • https://qa.fmod.com/t/ubuntu-c-generate-own-sounds-with-frequencies/9405
  • https://medium.com/@olehc/lets-write-a-simple-sine-wave-generator-with-c-and-juce-c8ab42d1f54f
  • https://digitalsoundandmusic.com/2-3-12-modeling-sound-in-c-under-linux/

Comentarios