Síntesis rápida de osciladores básicos en enteros de 32 bits para GBA y RP2040

Fuentes: Fast Synthesis of Basic Oscillators

Este artículo técnico, elaborado a partir de la experiencia del autor en sintetizadores para la plataforma GBA y el microcontrolador RP2040, explica cómo generar osciladores de audio de forma muy eficiente usando exclusivamente aritmética entera de 32 bits. La elección de 32 bits responde a dos motivos: coincide con el tamaño de registro nativo de la GBA y ofrece una resolución de tono más que suficiente para representar con precisión todas las frecuencias audibles sin compromisos perceptibles en los graves, algo que se degrada al reducir la profundidad de fase.

El texto reconoce que las formas de onda presentadas sufrirán aliasing por sus transiciones abruptas, aunque asume ese coste porque el objetivo es la máxima velocidad en entornos con recursos muy limitados. Como alternativa sin aliasing menciona la modulación de fase entre ondas senoidales, y deja PolyBLEP como técnica pendiente para un futuro.

Se parte del oscilador más simple: una onda de sierra basada en un acumulador de fase al que se suma un "step" por muestra, cuyo desbordamiento marca un ciclo. A partir de ahí se muestra cómo indexar una tabla de ondas en memoria (preferentemente de 8 bits) usando los bits altos de la fase. Para la onda cuadrada se presentan dos variantes: un cálculo matemático sin ramas, ideal para Cortex-M0+ (thumbv1), y una versión con condicionales branchless, más eficiente en ARM32 y thumbv2, que además permite ajustar la amplitud. Por último, se introduce la onda triangular, primero con condicionales y luego con una variante sin ellas, aprovechando que en el dominio entero expresar la rampa ascendente y descendente resulta directo.