Ir al contenido

Teclado de piano

Un teclado de cuatro octavas iluminando una progresión de acordes y un arpegio

from pyzed import audio, ui
engine = audio.Engine()
synth = engine.add("midi_in") # las notas de note_on/note_off llegan a los módulos midi_in
...
ui.audio.Piano(start=48, octaves=3, pressed=sorted(self.held),
on_note_on=lambda e: engine.note_on(e.value.note, e.value.velocity),
on_note_off=lambda e: engine.note_off(e.value))

Las notas son números MIDI: 60 es el do central (C4) y 69 el la de 440 Hz. note_on entrega un Note(note, velocity); cuanto más abajo de una tecla haces clic, más fuerte suena (velocidad de 30 a 127). note_off entrega el número de nota. Al arrastrar por las teclas se suelta una y se pulsa la siguiente.

ui.audio.note_name(61) devuelve "C#4", útil para etiquetas.

ui.audio.KEYBOARD asigna teclas a semitonos como la mayoría de apps de música: la fila a s d f g h j k son las teclas blancas y w e t y u o p las negras.

def on_key(self, combo):
if combo in ui.audio.KEYBOARD and combo not in self.keys:
self.keys.add(combo)
note = self.octave * 12 + ui.audio.KEYBOARD[combo]
engine.note_on(note)
def on_key_up(self, key):
if key in self.keys:
self.keys.discard(key)
engine.note_off(self.octave * 12 + ui.audio.KEYBOARD[key])
Propiedad Por defecto Qué hace
start 48 La primera nota (redondeada hacia abajo a un do).
octaves 2 Cuántas octavas (más el último do).
pressed () Notas que se iluminan, tocadas desde fuera.
color "accent" Color de las teclas pulsadas.
key_width, height 24, 110 Tamaño de una tecla blanca.
labels True Escribe el nombre de cada do.

Eventos: on_note_on (Note(note, velocity)), on_note_off (el número de nota).