Ir al contenido

Sintetizador

Un panel de sintetizador: perillas en cuatro secciones, un osciloscopio, un espectro, un fader de volumen y un piano que se está tocando

Un sintetizador completo en unas 200 líneas: examples/audio/synth.py.

Ventana de terminal
python examples/audio/synth.py

Tócalo con el ratón en el piano o con las teclas del ordenador: A W S E D… son las teclas blancas y negras de una octava, y Z y X bajan y suben la octava. Los tres botones de arriba cargan presets (Bass, Lead, Pad).

El patch es una cadena de módulos del motor:

MIDI in → 2 osciladores → mezclador → filtro → amplificador → distorsión → chorus → delay → reverb → altavoces
↑ ↑
└ envolvente┘

midi_in convierte engine.note_on() en un tono y una puerta; la envolvente abre el filtro y el amplificador en cada nota. El panel guarda un diccionario de valores y una función, put, que envía cada uno al módulo que controla:

def put(self, key, value):
self.values[key] = value
if key in ("cutoff", "resonance"):
self.engine.set(self.vcf, key, value)
elif key in ("attack", "decay", "sustain", "release"):
self.engine.set(self.env, key, value)
...

La vista está hecha de perillas agrupadas en secciones, un osciloscopio y un espectro que leen engine.scope() y engine.spectrum(), un vúmetro, un fader para el volumen y un piano cuyos eventos note_on/note_off van al motor. pz.frames() redibuja la ventana en cada fotograma para que las pantallas se muevan.