Manual Unificado V11.1 — Editor Musical (MI y MIII)

Dentro del conjunto de aplicaciones dirigidas a la improvisación para acordeón. 🎼 Abrir el editor

Actualización de ayuda:

PARTE 0 — CONTEXTO

0.1 Herramientas para generar, explorar y transformar ideas musicales

El Editor Musical (MI y MIII) forma parte de un conjunto de aplicaciones dirigidas a la improvisación musical. Su finalidad es proporcionar un entorno de trabajo en el que el usuario pueda generar ideas musicales, experimentar con ellas, descubrir nuevas relaciones entre sus elementos y desarrollar materiales que puedan servir como punto de partida para la improvisación o la composición.

La aplicación no se plantea como un editor convencional cuya finalidad principal sea escribir una obra musical terminada. Su función es facilitar la interacción con materiales musicales y ofrecer distintas maneras de modificarlos, combinarlos y observar sus posibilidades. Una idea puede surgir de una secuencia introducida por el usuario, de un proceso generativo, de una transformación o de la combinación de varios materiales.

Para ello, reúne herramientas que permiten trabajar con:

La escucha y la observación son partes fundamentales de este proceso. El usuario puede generar un material, escucharlo, examinar su organización, modificarlo y volver a escucharlo para valorar el resultado. Así, la aplicación permite pasar de una idea inicial a distintas posibilidades musicales sin necesidad de que exista previamente una composición definida.

El objetivo es convertir la interacción con los materiales musicales en una forma de generar y desarrollar ideas. La escritura, la edición y la representación en partitura son medios para explorar esas ideas, no un fin en sí mismos.

0.2 Los dos manuales: MI y MIII

La aplicación trabaja con dos manuales del acordeón:

El manual MII (bajos estándar o Stradella) no se usa en esta app: el editor se centra en MI + MIII, la combinación típica de un acordeón con bajos cromáticos.

Ambos manuales tienen la misma extensión y se escriben de forma independiente: no hay dependencia entre ellos. Lo único que cambia es con qué mano se tocan (derecha = MI, izquierda = MIII).

Cada manual tiene su propio pentagrama:

Además, en el proceso generativo, MI puede actuar como serie tonal y MIII como serie rítmica, y fusionarse.

0.3 Qué aporta esta app a quien transforma material

NecesidadCómo lo resuelve la app
Generar materiales serialesGenerador de series simétricas, de series dodecafónicas y matriz dodecafónica
Variantes de una ideaRetrogradación (R) e Inversión (I)
Filtrar posiciones del material NuevoGenerador "Filtrar posiciones" (§29bis)
Airear el material en el tiempo NuevoGenerador "Espaciar eventos" (§29ter)
Referencia rítmicaClaqueta con BPM, cuenta atrás y pulso de reproducción
Trabajo por manualesDos pentagramas con claves y volúmenes independientes
Ver y oír a la vezResaltado bicolor sincronizado con el audio
Ver la partitura en grandeBotón de pantalla completa, o automático al reproducir
Guardar y recuperar ideasJSON, MusicXML y guardado de proceso generativo
Aislar y escuchar un fragmentoSeleccionar compases (clic + Shift+clic) y pulsar ▶ Reproducir.
Aplicar la misma transformación a los dos manualesCruzada MI + MIII con Ctrl+clic o botón "Aplicar a ambos manuales".
Copiar bloques de compasesPortapapeles interno con botones Copiar / Pegar.
Copiar y pegar motivos dentro de un compásPortapapeles de fragmentos con modos insertar / sustituir.
Combinar serie tonal con serie rítmicaFusión MI (tonal) + MIII (rítmica).
Encajar dos voces de distinta longitudRealineación por MCM.
Recorrer la matriz dodecafónicaMatriz P/R/I/RI con envío a manual.
Revisar y revertir pasos del proceso generativoHistorial con comparación antes/después.
Introducir notas con el ratónDos representaciones visuales de MI: piano y botones.
Desplazar la entrada una octava NuevoBotones 8va ↓ / 8va ↑ y etiqueta de estado. Ver §15bis.
Ver la nota seleccionada en el texto NuevoSincronización textarea ⇄ pentagrama (§12bis).
Seleccionar varias notas sueltas NuevoMultiselección no contigua con Ctrl+Shift+clic (§13bis).
Ocultar herramientas avanzadas NuevoPaneles colapsables (§11bis) y Modo Iniciación (§14bis).
Cambiar de modo con el teclado NuevoAtajo Alt+M (§14bis).

0.4 Contexto de uso

La aplicación forma parte de un conjunto de aplicaciones dirigidas a la improvisación para acordeón.


PARTE I — GUÍA DE USO

Los flujos descritos en esta parte se realizan en el editor. Puedes abrirlo en otra pestaña: 🎼 Abrir el editor.

1. ¿Qué es esta aplicación?

Un entorno web que funciona con un solo archivo HTML para editar, transformar, visualizar y reproducir fragmentos musicales escritos en notación textual, renderizados como partituras de dos pentagramas enlazados por una llave y barras de sistema:

Puede entenderse como un editor de ideas musicales: un entorno pensado principalmente para generar, explorar y desarrollar materiales mediante series, patrones simétricos, retrogradaciones, inversiones, procesos generativos y matrices dodecafónicas. La entrada y edición de notas permiten aportar o modificar materiales; la partitura y la reproducción ayudan a observarlos y escucharlos durante ese trabajo.

No se limita, por tanto, a preparar una partitura terminada: permite trabajar con materiales provisionales, probar variantes y decidir qué posibilidades merece la pena desarrollar.

Usa VexFlow 5 para el grabado musical, Web Audio API para el sonido y Web MIDI API para entrada desde teclados externos.

2. Estructura de la interfaz

2.1 Cabecera superior

ElementoAcción
↶ DeshacerRetrocede un paso (Ctrl+Z).
↷ RehacerAvanza un paso (Ctrl+Y).
▶ Reproducir / ⏹ PararAlterna: reproduce la partitura o el rango seleccionado. Al reproducir, la partitura entra en pantalla completa automáticamente (ver §7.5).
🔰 Iniciación / ⚙️ Avanzado NuevoAlterna el modo Iniciación (interfaz simplificada). Ver §14bis. Atajo: Alt+M.
🔔 PulsoCheckbox. Mientras suena la reproducción, marca el pulso con un click por tiempo.
⛶ Pantalla completaAlterna la pantalla completa del área de partitura.
📤 Exportar JSONGuarda el proyecto (ambos cuadros de texto).
📥 Importar JSONCarga un proyecto guardado.
💾 MusicXMLExporta .musicxml (compatible con MuseScore, Sibelius, Finale).
📖 ManualAbre este documento en otra pestaña.

2.2 Panel lateral izquierdo

Todo el panel lateral está compuesto por bloques colapsables. Se pueden plegar y desplegar individualmente, y el estado se guarda entre sesiones (§11bis). El orden es:

  1. 📖 Sintaxis y Atajos (resumen).
  2. ⚙️ Configuración de Claves y Sistemas.
  3. ⏱️ Claqueta MIDI y Cuenta Atrás.
  4. 🔍 Inspector (aparece al seleccionar algo). Agrupado por familias.
  5. 🎹 Entrada rápida: incluye las dos representaciones visuales de MI — el piano (manual de teclas) y los botones (manual de botones). Ver §3.9.
  6. 🎼 Proceso generativo — Iniciador → Generador → Voz → Historial → Matriz (ver Parte IV).
  7. ⚡ Asistente de Patrones y Transformaciones — actúa sobre la selección o el manual activo; no encadena pasos.
  8. Cuadros de texto Notas para MI y Notas para MIII.
  9. Botones Generar Partituras y Limpiar.
  10. 📋 Registro de actividad.

2.3 Área de partituras (derecha)

Cada sistema muestra MI arriba y MIII abajo, enlazados por llave y barra final. Esta zona puede verse a pantalla completa.

3. Entrada y edición de notas

3.1 Sintaxis básica

<duracion> <nota1> <nota2> ... <notaN>

Regla básica: la primera palabra de cada línea es la duración; todo lo que sigue son las notas del mismo evento (un acorde si hay varias). Para tener varios eventos, usa una línea por evento.

Ejemplos:

4 C4              ← una negra (C4)
4 C4 D4 E4 F4     ← un acorde de cuatro notas, todas negras
4 C4 E4 G4        ← un acorde de tres notas
4 rest            ← un silencio de negra
2. Bb3            ← una blanca con puntillo

4 C4
4 D4
4 E4
4 F4              ← cuatro negras consecutivas (una por línea)

3.2 Duraciones aceptadas

CódigoNombreBeats (en 4/4)
1 o redondaRedonda4
2. o blanca.Blanca con puntillo3
2 o blancaBlanca2
4. o negra.Negra con puntillo1.5
4 o negraNegra1
8. o corchea.Corchea con puntillo0.75
8 o corcheaCorchea0.5
16 o semicorcheaSemicorchea0.25

3.3 Notas

3.4 Silencios

4 rest
rest 4
silencio 4
s 4

3.5 Ligaduras

El símbolo ~ al final de una línea liga su última nota con la primera nota de la línea siguiente, si tienen la misma altura.

4 C4 ~
4 C4

Se interpreta como una sola nota lógica con la duración sumada. Si cruza la barra de compás, se parte en trozos y se liga.

3.6 Cambio de compás

time 3/4
time 6/8
compas 2/4
m 5/4
t 7/8
c 2/2

Los cambios de compás pueden generar compases de silencio. Cuentan como contenido musical y participan en las transformaciones.

3.7 Entrada rápida e interactiva

Además de la entrada por texto, la app ofrece varias formas de introducir notas con el ratón y con el instrumento:

3.8 Entrada MIDI

3.9 Las dos representaciones visuales de MI

MI es el manual derecho. Puede ser de teclas o de botones, según el instrumento. Para poder introducir notas con el ratón en cualquiera de las dos disposiciones, el editor ofrece dos representaciones visuales:

RepresentaciónTipo de manualDisposiciónRango
PianoManual de teclasTeclas blancas y negras, disposición cromática horizontal tipo piano.3 octavas (E2–E5 por defecto; desplazable, ver §15bis).
BotonesManual de botonesBotones redondos en 3 filas cromáticas dispuestas diagonalmente.3 filas (filas 3, 4 y 5 del manual).

Comportamiento

El piano se genera dinámicamente al cargar la página, con anchos proporcionales al espacio disponible. Los botones están fijos en el HTML, con su disposición de tres filas.

Relación con el teclado físico

El piano y los botones son representaciones visuales, no un teclado físico. Para tocar con un instrumento real, se usa la entrada MIDI (§3.8). Para escribir con el teclado del ordenador, se usan las teclas A–G y Shift + A–G (§9.7).

Nota histórica: en versiones anteriores del editor existía un "teclado virtual" cromático (C4–B5). Ha sido sustituido por estas dos representaciones, más fieles a los dos tipos de manual derecho.

4. Selección, inspector y deselección

4.1 Selección de compases

4.2 Selección de nota individual

4.3 Deselección

4.4 Panel Inspector (organizado por grupos)

GrupoBotónAcción
Nota / rango♯Añade # a las notas seleccionadas.
♭Añade b.
♮Fuerza becuadro.
⏸Convierte en silencio.
Eliminar (Supr)Borra la nota o el contenido de los compases.
DeseleccionarLimpia la selección principal, la cruzada y la multiselección.
Cruzada MI ⇄ MIIIQuitar cruzadaSolo si hay cruzada activa.
Aplicar a ambos manualesSolo si hay rango y no hay cruzada.
Copiar/pegar compases📋 Copiar compasesGuarda el rango en el portapapeles de compases.
📋 Pegar compasesReemplaza el rango con el portapapeles de compases.
Copiar/pegar fragmento🎼 Copiar fragmentoGuarda notas/silencios contiguos en el portapapeles de fragmentos.
🎼 InsertarInserta el fragmento al inicio del compás destino y desplaza el resto.
🎼 SustituirReemplaza los primeros N beats del compás destino.

Los grupos sin ningún botón visible se ocultan automáticamente.

5. Cruzada MI + MIII

La cruzada permite aplicar la misma transformación a dos rangos de compases, uno en cada manual, a la vez.

5.1 Cómo crear la cruzada

5.2 Cómo quitar la cruzada

5.3 Restricciones de la cruzada

5.4 Aplicar transformaciones a ambos manuales

6. Copiar y pegar compases

6.1 Copiar

  1. Selecciona un rango de compases (clic + Shift+clic).
  2. Pulsa el botón 📋 Copiar compases del Inspector (o Ctrl+C fuera de un textarea).
  3. Aparece el indicador: 📋 Portapapeles: N compás(es) de MI/MIII.

6.2 Pegar

  1. Selecciona el compás o rango de destino (mismo u otro manual).
  2. Pulsa el botón 📋 Pegar compases del Inspector (o Ctrl+V fuera de un textarea).
  3. Los compases del destino se reemplazan por los copiados.

6.3 Notas

6bis. Copiar y pegar fragmentos musicales

Además del portapapeles de compases, la app incluye un portapapeles de fragmentos para copiar y pegar contenido musical dentro de un compás. Los dos portapapeles son independientes.

6bis.1 Seleccionar un fragmento

6bis.2 Indicador del portapapeles de fragmentos

🎼 Fragmento copiado: N beat(s) de MI (M eventos)

6bis.3 Copiar fragmento

  1. Selecciona un fragmento con Shift+clic.
  2. Pulsa 🎼 Copiar fragmento en el Inspector, o Ctrl+Shift+C.
  3. La app corta las ligaduras exteriores.

6bis.4 Pegar sustituyendo (Ctrl+Shift+V)

6bis.5 Pegar insertando (Ctrl+V)

6bis.6 Reglas y limitaciones

6bis.7 Diferencia con el portapapeles de compases

Portapapeles de compasesPortapapeles de fragmentos
Qué copiaCompases completosNotas/silencios contiguos
Cómo se seleccionaClic / Shift+clic en compasesShift+clic en notas o silencios
Atajo copiarCtrl+C (fuera de textarea)Ctrl+Shift+C
Atajo pegarCtrl+V (fuera de textarea)Ctrl+V (insertar) / Ctrl+Shift+V (sustituir)
Modos de pegadoSolo reemplazarInsertar y sustituir

7. Reproducción, claqueta y pantalla completa

7.1 Reproductor integrado

7.2 Reproducir / Parar

7.3 Sincronización visual en vivo

7.4 Claqueta, cuenta atrás y grabación MIDI

7.5 Pantalla completa

7.6 🔔 Pulso de reproducción

Limitación: el pulso usa un único timeSig (el del primer compás de MI). Si la pieza tiene cambios de compás (4/4 → 3/4), el acento se descuadra a partir del cambio.

7.7 Compartir por enlace

8. Transformaciones musicales

Las transformaciones permiten explorar distintas posibilidades de un mismo material. No presuponen que una variante sea la definitiva: se pueden escuchar y comparar los resultados, combinarlos con otros materiales o seguir transformándolos.

8.1 Generador de series simétricas

Diálogo guiado por prompts: nota base, nº de intervalos, tamaño en semitonos, dirección (asc, desc, o 2,2), duración.

8.2 Retrogradación (R)

Invierte el orden temporal de las unidades de sonido.

AlcanceComportamiento
GlobalToda la secuencia de unidades se invierte. Los silencios de padding cuentan como unidades.
Por compásCada compás invierte sus unidades por separado.
Rango seleccionadoSolo las unidades del rango se invierten entre sí.

8.3 Inversión (I)

8.4 Transposición cromática (↑ / ↓ o + / -)

Prioridad de destinos al transponer con +/-: multiselección > fragmento > nota individual > rango de compases. El primer destino que esté activo es el que se transpone.

8.5 Selector de alcance

Global / Por compás.

8.6 Aplicar transformaciones a ambos manuales

8.7 Cambio de duración con preservación de posición

Al cambiar la duración de una nota o silencio seleccionado (con 1/2/4/8/S), si el checkbox Preservar posición temporal del panel generativo está marcado:

Si el checkbox está desmarcado, el cambio de duración deja que el editor rellene el hueco al final del compás.

8.8 Transponer un fragmento (Shift+clic / naranja)

Cuando hay un fragmento seleccionado (Shift+clic en notas o silencios contiguos), las teclas + / - transpongan solo las notas de ese fragmento.

9. Atajos de teclado

9.1 Selección y edición

AcciónResultado
Clic en compásSelecciona ese compás. Sincroniza con la textarea (§12bis).
Shift + clic en compásExtiende la selección a un rango continuo de compases.
Ctrl + clic en compás del otro manualCrea o reemplaza la cruzada.
Ctrl + Shift + clic en compás del otro manualExtiende el rango cruzado.
Clic en notaSelecciona el acorde entero. Sincroniza con la textarea.
Ctrl/Cmd + clic en notaAlterna esa nota individual del acorde (toggle).
Ctrl/Cmd + Shift + clic en nota NuevoMultiselección no contigua: añade la nota a un conjunto (verde). Ver §13bis.
Shift + clic en nota o silencioSelecciona un fragmento continuo dentro del mismo manual.
Clic en zona vacíaDeselecciona.
↑ / ↓Transpone ±1 semitono; dentro de un acorde, mueve el foco entre las notas apiladas.
Shift+↑ / Shift+↓Transpone ±1 octava.
+ / -Transpone ±1 semitono (multiselección > fragmento > nota > rango).
Shift + + / Shift + -Transpone ±1 octava.
← / →Navega secuencialmente por las notas del manual activo.
Shift+← / Shift+→Extiende o reduce el fragmento seleccionado.
EscDeselecciona (funciona incluso dentro de un textarea).
Supr / BackspaceSi hay selección: borra. Si no: limpia ambos editores.

9.2 Deshacer / Rehacer

TeclaAcción
Ctrl+Z / Cmd+ZDeshacer.
Ctrl+Y / Cmd+YRehacer.
Ctrl+Shift+Z / Cmd+Shift+ZRehacer (alternativo).
Deshacer y Rehacer funcionan siempre, incluso con el foco dentro de un textarea.

9.3 Claqueta, grabación MIDI y manual

TeclaAcción
EspacioInicia / detiene la claqueta y la grabación MIDI.
EnterPlay / Stop de la reproducción.
TabAlterna el manual activo (MI ↔ MIII).

9.4 Portapapeles

TeclaAcción
Ctrl+C / Cmd+CCopiar compases. Fuera de un textarea.
Ctrl+V / Cmd+VPegar compases, o insertar fragmento si lo último copiado fue un fragmento.
Ctrl+Shift+C / Cmd+Shift+CCopiar fragmento.
Ctrl+Shift+V / Cmd+Shift+VPegar fragmento sustituyendo los primeros N beats.

9.5 Transformaciones

TeclaAcción
RRetrogradar.
IInvertir.

9.6 Duración y puntillo

TeclaAcción
1 / 2 / 4 / 8Con selección: cambia la duración de lo seleccionado. Sin selección: fija la duración base de entrada.
S o 9Semicorchea (16). Ambas teclas hacen lo mismo. Mismo doble comportamiento: con selección cambia la duración, sin selección fija la base.
El editor acepta las dos porque S es mnemotécnico (Semicorchea) y 9 es coherente con la fila numérica 1/2/4/8. En teclados sin Numpad, S está más cerca de la mano izquierda.
.Puntillo: con selección, activa el puntillo; sin selección, alterna el puntillo global de entrada.
,Igual que ..

9.7 Entrada por teclado

TeclaAcción
a – gInserta la nota natural más cercana a la anterior.
Shift + a – gInserta un silencio.
Clic en tecla del piano o botón del manual de botonesInserta la nota pulsada en el manual activo.
8va ↓ / 8va ↑ NuevoDesplaza la entrada del piano y los botones una octava arriba o abajo. Ver §15bis.

9.8 Paneles colapsables Nuevo

TeclaAcción
Alt+↓Siguiente panel del sidebar (lo abre, cierra los demás).
Alt+↑Panel anterior (lo abre, cierra los demás).
Alt+EnterAlterna el panel enfocado sin cerrar los demás.
Alt+Shift+QAlterna el estado global (toggle): si hay algún panel abierto, los cierra todos; si están todos cerrados, los abre todos.

Ver §11bis para el detalle del sistema.

9.9 Sincronización textarea ⇄ pentagrama Nuevo

AcciónResultado
Seleccionar texto en la textareaResalta en violeta las notas correspondientes en el SVG.
Clic en nota del pentagramaSelecciona su línea en la textarea (sin robar el foco al pentagrama).
Shift+clic (fragmento)Selecciona el rango de líneas en la textarea.
Clic en compás / rango de compasesSelecciona las líneas que abarcan esos compases.
Multiselección (Ctrl+Shift+clic)Selecciona el rango envolvente en la textarea.

Ver §12bis para el detalle del sistema.

9.10 Interfaz Nuevo

TeclaAcción
Alt+MAlterna entre el Modo Iniciación y el Modo Avanzado. Ver §14bis.

9.11 Regla general sobre el foco

Contexto del focoComportamiento
<textarea>Todas las teclas de escritura funcionan con normalidad. Solo Ctrl+Z, Ctrl+Y, Ctrl+Shift+Z, Esc y Alt+M se interceptan.
<input>Igual.
<button>Espacio y Enter activan el botón (comportamiento nativo).
Resto de la páginaTodos los atajos están activos, incluidos los del acordeón de paneles y Alt+M.

10. Flujos de trabajo típicos

Los siguientes ejemplos muestran maneras de trabajar con la aplicación, no recetas obligatorias ni procedimientos destinados necesariamente a obtener una obra terminada. Cuando el flujo lo permita, conviene escuchar y observar cada resultado, valorar qué ha cambiado y decidir si se conserva, se modifica o se utiliza como punto de partida para otro paso.

10.1 Crear una serie e invertirla

  1. Generar Series Simétricas → responde los prompts.
  2. Selecciona un rango de compases (clic + Shift+clic).
  3. I (o botón Invertir).
  4. ▶ Reproducir con el rango aún seleccionado.

10.2 Dictado MIDI

  1. Conectar teclado MIDI.
  2. Activar Medir duración real y Silencios automáticos.
  3. Tocar en tiempo real; las notas se insertan cuantizadas.

10.3 Exportar a MuseScore

  1. Pulsa 💾 MusicXML.
  2. Abre el archivo .musicxml en MuseScore / Sibelius / Finale.

10.4 Copiar y pegar compases

  1. Selecciona un rango de compases en el manual de origen.
  2. Pulsa 📋 Copiar compases.
  3. Selecciona el compás o rango de destino.
  4. Pulsa 📋 Pegar compases.

10.5 Copiar un motivo y repetirlo dentro de un compás

  1. Con Shift+clic, selecciona el motivo.
  2. Pulsa 🎼 Copiar fragmento (o Ctrl+Shift+C).
  3. Haz clic en el compás donde quieras pegar el motivo.
  4. Elige modo: 🎼 Insertar o 🎼 Sustituir.

10.6 Trabajar con MI y MIII a la vez

  1. Selecciona un rango en MI.
  2. Pulsa Aplicar a ambos manuales.
  3. Pulsa R o I o ↑ / ↓.

10.7 Reproducir, ver en pantalla completa y parar

  1. Selecciona (o no) un rango de compases.
  2. Pulsa ▶ Reproducir o Enter. La partitura entra en pantalla completa.
  3. Si quieres marcar el pulso, activa 🔔 Pulso.
  4. Detén con ⏹ Parar o Enter.

10.8 Ligaduras y transposición

  1. Escribe 2 F4 / 4 D4 / 4 D4 ~ / 4 D4 / 2 rest.
  2. Selecciona ambos compases.
  3. Pulsa ↑.

10.9 Fusión MI (tonal) + MIII (rítmica)

  1. Escribe una serie tonal en MI y una serie rítmica en MIII.
  2. Panel generativo → Bloque 2 → Fusionar MI (tonal) + MIII (rítmica).
  3. Elige parámetros y Destino.
  4. Pulsa Aplicar generador.

10.10 Realinear dos voces por MCM

  1. Ten contenido en MI y en MIII.
  2. En Voz: duración y MCM, activa Repetir las dos voces hasta su MCM.
  3. Pulsa Realinear ambas voces.

10.10.a Completar una serie hasta el MCM de un compás

  1. En Voz: duración y MCM, elige MI o MIII en Manual.
  2. En Compás, selecciona el compás de destino, por ejemplo 4/4.
  3. Pulsa Completar ciclo en este manual (MCM). Solo se repite el manual elegido; el otro no cambia.

Ejemplo: 7 negras duran 7 tiempos. En 4/4, MCM(7, 4) = 28; la app repite la serie 4 veces y la escribe en 7 compases de 4/4.

10.11 Recorrer la matriz dodecafónica

  1. Escribe una fila dodecafónica en MI (12 alturas distintas).
  2. Panel generativo → Bloque 5 → Serie de = MI, Enviar a = MIII, Valor = 4.
  3. Pulsa Generar matriz.
  4. Haz clic en cualquier etiqueta P, R, I o RI. La forma se escribe en MIII.

10.12 Revisar y revertir pasos del proceso generativo

  1. Aplica varios pasos en el panel generativo.
  2. Consulta el Bloque 4 — Historial y comparación.
  3. Si quieres volver a un punto anterior, pulsa ↶ Volver.
  4. El paso y los posteriores se descartan.

10.13 Introducir notas con el piano o los botones

  1. Selecciona el manual activo: MI o MIII.
  2. Elige la duración (1/2/4/8/S) y, si quieres, el puntillo.
  3. Si necesitas otra octava, pulsa 8va ↓ o 8va ↑ (ver §15bis).
  4. Haz clic en una tecla del piano o en un botón de las tres filas.
  5. La nota se reproduce y se inserta en el manual activo con la duración elegida.

10.14 Sincronizar texto y pentagrama Nuevo

  1. Haz clic en una nota del pentagrama.
  2. La línea correspondiente del textarea se resalta con un fondo azul claro (overlay).
  3. Alternativamente, selecciona con el ratón varias líneas del textarea; las notas correspondientes se resaltan en violeta en el pentagrama.

10.15 Transponer varias notas sueltas a la vez Nuevo

  1. Haz clic en una nota para seleccionarla (azul).
  2. Haz Ctrl+Shift+clic en otras notas sueltas para añadirlas a la multiselección (verde).
  3. Pulsa + o - para transponer todas las notas multiseleccionadas ±1 semitono.
  4. Pulsa Shift++ o Shift+- para ±1 octava.
  5. Pulsa Esc para limpiar la multiselección.

10.16 Navegar por los paneles con el teclado Nuevo

  1. Pulsa Alt+↓ repetidamente para recorrer los paneles del sidebar en orden.
  2. Cada pulsación abre un panel y cierra los demás (modo acordeón).
  3. El panel activo se marca con un borde naranja y hace scroll hasta quedar visible.
  4. Pulsa Alt+Enter para abrir o cerrar el panel enfocado sin cerrar los demás.
  5. Pulsa Alt+Shift+Q para alternar: cierra todos si hay alguno abierto; los abre todos si están todos cerrados.

10.17 Filtrar posiciones del material Nuevo

  1. Genera o escribe material en un manual (por ejemplo con el Iniciador).
  2. Panel generativo → Bloque 2 → Tipo: Filtrar posiciones.
  3. Fuente: Iniciador (o el manual que corresponda). Destino: MI o MIII.
  4. Elige Patrón (Impar, Par, Cada N, Lista personalizada) y conserva o no los silencios.
  5. Pulsa Aplicar generador.

Ver §29bis para el detalle completo.

10.18 Airear una serie con silencios Nuevo

  1. Ten material en un manual.
  2. Panel generativo → Bloque 2 → Tipo: Espaciar eventos.
  3. Elige Fuente, Destino, número de Slots y posición del silencio (Antes o Después).
  4. Pulsa Aplicar generador.

Ver §29ter para el detalle completo.

10.19 Combinar filtro y espaciado Nuevo

  1. Iniciador: por ejemplo, Serie dodecafónica.
  2. Generador 1: Filtrar posiciones con Patrón Cada N=3. Destino MIII.
  3. Generador 2: Espaciar eventos con Fuente Generador anterior, Slots 2, Posición Después. Destino MIII.

Resultado: subconjunto de la serie con silencios intercalados.

10.20 Ejemplos guiados: MCM, alternancia, fusión e inversión Nuevo

En la app, pulsa 📚 Ejemplos para cargar el punto de partida o el resultado de cada ejercicio. Cada carga se puede deshacer. Usa el resultado como referencia y reconstruye el proceso con los pasos siguientes.

Ejemplo A — 7 negras en 4/4

Una serie de siete negras dura siete tiempos; una barra de 4/4, cuatro. Buscamos el primer instante en que coinciden el comienzo de la serie y el primer tiempo del compás: MCM(7, 4) = 28. Por tanto, la serie se repite cuatro veces y ocupa siete compases. Los comienzos sucesivos caen en los pulsos 1, 4, 3, 2 y 1.

  1. En 📚 Ejemplos, carga el punto de partida de «MCM: 7 negras en 4/4».
  2. En modo avanzado, abre Voz (valor y bucle), elige MI y el compás 4/4.
  3. Pulsa Completar ciclo en este manual (MCM).
  4. Compara el pentagrama con Cargar resultado y reproduce ambos.

Ejemplo B — alternancia regular entre MI y MIII: eco u O/R

Las dos opciones parten de la sucesión de doce alturas del ejemplo adjunto «alternancia regular». La sucesión original es:

4 C4
4 C#4
4 A4
4 G#4
4 F#4
4 B4
4 D4
4 E4
4 F4
4 G4
4 D#4
4 A#4
  1. En 📚 Ejemplos, carga el punto de partida de «Alternancia entre MI y MIII: dos opciones».
  2. En modo avanzado, aplica el Iniciador Serie dodecafónica (fila dada) con las doce notas anteriores, valor Negra (4) y manual MI. Así O queda guardada como fuente del proceso.

Opción A — Eco O/O. En Generador, aplica Espaciar eventos con Fuente Iniciador, Slots 2, Posición Después y Destino MI. Vuelve a aplicar Espaciar eventos con la misma fuente y Slots, pero Posición Antes y Destino MIII. MI toca en los pulsos impares y MIII responde en los pares con la misma sucesión.

Opción B — O/R. Aplica primero Retrogradar (R) desde Fuente Iniciador a Destino MIII. Después aplica Espaciar eventos a Texto actual de MIII, con Slots 2 y Posición Después. Por último, aplica Espaciar eventos desde Iniciador a MI, con Slots 2 y Posición Antes. MIII presenta R en los pulsos impares y MI responde con O en los pares.

La tarjeta permite cargar el resultado de cada opción. En ambos casos, cada manual ocupa 24 pulsos (seis compases de 4/4). La app no tiene un botón único de alternancia: las dos versiones se construyen combinando los generadores disponibles.

Ejemplo C — MCM de dos ciclos: 12 fusas y 7 semicorcheas

Ahora se busca que dos voces que empiezan juntas terminen juntas. Tomamos la fusa como unidad común: MI contiene 12 fusas; MIII contiene 7 semicorcheas, equivalentes a 14 fusas. Por tanto, MCM(12, 14) = 84 fusas. MI repite su serie 7 veces y MIII, 6. Ambas duran 10,5 tiempos de negra.

  1. En 📚 Ejemplos, carga el punto de partida de «MCM de dos ciclos: 12 fusas y 7 semicorcheas».
  2. Comprueba que MI contiene 12 eventos con duración 32 y MIII, 7 eventos con duración 16.
  3. En modo avanzado, abre Proceso generativo → Voz: duración y MCM y deja marcada Repetir las dos voces hasta su MCM. La casilla solo afecta al botón de realineación.
  4. Pulsa Realinear ambas voces. El registro debe indicar MI ×7, MIII ×6 y un ciclo total de 10,5 tiempos.
  5. Compara con Cargar resultado y pulsa ▶ Reproducir. Los ataques iniciales coinciden y las dos series acaban tras la misma duración.

La app representa esa duración como un compás de 84/32: 84 fusas equivalen a 10,5 negras. Es una métrica larga y poco habitual. En este ejercicio, el MCM alinea los finales de las voces; no hace que el final caiga en una barra convencional de 4/4.

Ejemplo D — fusionar melodía y ritmo

MI aporta una melodía de ocho alturas; MIII aporta un patrón rítmico de cuatro eventos. La fusión conserva las alturas de MI y toma de MIII las duraciones y la alternancia entre notas y silencios. Como el modo es cíclico, el patrón rítmico se repite dos veces.

  1. En 📚 Ejemplos, carga el punto de partida de «Fusión: melodía de MI con ritmo de MIII».
  2. En modo avanzado, abre Proceso generativo → Generador y elige Fusionar MI (tonal) + MIII (rítmica).
  3. Configura Fuente: Texto actual de MI, Dirección rítmica: Directa, Modo de longitud: Cíclico y Destino: MI.
  4. Elige Omitir silencios: No (usar también silencios), pulsa Aplicar generador y compara con Cargar resultado (NO: conservar silencios). D4 y F4 quedan en silencio.
  5. Cambia a Omitir silencios: Sí (ignorar silencios), vuelve a aplicar y compara con Cargar resultado (SÍ: omitir silencios). Ahora suenan las ocho alturas; las duraciones 8 y 2 se alternan porque los silencios se eliminan antes de asignar el ritmo.

El primer ciclo con NO produce 8 C4, 8 rest, 2 E4, 4 rest; el segundo vuelve a empezar con G4. Con SÍ, el resultado es 8 C4, 2 D4, 8 E4, 2 F4, 8 G4, 2 A4, 8 B4, 2 C5. Las alturas C3 y G3 escritas en MIII solo marcan que esos eventos son notas: la fusión usa sus duraciones, y la altura de salida procede de MI. El generador mantiene MIII intacto y escribe el resultado en el manual de Destino. Los botones de referencia cargan estados de partitura; para reconstruir cada resultado hay que escoger el valor correspondiente de Omitir silencios y aplicar el generador.

Ejemplo E — Inversión: qué fija el eje

La inversión cambia el signo de cada intervalo: lo que sube, baja. Para un motivo dado, el contorno invertido es siempre el mismo. Lo que el eje decide es dónde se coloca ese contorno: qué nota del original se queda fija y en qué registro aparece el resultado.

Partimos del motivo D4–F4–A4–C5 (cuatro negras, intervalos +3, +4, +3). Las tres inversiones comparten los intervalos −3, −4, −3 y, por tanto, descienden.

Los tres resultados son la misma figura descendente en tres registros, no tres contornos distintos. El ejercicio sirve para ver cómo el eje determina la ubicación de la inversión y qué punto queda anclado, mientras la sucesión de intervalos invertidos se conserva.

El generador escribe A#5 y D#5 en lugar de sus equivalentes enarmónicos Bb5 y Eb5: como el motivo original no contiene bemoles, la app usa la enarmonía con sostenidos por defecto.

  1. En 📚 Ejemplos, carga el punto de partida de «Inversión: qué fija el eje»: MI contiene D4 F4 A4 C5; MIII está vacío.
  2. En modo avanzado, abre Proceso generativo → Generador.
  3. Elige Tipo: Invertir (I). Fuente: Texto actual de MI. Destino: MIII.
  4. En Eje, elige Primera nota. Pulsa Aplicar generador. Observa que D4 no se mueve.
  5. Pulsa ↶ Deshacer. Cambia Eje a Punto medio. Pulsa Aplicar generador. Observa que D4 y C5 intercambian sus posiciones.
  6. Pulsa ↶ Deshacer. Cambia Eje a Última nota. Pulsa Aplicar generador. Observa que ahora C5 es la que no se mueve.
  7. Reproduce MI y MIII: el original sube (+3, +4, +3); el invertido baja (−3, −4, −3). Compara las tres versiones sucesivamente, cargando cada una con su botón.

En los tres casos se conservan duración, número de notas y contorno interválico. Cambian el registro y qué nota del original permanece anclada.

11bis. Paneles colapsables y su atajo único Nuevo

Todos los bloques del panel lateral (sidebar) son colapsables: se pueden plegar y desplegar individualmente con un clic en su cabecera. Además, un único par de teclas permite recorrerlos como un acordeón, abriendo el que interese y cerrando los demás.

11bis.1 Paneles colapsables

Los paneles que se pueden plegar son:

  1. 📖 Sintaxis y Atajos Completos.
  2. ⚙️ Configuración de Claves y Sistemas.
  3. ⏱️ Claqueta MIDI y Cuenta Atrás.
  4. ⚙️ Opciones avanzadas de MIDI (dentro de Entrada rápida).
  5. 🎼 Iniciador (bloque 1 del panel generativo).
  6. 🎼 Generador (bloque 2).
  7. 🎼 Voz (bloque 3).
  8. 🎼 Historial y comparación (bloque 4).
  9. 🎼 Matriz dodecafónica (bloque 5).
  10. ⚡ Asistente de Patrones y Transformaciones.
  11. 📋 Registro de actividad.

Por defecto, se muestran abiertos el bloque verde (Configuración) y el bloque 1 (Iniciador). Los demás están plegados.

11bis.2 Indicador visual

Cada cabecera tiene una flechita ▸ a la derecha. Al abrir el panel, la flecha gira 90° y queda apuntando hacia abajo (▾).

11bis.3 Persistencia

El estado (abierto/cerrado) de cada panel se guarda en localStorage. Al recargar la página, cada panel recupera el estado que tenía la última vez.

Esto significa que:

11bis.4 Atajo único acordeón Nuevo

En lugar de 11 atajos individuales, se ha implementado un único par de teclas que recorre los paneles en el orden en que aparecen en el sidebar:

TeclaAcción
Alt+↓Pasa al siguiente panel y lo abre (cierra los demás).
Alt+↑Pasa al panel anterior y lo abre (cierra los demás).
Alt+EnterAlterna el panel enfocado sin cerrar los demás. Útil para tener dos paneles abiertos a la vez.
Alt+Shift+QAlterna el estado global (toggle): si hay algún panel abierto, los cierra todos; si están todos cerrados, los abre todos.

Comportamiento

Si el usuario abre un panel con el ratón, el índice del acordeón se resincroniza: la próxima pulsación de Alt+↓ continúa desde el panel que él abrió, no desde donde se quedó el teclado.

11bis.5 Ejemplo de uso

  1. El usuario está trabajando y quiere consultar los atajos.
  2. Pulsa Alt+↓: se abre la ayuda "📖 Sintaxis y Atajos".
  3. La lee.
  4. Pulsa Alt+↓ cinco veces más: pasa por Configuración, Claqueta, Opciones MIDI, Iniciador y Generador (cada uno se abre y cierra el anterior).
  5. Pulsa Alt+↑: vuelve a Iniciador.
  6. Pulsa Alt+Enter: ahora Iniciador y Generador quedan abiertos a la vez.
  7. Pulsa Alt+Shift+Q: como en ese momento hay paneles abiertos, se cierran todos. Si lo vuelves a pulsar, se abren todos de nuevo.

11bis.6 Compatibilidad con el modo Iniciación

Si un panel está oculto (por ejemplo, porque el modo Iniciación oculta las herramientas avanzadas), el atajo sigue funcionando internamente: cambia el estado abierto/cerrado aunque el panel no esté visible en ese momento. Al volver al modo avanzado, el panel aparece con el estado que le hayamos dejado.

11bis.7 Diferencia entre "colapsable" y "condicional"

TipoQué controlaEjemplo
ColapsableEl usuario decide si el bloque está plegado o desplegado. El estado se guarda.Configuración de claves, Claqueta MIDI, los bloques 1–5 del panel generativo…
CondicionalEl bloque aparece o desaparece según la selección activa. No tiene estado persistente.El Inspector de selección.

12bis. Sincronización textarea ⇄ pentagrama Nuevo

El editor tiene una sincronización bidireccional entre lo que se ve en el pentagrama y lo que se ve en los cuadros de texto "Notas para MI" y "Notas para MIII". Sirve para orientarse rápidamente: no hace falta contar líneas a mano para saber qué nota corresponde a qué línea del texto.

12bis.1 Pentagrama → textarea

Al seleccionar algo en el pentagrama, la parte del texto que corresponde a lo seleccionado se marca visualmente:

Acción en el pentagramaQué se marca en el textarea
Clic simple en una nota o silencioLa línea del texto donde está esa nota/silencio.
Shift+clic (fragmento, naranja)El rango de líneas entre la primera y la última nota del fragmento.
Clic en compásTodas las líneas que abarcan ese compás.
Clic en un rango de compases (Shift+clic)Todas las líneas que abarcan los compases seleccionados.
Multiselección (Ctrl+Shift+clic, verde)El rango envolvente de las notas multiseleccionadas (de la primera a la última).
Clic en etiqueta MI / MIIITodo el texto del manual correspondiente.

Overlay visual

Cuando el pentagrama tiene el foco (no la textarea), el navegador no suele dibujar la selección nativa del textarea. Para que se vea igualmente, el editor dibuja un overlay: un rectángulo azul translúcido, con un borde azul sólido a la izquierda, que se superpone sobre las líneas afectadas del textarea.

El overlay es puramente visual: no interfiere con el teclado ni con el ratón. Desaparece cuando la textarea recibe el foco (porque entonces ya se ve la selección nativa).

Detalle técnico

El overlay usa el line-height real del textarea para calcular en qué píxel empieza cada línea. Como el CSS del textarea declara un line-height explícito (1.4), el cálculo es exacto: no hay desfase aunque haya 30 líneas.

12bis.2 Textarea → pentagrama

Al seleccionar texto con el ratón en la textarea, las notas correspondientes del pentagrama se resaltan en violeta (color #a855f7).

Cuándo se actualiza

12bis.3 Interacción con las demás selecciones

Los tres modos de selección del editor (clic simple azul, fragmento naranja, multiselección verde) conviven con la sincronización:

Al deseleccionar (Esc o clic en zona vacía), la sincronización también se limpia.

12bis.4 Ventajas prácticas

12bis.5 Limitaciones

13bis. Multiselección no contigua Nuevo

Además de las selecciones ya existentes (nota individual azul, fragmento naranja, rango de compases azul), la app permite marcar varias notas sueltas a la vez, sin que formen una secuencia contigua. Se pintan en verde (color #16a34a).

13bis.1 Cómo se crea

Al hacer el primer Ctrl+Shift+clic, la nota que ya estaba seleccionada en azul se añade automáticamente a la multiselección. Así no hay que hacer un gesto especial para arrancar.

13bis.2 Comportamiento

13bis.3 Transponer la multiselección

Una vez que hay una o varias notas multiseleccionadas, se pueden transponer todas a la vez con:

TeclaAcción
+ / =Sube todas las notas multiseleccionadas 1 semitono.
- / _Baja todas las notas 1 semitono.
Shift++Sube 1 octava.
Shift+-Baja 1 octava.
Numpad + / -Igual que los de la fila normal.

En algunos teclados, escribir + requiere mantener Shift; en ese caso la app lo interpreta como una transposición de octava. Para subir un semitono, pulsa = sin Shift (o usa + del teclado numérico).

13bis.4 Prioridad de destinos al transponer

Cuando se pulsa + o -, el editor decide a qué aplicarlo según esta prioridad:

  1. Multiselección no contigua (verde): si hay al menos una nota multiseleccionada.
  2. Fragmento (naranja): si hay un fragmento definido con Shift+clic.
  3. Nota individual (azul): si hay una sola nota seleccionada.
  4. Rango de compases (azul con borde): si hay uno o varios compases seleccionados.

13bis.5 Ejemplo

  1. En el compás 1, hay 4 C4 D4 E4 F4.
  2. El usuario hace clic en C4 → se vuelve azul.
  3. Hace Ctrl+Shift+clic en D4 → ambos se vuelven verdes.
  4. Hace Ctrl+Shift+clic en F4 → los tres se vuelven verdes; E4 queda sin marcar.
  5. Pulsa + una vez → resultado: 4 C#4 D#4 E4 F#4.
  6. Pulsa Esc para limpiar la multiselección.

13bis.6 Limitaciones

14bis. Modo Iniciación Nuevo

El editor incluye un Modo Iniciación: una interfaz simplificada para niños o para primeros contactos con la aplicación. Se activa y desactiva con el botón 🔰 Iniciación de la cabecera, o con el atajo Alt+M.

14bis.1 Qué hace

14bis.2 Aviso de iniciación

En lugar de la ayuda técnica, aparece un mensaje amable:

🎵 Escribe notas y pulsa ▶ Reproducir
Ejemplo (una nota por línea, cuatro negras):
4 C4 · 4 D4 · 4 E4 · 4 F4
Si escribes las cuatro notas en una sola línea, sonarán a la vez (un acorde), no una tras otra.
También puedes pulsar las teclas del piano o los botones de colores.

14bis.3 Atajo Alt+M Nuevo

Se puede alternar entre Modo Iniciación y Modo Avanzado sin usar el ratón:

TeclaAcción
Alt+MAlterna el modo activo. La M es mnemotécnica de "Modo".

El atajo se ignora cuando el foco está en un <textarea> o <input>, para no interferir con la escritura.

Al cambiar de modo con el atajo, la acción se anota en el Registro de actividad con el modo al que se ha cambiado.

14bis.4 Persistencia

El modo elegido se guarda en localStorage. Al recargar la página, la app arranca en el último modo usado.

14bis.5 Qué sigue funcionando en modo Iniciación

14bis.6 Qué se oculta

Se puede salir en cualquier momento pulsando ⚙️ Avanzado o Alt+M.

15bis. Octava del teclado Nuevo

La entrada del piano y de los botones se puede desplazar una octava arriba o abajo con dos botones situados en la fila de opciones de "Entrada rápida".

15bis.1 Los botones

BotónAcciónRango resultante
8va ↓Baja la entrada una octava.E1–E4
8va ↑Sube la entrada una octava.E3–E6

Entre ambos hay una etiqueta de estado que muestra el desplazamiento actual:

15bis.2 Estados posibles

Solo hay tres estados de desplazamiento:

EstadoRango del piano y de los botonesCómo llegar
−1E1–E4Pulsar 8va ↓ una vez desde el estado 0.
0E2–E5 (por defecto)Estado inicial, o volver desde −1 o +1.
+1E3–E6Pulsar 8va ↑ una vez desde el estado 0.

Si se intenta ir más allá de los límites, aparece en el Registro de actividad un mensaje:

Límite inferior (E1–E4).
Límite superior (E3–E6).

15bis.3 Qué cambia al desplazar

El desplazamiento afecta a toda la entrada visual:

El resto del editor (pentagrama, reproducción de la partitura, atajos de transposición, etc.) no se ve afectado: el desplazamiento es solo una ayuda para introducir notas fuera del rango por defecto.

15bis.4 Ejemplo

  1. El usuario abre el editor. La etiqueta muestra 0 y el piano cubre E2–E5.
  2. Pulsa 8va ↓. La etiqueta pasa a −1 y el piano cubre E1–E4.
  3. Pulsa una tecla. Se inserta un Mi1 (antes era Mi2).
  4. Pulsa 8va ↑ dos veces: la etiqueta vuelve a 0 y luego pasa a +1. El piano cubre E3–E6.
  5. Pulsa una tecla. Se inserta un Mi5.

En el Registro de actividad aparecen mensajes del tipo:

🎹 Entrada −1 octava(s). Rango: E1 – E4.
🎹 Entrada +0 octava(s). Rango: E2 – E5.
🎹 Entrada +1 octava(s). Rango: E3 – E6.

15bis.5 Interacción con el manual activo

El desplazamiento de octava es independiente del manual activo. Si el usuario está escribiendo en MI y luego pasa a MIII, la octava seleccionada se mantiene. No hay dos desplazamientos separados: uno solo, global a los dos manuales.

15bis.6 Interacción con MIDI

La entrada MIDI no se ve afectada por este desplazamiento. Cuando el usuario toca en un teclado MIDI externo, se registra la nota real que llega por el puerto MIDI, sin transponerla. El desplazamiento solo afecta a la entrada visual (piano y botones en pantalla).

15bis.7 Limitaciones


PARTE II — NORMAS DE ESCRITURA

Esta parte describe las reglas que sigue la app para escribir música.

16. Decisiones de diseño

D1. Sin armadura de clave

La app no maneja armaduras. Todas las alteraciones se escriben explícitamente cuando son necesarias.

D2. Ligaduras entre compases

Las ligaduras entre compases sí están soportadas. Una nota ligada es una sola unidad de sonido.

D3. Sin dobles alteraciones

La app no escribe 𝄪 ni 𝄫. Si una transposición produce una doble alteración, se escribe con la enarmonía simple más cercana.

D4. Alteración explícita siempre que se necesite

El editor escribe siempre la alteración explícita (# o b) cuando el sonido efectivo de la nota no es natural.

D5. Sin modo pedagógico (accidentales de cortesía)

No hay accidentales de cortesía.

D6. Los tokens no tocados conservan su sonido

Al transponer o modificar una nota, las demás notas del compás conservan su sonido previo.

D7. Silencios automáticos como contenido

La app puede generar silencios automáticos al completar compases incompletos. Esos silencios cuentan como contenido musical real.

D8. Unidades de sonido

Una nota ligada es una sola unidad de sonido: un solo ataque, duración total.

D9. Partición de eventos que no caben

Cuando un evento no cabe entero en el compás actual, la app lo parte automáticamente.

D10. Preservación de posición temporal

Al cambiar la duración de notas o silencios (con el checkbox Preservar posición temporal activo), la app inserta silencios explícitos para que las notas siguientes no se desplacen.

D11. Indiferencia al tipo de manual derecho

MI puede ser un manual de teclas o de botones. La notación textual, el render y la reproducción son idénticos en ambos casos: la diferencia está solo en cómo se toca el instrumento, no en cómo se escribe.

D12. Sincronización por índice de línea Nuevo

La correspondencia entre el textarea y el pentagrama se hace por número de línea: la línea n del texto corresponde al lineIndex n del evento en el parseador. Esto permite que la sincronización sea exacta y barata, sin heurísticas.

D13. Desplazamiento de octava como ayuda de entrada Nuevo

El desplazamiento de octava del piano y de los botones es una ayuda de entrada visual, no un cambio en el modelo musical. No altera la partitura, ni el audio de reproducción, ni la entrada MIDI. Solo cambia la octava que se escribe al pulsar una tecla o botón en pantalla.

D14. Generadores como transformadores puros Nuevo

Los generadores de transformación (Retrogradar, Invertir, Transponer, Filtrar posiciones, Espaciar eventos, Fusionar MI+MIII) no modifican el material de entrada. Solo escriben el resultado en el manual de Destino. La fuente (Iniciador, texto de MI, texto de MIII o generador anterior) permanece intacta.

17. Normas vigentes

N1. Formato de nota

letra + alteración opcional + octava

N2. Herencia por letra y octava

Dentro de un compás, una alteración explícita afecta a las notas siguientes de la misma letra y octava.

N3. Reinicio por compás

La alteración vigente se reinicia al empezar cada compás.

N4. Escritura tipográfica

  1. Se consulta la alteración vigente.
  2. Si el sonido es # o b, siempre se escribe el signo.
  3. Si el sonido es natural, se escribe n solo si la vigente era # o b.

N5. Reducción

Los signos redundantes se eliminan al Generar Partituras.

N6. Transposición

Se transpone desde el sonido efectivo previo. Las demás notas conservan su sonido (D6).

N7. Modificación puntual (Inspector)

Las notas modificadas cambian; las demás conservan su sonido previo.

N8. Normalización ("Generar Partituras")

Reescribe cada compás con la norma tipográfica usando los sonidos efectivos actuales. No cambia sonidos.

N9. Render

El pentagrama dibuja el sonido efectivo de cada nota, pero el signo gráfico solo se escribe cuando cambia respecto a la vigente.

N10. Audio

El audio reproduce el sonido efectivo de cada nota.

N11. Unidades de sonido

Una nota ligada es una sola unidad de sonido. Las transformaciones tratan cada unidad como un bloque indivisible.

N12. Consolidación de bloques

Un bloque ligado que ocupe varios items se consolida en su forma canónica si cabe entero en un compás.

N13. Padding

El silencio de "padding" cuenta como un silencio más del fragmento. Los silencios consecutivos se fusionan en una sola unidad.

N14. Retrogradación

Invierte el orden temporal de las unidades de sonido.

N15. Inversión

Refleja cada unidad de sonido alrededor de un eje.

N16. Partición automática

Cuando un evento no cabe entero en el compás, la app lo parte (ver D9).

N17. Cálculo de la duración al aplicar valor

Al aplicar un valor (1/2/4/8/16) a un manual desde el bloque Voz, la nueva duración se calcula indexando durMap con el valor tal como se escribe ("1", "2", "4"…), no con el código interno ("w", "h", "q"…).

N18. Filtrar posiciones Nuevo

El generador transform.filterPositions conserva el evento n-ésimo del material de entrada según el patrón elegido (Impar, Par, Cada N, Lista personalizada). Si Conservar silencios está desactivado, los silencios que caigan en posición válida también se descartan.

N19. Espaciar eventos Nuevo

El generador transform.spaceEvents expande cada evento del material de entrada en N "slots" del mismo valor que el evento. Los slots que no ocupa el evento se rellenan con silencios de la misma duración. La posición del silencio (Antes / Después) determina si el silencio va antes o después del evento.

18. Relación con la notación musical estándar

Lo que sigue la norma universal

Lo que es decisión de esta app

Tabla comparativa

ConceptoNotación estándarEsta app
ArmaduraExisteNo
Doble sostenido𝄪D (enarmonía)
Accidental de cortesíaPermitidoNo permitido
Ligadura entre compasesPermitidaSoportada
Forma compactaPreferidaSolo al normalizar
Partición automática de eventosManualAutomática
Multiselección no contigua NuevoPosible en editores profesionalesSoportada
Desplazamiento de octava de entrada NuevoN/A (se toca la nota directamente)Soportado (3 estados)
Filtrado por posición NuevoManual (borrar notas a mano)Soportado
Espaciado automático de eventos NuevoManual (insertar silencios a mano)Soportado

19. Pendientes

Estos temas no están implementados en la app.

P1. Armadura de clave Pendiente

No soportada.

P2. Dobles alteraciones Pendiente

No soportadas (𝄪, 𝄫).

P3. Selección individual de notas en acordes Parcial

Con Ctrl+clic se puede alternar la selección de notas individuales, pero el render y algunas transformaciones aún tratan el acorde entero como bloque.

P4. Modo pedagógico Pendiente

No soportado.

P5. Tresillos y otras divisiones Pendiente

La cuantización MIDI redondea a la figura más cercana; no soporta tresillos.

P6. Semilla RNG visible al usuario Pendiente

Los generadores usan una semilla fija (12345), salvo "Barajar fila" y "Fila nueva". La semilla no es visible ni editable.

P7. Pulso con cambios de compás Pendiente

El pulso de reproducción usa un único timeSig (el del primer compás de MI). No respeta cambios de compás dentro de la pieza.

P8. Multiselección con cambio de duración Pendiente

La multiselección no contigua (verde) solo se puede transponer con +/-. No se puede cambiar la duración de las notas multiseleccionadas a la vez.

P9. Sincronización multiselección exacta en la textarea Pendiente

El textarea solo admite selecciones contiguas, así que la multiselección no contigua se marca como rango envolvente en el texto. No hay forma de marcar solo las líneas exactas sin que las intermedias queden también marcadas.

P10. Reordenar o mover bloques de la interfaz Pendiente

Los paneles colapsables están en un orden fijo. No se pueden arrastrar para reordenar.

P11. Atajo de teclado para la octava Pendiente

Los botones 8va ↓ / 8va ↑ solo funcionan con el ratón. No hay atajo de teclado asociado.

P12. Persistencia del desplazamiento de octava Pendiente

El desplazamiento de octava vuelve a 0 al recargar la página. No se guarda en localStorage.

P13. Filtrar posiciones con rango personalizado Pendiente

El generador "Filtrar posiciones" no admite rangos del tipo "2-5" en la lista personalizada. Solo acepta posiciones individuales separadas por comas.

P14. Espaciar eventos con silencios de duración independiente Pendiente

Los silencios que genera "Espaciar eventos" siempre tienen la misma duración que el evento original. No se puede elegir otra duración para el silencio.

P15. Otros pendientes

Se añadirán a medida que surjan.


PARTE III — REFERENCIA TÉCNICA

20. Persistencia y exportación

20.1 JSON del proyecto

{
  "mi": "texto de MI",
  "miii": "texto de MIII"
}

20.2 JSON del proceso generativo

{
  "version": "2.0",
  "process": {
    "iniciador": { "generator": "source.row12", "params": {...}, "manual": "MI", "events": [...] },
    "generador": { "generator": "transform.filterPositions", "source": "iniciador", "params": {...}, "manual": "MIII", "events": [...] },
    "voces": {
      "MI":   { "value": 4, "loop": true },
      "MIII": { "value": 4, "loop": true }
    }
  },
  "texts": { "MI": "...", "MIII": "..." }
}

20.3 MusicXML

20.4 Persistencia en localStorage Nuevo

La app guarda tres claves en localStorage:

ClaveQué guardaValores
em_mode_iniciacion_kidsModo Iniciación"1" = modo Iniciación, "0" = modo avanzado
em_collapse_<id>Estado de cada panel colapsable"1" = abierto, "0" = cerrado
em_collapse_idx_<n>Estado de paneles sin id propioIgual que el anterior, con índice

El editor no guarda automáticamente el contenido de las textareas: para eso hay que pulsar 📤 Exportar JSON. Tampoco se persiste el desplazamiento de octava.

21. Arquitectura interna

21.1 Módulos principales

MóduloResponsabilidad
Parsing (parseNotes, splitIntoMeasures, partirEvento)Texto → eventos → compases.
Herencia (aplicarHerenciaACompas, calcularSonidosEfectivos)Sonido efectivo con herencia.
Unidades (agruparEnBloques, descomponerBeats)Unidades de sonido y figuras estándar.
Render (renderScores)VexFlow + overlays HTML.
Audio (playAudio, playTone, updateVisuals, stopAudio)Síntesis + resaltado + pulso.
Pantalla completa (toggleScoreFullscreen)Alternar fullscreen del área de partitura.
Selección (selectedRange, selectedRangeOther)Selección principal y cruzada.
Multiselección (window.multiNoteSelection) NuevoConjunto no contiguo de líneas multiseleccionadas (verde).
Sincronización (selectLinesInTextarea, positionOverlay) NuevoEnlace textarea ⇄ pentagrama + overlay visual.
Paneles colapsables (details.collapsible-panel) NuevoSistema nativo de plegado + persistencia en localStorage.
Atajo único acordeón NuevoNavegación por los paneles con Alt+↓/↑.
Modo Iniciación + Alt+M NuevoAlternar la visibilidad de las herramientas avanzadas.
Octava de entrada Nuevowindow.__inputOctaveOffset y window.__shiftNote: desplazamiento visual de piano y botones.
Portapapeles de compases (clipboard)Copia interna de compases.
Portapapeles de fragmentos (fragmentClipboard)Copia de notas/silencios contiguos.
Transformaciones clásicasManipulación estructural del texto.
Proceso generativoOrquestación de generadores.
Historial generativoPila de pasos + comparación antes/después.
Matriz dodecafónicaMatriz P/R/I/RI + envío a manual.
Representaciones visuales de MIinitPianoAndAcordeon: piano y botones.
PersistenciaJSON, MusicXML, JSON de proceso y localStorage.
Deshacer/RehacerSnapshots con tope de 100 pasos.

21.2 Estructura de un compás en memoria

[
  {
    type: "note" | "rest",
    duration: "4",
    keys: [{ key: "c/4", accidental: "" }, ...],
    rawLine: "4 C4 E4",
    lineIndex: 3,
    timeSig: "4/4",
    __stableId: "note-mi-7",
    __padding: false,
    tieNext: false,
    tiePrev: true,
    tieOriginIndex: 2
  },
  ...
]

21.3 Estructura del proceso generativo

{
  iniciador: { generator, params, manual, events },
  generador: { generator, source, params, manual, events },
  voces: {
    MI:   { value, loop, preservePosition },
    MIII: { value, loop, preservePosition }
  }
}

21.4 Estructura del historial generativo

history = [
  {
    label: "Iniciador «Serie dodecafónica» → MI",
    before: { mi: "...", miii: "..." },
    after:  { mi: "...", miii: "..." }
  },
  ...
]

21.5 Estructura de la matriz dodecafónica

M[i][j] = (p[j] + p[0] - p[i]) mod 12

donde p = [pc_0, pc_1, ..., pc_11]  son las 12 pitch classes de la fila,
      todas en el rango 0..11.

Fila 0     = P original (P0)
Columna 0  = I original (I0)
Diagonal   = p[i] (pitch class de la fila en posición i)

21.6 Las dos representaciones visuales de MI

La función initPianoAndAcordeon() construye ambas representaciones:

21.7 Sincronización textarea ⇄ pentagrama Nuevo

La sincronización se apoya en tres piezas:

El color del resaltado en el pentagrama (cuando se selecciona texto en la textarea) es violeta (.nota-desde-textarea).

21.8 Paneles colapsables Nuevo

Los paneles se implementan con el elemento nativo <details>:

<details class="collapsible-panel" id="panelX" open>
  <summary>Título del panel</summary>
  <div class="collapsible-content">...</div>
</details>

21.9 Atajo único acordeón Nuevo

Un módulo escucha keydown en fase de captura y gestiona Alt+↓, Alt+↑, Alt+Enter y Alt+Shift+Q. Mantiene un índice current que apunta al panel enfocado. Al abrir un panel:

  1. Se cierran todos los demás (openOnly).
  2. Se pinta el foco naranja (.kb-focused).
  3. Se hace scroll hasta el panel con scrollIntoView.

Un listener de click sobre summary resincroniza el índice cuando el usuario abre un panel con el ratón. Alt+Shift+Q actúa como toggle: si hay algún panel abierto los cierra todos; si están todos cerrados los abre todos.

21.10 Modo Iniciación + Alt+M Nuevo

El modo se gestiona con la clase mode-iniciacion en el <body>:

Un listener global escucha Alt+M en fase de captura. Antes de actuar, comprueba que el foco no esté en <textarea> ni <input>, para no interferir con la escritura.

21.11 Octava de entrada Nuevo

Se gestiona con una variable global window.__inputOctaveOffset (valores: −1, 0, +1) y una función window.__shiftNote(noteName) que devuelve el nombre de nota desplazado en octavas. Al pulsar 8va ↓ o 8va ↑:

  1. Se comprueba el límite (±1).
  2. Se actualiza window.__inputOctaveOffset.
  3. Se llama a applyOffset(), que:

La entrada MIDI no consulta __shiftNote: las notas del puerto MIDI se insertan tal cual.

21.12 Filtrar posiciones Nuevo

El generador transform.filterPositions recorre el array de eventos de la fuente y construye un Set con las posiciones a conservar (1-based). Parámetros:

pattern: "odd" | "even" | "everyN" | "customList"
n: entero 2–12 (solo para everyN)
customList: array de enteros (solo para customList)
keepRests: "false" | "true"

Si keepRests = "false", los eventos de tipo rest se descartan aunque caigan en posición válida. El resultado se escribe en el manual Destino.

21.13 Espaciar eventos Nuevo

El generador transform.spaceEvents expande cada evento en N slots del mismo duration que el evento. Parámetros:

slots: entero 2–8 (forzado a mínimo 2 y máximo 8)
position: "after" | "before"

Para cada evento se emiten los silencios correspondientes (N-1) y el evento limpio:

21.14 Gestión del foco en el teclado

handleMuseScoreKeyDown comprueba el elemento activo antes de interceptar teclas. Solo Ctrl+Z, Ctrl+Y, Ctrl+Shift+Z, Esc y Alt+M se interceptan de forma incondicional. Los atajos de paneles usan Alt combinado con otras teclas, que no interfiere con la escritura.

22. Índice rápido de funciones JS

FunciónPropósito
parseNoteToken"C#4" → {letter, accidental, octave, semis}.
midiNumberToNoteName / …WithContextMIDI → nombre.
parseNotesTexto → eventos.
splitIntoMeasuresEventos → compases. Usa partirEvento.
partirEventoParte un evento que no cabe entero en un compás.
makePaddingRestsSilencios de relleno.
aplicarHerenciaACompasAplica herencia de compás y ligadura.
calcularSonidosEfectivosLista de sonidos efectivos del compás.
sonidoEfectivoDelUltimoTokenSonido efectivo del último token del compás.
agruparEnBloquesAgrupa items ligados consecutivos.
descomponerBeatsDescompone una duración en figuras estándar.
revalidarLigadurasElimina ligaduras rotas tras una transformación.
renderScoresDibuja todo.
renderSelectionOverlayPinta selección principal (azul) y cruzada (violeta).
setNoteHighlightPinta / restaura una nota.
playAudio / stopAudio / togglePlaybackReproducción, parada y alternancia. Incluye el pulso si el checkbox está activo.
toggleScoreFullscreenAlterna pantalla completa del área de partitura.
executeRetrograde / executeInvertTransformaciones clásicas.
transposeSelectedMeasures / transposeSelectedNoteTransposición.
transposeMultiSelection NuevoTranspone las notas multiseleccionadas (verde).
transposeFragment NuevoTranspone las notas del fragmento (naranja).
handleMeasureClick / handleNoteClickSelección.
copySelectionToOtherManualBotón "Aplicar a ambos manuales".
copySelectedMeasures / pasteIntoSelectedMeasuresPortapapeles interno de compases.
fragCopyCopia el fragmento seleccionado.
fragPasteInsert / fragPasteReplacePegar fragmento insertando / sustituyendo.
fragSetSelection / fragClearSelection / fragHasSelection / fragCanCopyGestión de selección de fragmento.
fragHighlight / fragNavigate / fragEnsureMeasuresExistResaltado, navegación y materialización de compases.
fragGetTargetMeasureInfo / fragUpdateUIDestino y refresco del inspector.
updateInsGroupVisibilityOculta grupos del Inspector sin botones visibles.
changeDurationOnSelectionCambia duración con preservación opcional de posición.
toggleDotOnSelectedNoteAlterna puntillo.
makeRngPRNG determinista (mulberry32).
shuffleArrayBaraja un array (Fisher-Yates) con un RNG.
generateRandomRowGenera una fila dodecafónica aleatoria.
shuffleCurrentRow / newRandomRowBotones 🎲 Barajar fila / Fila nueva.
runIniciadorEjecuta el generador fuente y escribe el resultado.
runGeneradorEjecuta un generador de transformación.
applyVozValueAplica valor, puntillo y compás a un manual con preservación de posición.
realignVoicesByMCMRepite el material de cada manual hasta el MCM de beats.
saveProcess / loadProcess / onProcessFileSelectedGuardar / cargar proceso generativo.
GENERATORSCatálogo: source.* y transform.*.
registrarPaso / volverAPaso / renderHistoryHistorial de pasos del proceso generativo.
mostrarComparacion / nombresNotas / resumenComparación antes/después de los textareas.
construirMatrizConstruye la matriz P/R/I/RI de una fila dodecafónica.
serieDe / pcDeKeyExtrae las pitch classes de un manual.
enviarFormaEscribe una forma (P/R/I/RI) en un manual.
initPianoAndAcordeonConstruye el piano (manual de teclas) y conecta los botones (manual de botones).
addManualNoteFunción interna de initPianoAndAcordeon: inserta una nota en el manual activo con la duración activa.
selectLinesInTextarea NuevoSelecciona un rango de líneas en la textarea.
positionOverlay NuevoColoca el overlay visual sobre las líneas seleccionadas.
getExactLineHeight NuevoObtiene el line-height real del textarea (con medición por div espejo si el CSS no lo declara).
refreshFromTextarea NuevoRefresca el resaltado del SVG cuando cambia la selección de la textarea.
applySvgHighlight NuevoAplica la clase .nota-desde-textarea a las notas del SVG.
multiselHighlight / multiselClear NuevoGestión del resaltado verde de la multiselección no contigua.
Listener de keydown (Alt+↓/↑/Enter/Shift+Q) NuevoAtajo único acordeón de los paneles. Alt+Shift+Q actúa como toggle.
Listener de toggle en details NuevoPersistencia del estado de los paneles en localStorage.
applyMode / toggleMode (módulo Iniciación) NuevoActiva o desactiva el modo Iniciación; también se puede invocar con Alt+M.
window.__shiftNote NuevoDesplaza un nombre de nota en octavas según __inputOctaveOffset.
applyOffset / refreshAccordionButtons / refreshPiano NuevoReconstruyen el piano y los botones al cambiar de octava.
undo / redoHistorial global.
toggleMetronomeClaqueta + grabación MIDI.
handleMIDIMessageEntrada MIDI.
handleMuseScoreKeyDownAtajos de teclado (respeta foco).
exportJSON / importJSON / exportMusicXMLPersistencia.

23. Limitaciones conocidas


PARTE IV — PROCESO GENERATIVO

El proceso generativo reúne bloques que permiten crear materiales, transformarlos y ajustar su organización temporal. Según lo que se quiera explorar, el usuario puede aplicar uno o varios bloques, encadenar operaciones o detenerse en cualquier punto. El ajuste a un ciclo común mediante el MCM es una posibilidad de trabajo, no el objetivo obligatorio de todo proceso.

24. Concepto: Iniciador → Generador → Voz

Esta secuencia describe una organización posible del trabajo con materiales: partir de una fuente, transformarla y ajustar su realización temporal. No es un proceso automático que tenga que completarse siempre de principio a fin. El usuario decide qué material utilizar, qué operación aplicar, dónde escribir el resultado y cuándo detenerse, volver atrás o iniciar otra exploración. La escucha, la observación y la comparación orientan esas decisiones.

24.1 Los tres bloques originales

BloqueRolEntradaSalida
1. IniciadorProducir material desde cero.Parámetros del generador fuente.Un array de eventos que se escribe en un manual.
2. GeneradorTransformar material existente.Material del Iniciador, del texto de un manual, o del generador anterior.Un array de eventos transformado que se escribe en un manual.
3. VozDefinir la realización temporal.Manuales MI y MIII (texto real).Duración uniforme, repetición hasta ciclo MCM, preservación de posición, puntillo y compás forzados.

24.2 Los dos bloques nuevos

BloqueRolEntradaSalida
4. Historial y comparaciónRevisar y revertir los pasos aplicados en los bloques 1–3, 5.Cada clic en Aplicar/Realinear/Enviar.Pila de pasos con etiqueta, comparación antes/después y botón «↶ Volver».
5. Matriz dodecafónicaRecorrer las formas P/R/I/RI de una fila dodecafónica.Fila de 12 pitch classes extraída de un manual.Tabla clicable que envía la forma elegida a un manual.

24.3 Diagrama de flujo actualizado

┌─────────────────────┐
│  1. INICIADOR       │
│  source.row12       │
│  source.row         │
│  source.serieA      │
│  source.serieB      │
│  source.serieC      │
│  source.intervals   │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  2. GENERADOR       │
│  transform.retro    │
│  transform.invers   │
│  transform.transp   │
│  transform.filter   │◄── nuevo
│  transform.space    │◄── nuevo
│  transform.fuse     │◄── lee MI y MIII directamente
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  3. VOZ             │
│  valor por manual   │
│  puntillo           │
│  compás             │
│  bucle hasta MCM    │
│  preservar posición │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  4. HISTORIAL       │
│  registro de pasos  │
│  comparación        │
│  «↶ Volver»         │
└─────────────────────┘

┌─────────────────────┐
│  5. MATRIZ          │
│  P / R / I / RI     │
│  envío a manual     │
└─────────────────────┘

25. Bloque Iniciador

El Iniciador crea un material de partida a partir de los parámetros elegidos por el usuario. Ese material puede servir como punto inicial de una exploración o como fuente para una transformación posterior; no constituye por sí mismo una composición terminada.

Al pulsar Aplicar iniciador:

  1. Se hace un snapshot de undo.
  2. Se leen los parámetros del generador seleccionado.
  3. Se ejecuta el generador.
  4. El resultado se serializa a texto y se escribe en el manual elegido.
  5. Se renderiza la partitura.
  6. Se guarda el material internamente para que el Generador pueda usarlo como fuente.
  7. Se registra el paso en el historial (§31).
Ojo: aplicar un Iniciador crea un proceso nuevo. Si ya había un Generador aplicado, se pierde.

25.1 Controles

ControlValoresEfecto
Tiposource.row12, source.row, source.serieA, source.serieB, source.serieC, source.intervalsAl cambiar, los parámetros se reconstruyen.
ParámetrosDinámicosDependen del generador.
ManualMI / MIIIDónde se escribe el resultado.
Aplicar iniciadorBotónEjecuta y escribe.
Limpiar manualBotónVacía el manual elegido (con undo).
EstadoTextoMuestra el número de eventos escritos o el error.

25.2 source.row12 — Serie dodecafónica (fila dada)

25.3 source.row — Fila dada (cualquier longitud)

Igual que source.row12, pero admite cualquier número de notas.

25.3a source.serieA — Serie A (12 notas · fusas) Nuevo

Serie de 12 notas predefinida, pensada para escribir con fusas. Es un caso particular de source.row12 con los parámetros ya rellenos.

ParámetroValor por defecto
Notas (12)B4 Bb4 F#4 G4 A4 G#4 D4 C#5 C5 F4 E4 D#5
Valor32 (Fusa)

El usuario puede editar la lista de notas y el valor antes de pulsar Aplicar iniciador.

25.3b source.serieB — Serie B (7 notas · semicorcheas) Nuevo

Serie de 7 notas predefinida, pensada para escribir con semicorcheas. Es un caso particular de source.row con los parámetros ya rellenos.

ParámetroValor por defecto
Notas (7)D#4 F4 C#5 G#4 G4 B4 A4
Valor16 (Semicorchea)

El usuario puede editar la lista de notas y el valor antes de pulsar Aplicar iniciador.

25.3c source.serieC — Serie C (12 notas) Nuevo

Serie dodecafónica de 12 alturas distintas, predefinida. Como todas las series, el usuario puede editar las notas y el valor antes de aplicar.

ParámetroValor por defecto
Notas (12)F#5 C5 D5 F5 Eb5 C#5 E5 B4 Bb4 G4 A4 G#4
Valor4 (Negra)
Las tres series (serieA, serieB, serieC) son opcionales: aparecen como opciones adicionales en el desplegable Tipo del bloque Iniciador, junto a las ya existentes. Si el usuario no las usa, no le afectan.

25.4 source.intervals — Por intervalos

ParámetroTipoPor defectoDescripción
startNotenotaC4Nota inicial.
endNotenotaC5Nota objetivo.
intervalsarray de enteros ≠ 01, 3Semitonos permitidos. Los valores negativos invierten el sentido del paso (bajar en modo Ascendente, subir en modo Descendente). El 0 se descarta automáticamente.
modeenummixedasc, desc, mixed.
maxNotesentero12Número máximo de notas.
valueenum4Valor.

El intervalo se elige recorriendo la lista en ciclo: con la lista [1, 3, -1] el resultado es +1, +3, −1, +1, +3, −1…. La dirección del movimiento (subir o bajar) la decide el desplegable Modo. En mixed se sortea en cada paso con semilla fija 12345.

26. Bloque Generador

El Generador aplica una operación al material de la fuente seleccionada. La elección de la fuente, de los parámetros y del destino permite probar distintas relaciones y variantes. El resultado puede escucharse y observarse antes de decidir si se utiliza como nueva fuente, si se compara con el original o si se descarta.

26.1 Controles

ControlValoresEfecto
Tipotransform.*Al cambiar, los parámetros se reconstruyen.
Fuenteiniciador, texto-MI, texto-MIII, generadorDe dónde tomar el material.
ParámetrosDinámicosDependen del generador.
DestinoMI / MIIIDónde se escribe el resultado.
Aplicar generadorBotónEjecuta y escribe. Registra el paso.
EstadoTextoMuestra el resultado o el error.

26.2 Fuentes disponibles

FuenteQué leeCuándo usarla
IniciadorEl array de eventos generado por el último Iniciador aplicado.Caso normal: Iniciador → Generador.
Texto actual de MIEl textarea de MI tal cual está ahora.Para transformar material escrito a mano.
Texto actual de MIIIEl textarea de MIII tal cual está ahora.Para transformar material escrito a mano en MIII.
Generador anteriorEl array de eventos del último Generador aplicado.Para encadenar generadores: G1 → G2.

26.3 transform.retrograde — Retrogradar (R)

Invierte el orden temporal del material. Corta las ligaduras exteriores.

26.4 transform.inversion — Invertir (I)

26.5 transform.transpose — Transponer

26.6 transform.fuseManuals — Fusionar MI (tonal) + MIII (rítmica)

Este generador ignora la Fuente seleccionada y lee siempre los textareas de MI y MIII directamente.

Se detalla en §29.

26.7 transform.filterPositions — Filtrar posiciones Nuevo

Conserva solo los eventos del material de entrada que caen en ciertas posiciones (impar, par, cada N, lista personalizada). Sí usa la Fuente seleccionada. Se detalla en §29bis.

26.8 transform.spaceEvents — Espaciar eventos Nuevo

Intercala silencios alrededor de cada evento para separarlo en el tiempo. Sí usa la Fuente seleccionada. Se detalla en §29ter.

27. Bloque Voz (valor, puntillo y compás)

El bloque Voz permite explorar la realización temporal del material ya escrito. No transforma alturas. «Aplicar valor» cambia duraciones; «Completar ciclo» repite un manual hasta una barra; «Realinear» puede repetir ambos manuales hasta que coincidan. La casilla MCM solo controla esta última acción. Estos ajustes permiten comprobar cómo cambia el resultado musical al modificar su organización temporal, sin alterar necesariamente el material de alturas.

27.1 Controles

ControlValoresEfecto
ManualMI / MIIIManual sobre el que actuar.
Valor1 / 2 / 4 / 8 / 16Duración a aplicar a todos los eventos.
Puntillokeep / yes / noMantener el puntillo original, forzarlo, o quitarlo. Por defecto: keep.
Compáskeep / 4/4 / 3/4 / 2/4 / 5/4 / 6/8 / 7/8Mantener el compás del material, o forzarlo. Por defecto: keep.
Repetir las dos voces hasta su MCMcheckboxActiva la repetición de ambas voces al usar «Realinear ambas voces»; no afecta a «Aplicar valor» ni a «Completar ciclo en este manual».
Preservar posición temporalcheckboxInserta silencios explícitos al acortar.
Aplicar valor a este manualBotónCambia la duración, el puntillo y el compás del manual. Registra el paso.
Completar ciclo en este manual (MCM)BotónRepite solo el manual elegido hasta que su duración complete un número entero de compases. Conserva el compás y registra el paso.
Realinear ambas vocesBotónRepite el material de ambos manuales hasta el MCM. Registra el paso.

27.2 Aplicar valor a un manual

Al pulsar Aplicar valor a este manual:

  1. Se leen los eventos del manual.
  2. Se divide en compases según el compás elegido (o el del material).
  3. Para cada evento:
  4. Si el último compás queda incompleto, se rellena con silencios.

27.3 Realineación por MCM

Cuando MI y MIII tienen distinta longitud en beats, Realinear ambas voces repite el material de cada manual las veces necesarias para que ambos ciclos coincidan.

  1. Calcula los beats totales de MI y MIII.
  2. Calcula el MCM.
  3. Para cada manual: repeticiones = MCM / beats_del_manual.
  4. Si loop = false, no se repite.

27.4 Completar el ciclo de un solo manual

Completar ciclo en este manual (MCM) compara la duración de la serie del manual seleccionado con la duración del compás elegido. Repite la serie el menor número de veces para que termine en un límite de compás. No modifica el otro manual ni cambia el compás seleccionado.

  1. Selecciona el manual (MI o MIII) y el compás.
  2. Pulsa Completar ciclo en este manual (MCM).
  3. La app indica el número de repeticiones y compases. El cambio se puede deshacer.
Ejemplo — 7 negras en MI con compás 4/4

La serie dura 7 tiempos y cada compás dura 4. El MCM es 28, así que se repite 4 veces: 28 negras en 7 compases de 4/4.

27.5 Ejemplos

Ejemplo 27.4.a — Cambio de valor sin preservar posición
Entrada en MI
4 C4
4 D4
4 E4
4 F4
Acción: Valor = 8 (corchea), Preservar posición = OFF
Resultado
8 C4
8 D4
8 E4
8 F4
4 rest
Ejemplo 27.4.b — Cambio de valor preservando posición
Entrada en MI
4 C4
4 D4
4 E4
4 F4
Acción: Valor = 8 (corchea), Preservar posición = ON
Resultado
8 C4
8 rest
8 D4
8 rest
8 E4
8 rest
8 F4
8 rest
Ejemplo 27.4.c — Puntillo forzado
Entrada en MI
4 C4
4 D4
4 E4
Acción: Valor = 4, Puntillo = "Con puntillo", Preservar posición = OFF
Resultado
4. C4
4. D4
4. E4
4. rest
Ejemplo 27.4.d — Compás forzado a 3/4
Entrada en MI
4 C4
4 D4
4 E4
4 F4
4 G4
4 A4
Acción: Valor = 4, Compás = "3/4"
Resultado
time 3/4
4 C4
4 D4
4 E4
4 F4
4 G4
4 A4

28. Aleatorización de filas

Cuando el Iniciador es source.row12 o source.row, aparecen dos botones extra bajo los parámetros.

28.1 🎲 Barajar fila

Reordena aleatoriamente las notas que ya están en el campo Fila (Fisher-Yates).

28.2 🎲 Fila nueva

Reemplaza el campo Fila por una fila dodecafónica nueva: las 12 pitch classes en orden aleatorio, todas en la octava 4.

29. Fusión MI (tonal) + MIII (rítmica)

El generador transform.fuseManuals cruza dos materiales independientes:

Este generador ignora la Fuente. Lee siempre los textareas de MI y MIII.

29.1 Algoritmo

  1. Lee MI y MIII.
  2. Filtra MI a notas.
  3. Filtra MIII a notas y silencios (o solo notas si ignoreRests = true).
  4. Aplica la dirección rítmica (direct / retrograde / shuffle).
  5. Para cada paso i:

29.2 Parámetros

ParámetroValoresEfecto
rhythmDirdirect / retrograde / shuffleDirección de la serie rítmica.
modecyclic / truncateRepetir o cortar la serie rítmica.
ignoreRestsfalse / trueOmitir silencios de la serie rítmica.

29.3 Ejemplos

Ejemplo 29.3.a — Fusión básica
MI (tonal, 4 notas)
4 C4
4 D4
4 E4
4 F4
MIII (rítmica)
8 rest
8 rest
2 rest
4 rest
Acción: Fusionar, direct, cyclic, ignoreRests = false, Destino = MI
Resultado en MI
8 C4
8 D4
2 E4
4 F4
Ejemplo 29.3.b — Serie rítmica más corta (cyclic)
Entrada
MI (tonal, 8 notas)
4 C4
4 D4
4 E4
4 F4
4 G4
4 A4
4 B4
4 C5
MIII (rítmica, 3 eventos)
4 rest
8 rest
2 rest
Resultado en MI
4 C4
8 D4
2 E4
4 F4
8 G4
2 A4
4 B4
8 C5
Ejemplo 29.3.c — Modo truncate
Acción: mode = truncate
Resultado en MI
4 C4
8 D4
2 E4
Ejemplo 29.3.d — Retrogradación rítmica
Entrada (MI: C4 D4 E4 F4 / MIII: 8 4 2 4)
Acción: rhythmDir = retrograde
Resultado en MI
4 C4
2 D4
4 E4
8 F4
Ejemplo 29.3.e — Con silencios incluidos
Entrada (MI: C4 D4 E4 F4 / MIII: 8 8 4 4)
Acción: ignoreRests = false
Resultado en MI
8 C4
8 rest
4 D4
4 E4
Ejemplo 29.3.f — Ignorando silencios
Acción: ignoreRests = true
Resultado en MI
8 C4
4 D4
4 E4
8 F4

29bis. Filtrar posiciones (transform.filterPositions) Nuevo

El generador transform.filterPositions recorre el material de entrada evento a evento (una nota o un silencio = un evento) y conserva solo los que caen en ciertas posiciones. Los demás se descartan. Es un "tamiz" posicional.

Este generador sí usa la Fuente seleccionada (Iniciador, texto de MI o MIII, o generador anterior). Escribe el resultado en el manual de Destino. El material de entrada no se modifica.

29bis.1 Parámetros

ParámetroValoresEfecto
PatrónImpar (1, 3, 5, 7…)Conserva los eventos en posición 1, 3, 5, 7…
Par (2, 4, 6, 8…)Conserva los eventos en posición 2, 4, 6, 8…
Cada NConserva 1, 1+N, 1+2N, 1+3N…
Lista personalizadaConserva las posiciones escritas a mano (separadas por comas).
N (para cada N)2 a 12Solo se usa si el Patrón es Cada N. Por defecto: 3.
Lista (ej. 1,3,5)Números separados por comasSolo se usa si el Patrón es Lista personalizada. Por defecto: 1,3,5.
Conservar silenciosNo / SíSi es No, los silencios que caigan en posición válida también se descartan. Si es Sí, se mantienen.

29bis.2 Ejemplo 1 — Patrón «Impar»

Iniciador: Fila dada con C4 D4 E4 F4 G4 A4 B4 C5 (8 notas, negras).

Generador: Filtrar posiciones → Fuente: Iniciador → Destino: MIII → Patrón: Impar.

Resultado en MIII:
4 C4
4 E4
4 G4
4 B4

En el log: 🔎 filterPositions: 8 eventos → 4 (patrón odd).

29bis.3 Ejemplo 2 — Patrón «Cada N = 3»

Mismo material. Patrón Cada N, N = 3.

Resultado en MIII:
4 C4
4 F4

En el log: 🔎 filterPositions: 8 eventos → 2 (patrón everyN, N=3).

29bis.4 Ejemplo 3 — Patrón «Lista personalizada»

Lista: 2, 5, 7.

Resultado en MIII:
4 D4
4 A4
4 B4

En el log: 🔎 filterPositions: 8 eventos → 3 (patrón customList, lista=2,5,7).

29bis.5 Ejemplo 4 — Con silencios

Entrada con silencios intercalados (6 eventos):

4 C4
4 rest
4 E4
4 rest
4 G4
4 rest

Con Patrón Impar y Conservar silencios = No:

4 C4
4 E4
4 G4

Con Patrón Impar y Conservar silencios = Sí:

4 C4
4 rest
4 E4
4 rest
4 G4
4 rest

29bis.6 Ejemplo 5 — Combinado con otro generador

  1. Iniciador: fila de 12 notas → MI.
  2. Generador 1: Filtrar posiciones, Patrón Par, Destino MIII. → 6 notas.
  3. Generador 2: Fuente Generador anterior, Retrogradar, Destino MIII.

Resultado: subconjunto par de la serie, retrogradado.

29bis.7 Comportamiento en casos límite

CasoQué pasa
Entrada vacíaError: El material de entrada está vacío.
Lista personalizada vacía o con números < 1Error: El patrón no definió ninguna posición.
El filtro deja 0 eventosError: El filtro dejó el material vacío. (no se escribe nada)
Posiciones mayores que el nº de eventosSe ignoran silenciosamente. Si todas caen fuera → error "material vacío".
Notas con ligaduras (~)La ligadura se rompe si su nota destino se descarta. El editor elimina el ~ de la nota origen.

29ter. Espaciar eventos (transform.spaceEvents) Nuevo

El generador transform.spaceEvents toma cada evento del material de entrada y lo expande en N "slots", donde cada slot tiene la misma duración que el evento original. Los slots que no ocupa el evento se rellenan con silencios.

Este generador sí usa la Fuente seleccionada. El material de entrada no se modifica: solo se escribe el resultado expandido en el manual de Destino.

29ter.1 Parámetros

ParámetroValoresEfecto
Slots por evento2 a 8Cada evento ocupa N casillas. N=2 → nota + 1 silencio. N=3 → nota + 2 silencios. Etc. Por defecto: 2.
Posición del silencioDespués (nota → silencios)El evento va primero, luego los silencios.
Antes (silencios → nota)Primero los silencios, luego el evento.

29ter.2 Ejemplo 1 — Slots=2, silencio después

Iniciador: Fila dada con C4 D4 E4 F4 (4 negras).

Generador: Espaciar eventos → Slots: 2 → Posición: Después.

Resultado en el manual destino:
4 C4
4 rest
4 D4
4 rest
4 E4
4 rest
4 F4
4 rest

En el log: ↔️ spaceEvents: 4 eventos → 8 (slots=2, silencio after).

29ter.3 Ejemplo 2 — Slots=2, silencio antes

Mismo material, Posición Antes:

4 rest
4 C4
4 rest
4 D4
4 rest
4 E4
4 rest
4 F4

29ter.4 Ejemplo 3 — Slots=3

Posición Después, Slots = 3 (2 silencios por evento):

4 C4
4 rest
4 rest
4 D4
4 rest
4 rest
4 E4
4 rest
4 rest
4 F4
4 rest
4 rest

29ter.5 Ejemplo 4 — Con material rítmico variado

Si la entrada tiene duraciones distintas, cada evento genera silencios de su propia duración.

Entrada:

2 C4
4 D4
8 E4

Slots=2, Después:

2 C4
2 rest
4 D4
4 rest
8 E4
8 rest

La blanca genera un silencio de blanca, la negra un silencio de negra, la corchea uno de corchea.

29ter.6 Ejemplo 5 — Con tuplets

Entrada con tresillo:

t3:2 8 C4
8 D4
8 E4

Slots=2, Después:

8 C4
8 rest
8 D4
8 rest
8 E4
8 rest

Los silencios salen como corcheas normales (no forman parte del tresillo). El generador rompe el tuplet intencionadamente: la expansión no conserva la agrupación.

29ter.7 Ejemplo 6 — Con ligaduras

Entrada con ligadura:

4 C4 ~
4 C4
4 D4

Slots=2, Después:

4 C4
4 rest
4 C4
4 rest
4 D4
4 rest

La ligadura se elimina explícitamente. Si no se hiciera, al insertar silencios la segunda C4 dejaría de ser continuación de la primera y la ligadura quedaría colgando.

29ter.8 Ejemplo 7 — Combinado con filtro

  1. Iniciador: 8 notas.
  2. Generador 1: Filtrar posiciones, Patrón Par → 4 notas.
  3. Generador 2: Fuente Generador anterior, Espaciar eventos, Slots 3, Antes.

Resultado: 4 notas, cada una precedida de 2 silencios de su misma duración.

29ter.9 Comportamiento en casos límite

CasoQué pasa
Entrada vacíaError: El material de entrada está vacío.
Slots < 2Se fuerza a 2 (mínimo).
Slots > 8Se fuerza a 8 (máximo).
Nota con ligadura entranteLa ligadura se rompe en la nota original.
Tuplet (t3:2 8 C4)Los silencios se generan con la duración real (corchea), no como tuplet.
Duración con puntillo (4.)El silencio se genera con la misma duración (4. rest).

29quater. Diferencias entre los dos nuevos generadores

AspectoFiltrar posicionesEspaciar eventos
EfectoDescarta eventosInserta silencios
Nº de eventosSe reduce o igualSe multiplica por N
Cambia duraciónNoNo (los silencios heredan la duración)
Rompe ligadurasSí, si el destino desapareceSí, siempre
Preserva tupletsNo (los eventos sueltos pierden el grupo)No (los silencios son figuras normales)
Preserva ordenSíSí
Acepta silenciosConfigurable (checkbox)Sí (los trata como un evento más)

29quater.1 Recetas combinadas

Receta A — Serie con huecos regulares

  1. Iniciador: Serie dodecafónica, Valor Negra (4), Destino MI.
  2. Generador: Espaciar eventos → Fuente Iniciador → Destino MIII → Slots 2, Después.
  3. Voz: Manual MIII, Valor Negra, Preservar posición activado.

Resultado: 12 notas en MI, 12 notas + 12 silencios en MIII.

Receta B — Subconjunto con acentos

  1. Iniciador: serie dodecafónica.
  2. Generador 1: Filtrar posiciones → Patrón Impar → 6 notas.
  3. Generador 2: fuente Generador anterior, Espaciar eventos → Slots 2, Después.
  4. Voz: aplicar Valor Negra a MIII.

Resultado: 6 notas + 6 silencios, alternando.

Receta C — Canon rítmico

  1. Iniciador → MI.
  2. Generador 1 (destino MIII): Filtrar posiciones → Patrón Cada N = 3.
  3. Generador 2 (destino MIII): fuente Texto actual de MIII, Espaciar eventos → Slots 3, Antes.
  4. Matriz dodecafónica: usar MI como serie base y enviar formas a MIII.

Resultado: dos voces que dialogan con materiales derivados del mismo origen.

28quater. Reparto automático de una serie entre MI y MIII Nuevo

Esta herramienta toma las notas escritas en un manual y las distribuye entre MI y MIII en bloques alternos. Sirve para espacializar una serie generada o escrita previamente, manteniendo su secuencia temporal.

28quater.1 Opciones

Pulsa Repartir entre manuales. El contenido anterior de ambos manuales se sustituye por el resultado; ↶ Deshacer restaura el estado previo.

Nota sobre el historial: esta operación sí se puede deshacer mediante el sistema general de deshacer, pero no se incorpora al bloque «Historial y comparación» del panel generativo. Por tanto, no aparece allí como un paso registrado ni genera una comparación antes/después.

28quater.2 Qué conserva

Se conservan el orden, la duración de cada evento, los cambios de compás y las ligaduras válidas. Cada nota y sus continuaciones ligadas quedan en el mismo manual. Los silencios de la serie de partida se escriben en ambos manuales, de modo que mantienen su posición temporal. Los acordes cuentan como un evento para el reparto.

28quater.3 Ejemplo

Con esta serie en MI, el tamaño de bloque 1 y «Empieza en MI»:

4 C4
8 D4
4. E4
4 F4

MI conserva C4 y E4; MIII recibe D4 y F4. En las posiciones asignadas al otro manual se insertan silencios de la misma duración:

MI:                 MIII:
4 C4                4 rest
8 rest              8 D4
4. E4               4. rest
4 rest              4 F4

La duración total y el instante de cada nota se mantienen, aunque la distribución gráfica y sonora pasa a alternar entre manuales.

30. Guardar y cargar proceso

30.1 Estructura del JSON

{
  "version": "2.0",
  "process": {
    "iniciador": { "generator": "source.row12", "params": {...}, "manual": "MI", "events": [...] },
    "generador": { "generator": "transform.inversion", "source": "iniciador", "params": {...}, "manual": "MIII", "events": [...] },
    "voces": {
      "MI":   { "value": 4, "loop": true, "preservePosition": true },
      "MIII": { "value": 4, "loop": true, "preservePosition": true }
    }
  },
  "texts": { "MI": "...", "MIII": "..." }
}

30.2 Al guardar

  1. Se serializa genProcess.
  2. Se añaden los textos actuales.
  3. Se descarga como proceso_generativo.json.

30.3 Al cargar

  1. Snapshot de undo.
  2. Se restauran los textos.
  3. Se restauran los selectores y sus parámetros.
  4. Se renderiza.

31. Historial y comparación

El bloque 4. Historial y comparación registra cada paso aplicado en el panel generativo y permite volver a un estado anterior. Además de servir para deshacer, facilita revisar el recorrido seguido y comparar cómo ha evolucionado el material entre operaciones.

31.1 Qué se registra

Se registra un paso cada vez que se pulsa uno de estos botones:

31.2 Etiqueta del paso

31.3 Comparación antes/después

Al registrar un paso, se muestra bajo la lista una comparación entre los dos estados de cada manual que cambió:

MI
antes:   C4 D4 E4 F4
después: C4 D4 E4 F4 G4

MIII
antes:   (vacío)
después: C3 D3 E3 F3

31.4 Botón «↶ Volver»

Cada paso tiene un botón ↶ Volver que:

  1. Hace un snapshot de undo (puedes deshacer con Ctrl+Z).
  2. Restaura los dos textareas al estado anterior a ese paso.
  3. Descarta el paso y todos los posteriores.

31.5 Relación con el Ctrl+Z general

El historial del panel y el Ctrl+Z del editor son mecanismos independientes. Pulsar «↶ Volver» sí hace un snapshot, así que puedes deshacerlo con Ctrl+Z.

31.6 Persistencia

El historial vive en memoria (history[]). Se pierde al recargar la página. No se guarda en el JSON del proceso.

32. Matriz dodecafónica

El bloque 5. Matriz dodecafónica construye la matriz clásica P/R/I/RI de una fila dodecafónica y permite enviar cualquier forma a un manual.

32.1 Concepto

Dada una fila dodecafónica (las 12 pitch classes en un orden determinado), se definen cuatro formas:

FormaNombreDefinición
PPrima (original)La fila tal cual.
RRetrogradaciónLa fila leída de atrás hacia delante.
IInversiónLa fila reflejada en intervalos (mismo intervalo, sentido contrario).
RIRetrogradación de la inversiónLa inversión leída de atrás hacia delante.

32.2 Algoritmo

M[i][j] = (p[j] + p[0] − p[i]) mod 12

donde p = [pc_0, pc_1, …, pc_11] son las 12 pitch classes de la fila,
      todas en el rango 0..11.

32.3 Interfaz

ControlValoresEfecto
Serie deMI / MIIIDe qué manual se extrae la fila.
Enviar aMI / MIIIA qué manual se envía la forma elegida.
Valor1 / 2 / 4 / 8 / 16Duración que se asigna a cada nota de la forma.
Generar matrizBotónConstruye la tabla.

32.4 Tabla

La tabla muestra 12 filas y 12 columnas, con cuatro bandas de etiquetas clicables:

La diagonal principal aparece resaltada en naranja.

Los números n de las etiquetas indican la pitch class con la que empieza la forma (0 = C, 1 = C#, 2 = D, …, 11 = B).

32.5 Envío de una forma

  1. Se hace un snapshot de undo.
  2. Se escribe el manual destino con una nota por línea, con la forma elegida y el valor seleccionado (todas en octava 4).
  3. Se renderiza la partitura.
  4. Se registra el paso en el historial (§31).
  5. Se muestra el mensaje ✅ P5 enviada a MIII.

32.6 Ejemplo

Entrada en MI (fila dodecafónica por defecto):

4 C4 C#4 D4 D#4 E4 F4 F#4 G4 G#4 A4 A#4 B4
  1. Serie de = MI, Enviar a = MIII, Valor = 4.
  2. Pulsa Generar matriz.
  3. Pulsa la etiqueta P5.

Resultado en MIII:

4 G4
4 G#4
4 A4
4 A#4
4 B4
4 C5
4 C#5
4 D5
4 D#5
4 E5
4 F5
4 F#5

32.7 Limitaciones

33. Notas de implementación y decisiones abiertas

33.1 Semilla RNG

FunciónSemilla actualReproducible
runIniciador12345 fijaSí
runGenerador12345 fijaSí
transform.fuseManuals con shuffle12345 fijaSí
shuffleCurrentRow (🎲 Barajar fila)Date.now()No
newRandomRow (🎲 Fila nueva)Date.now()No

33.2 Sincronización textarea ⇄ pentagrama Nuevo

La sincronización es unidireccional en cada sentido, pero las dos direcciones conviven:

El cambio de "quién dirige" es transparente: no hay que configurar nada.

33.3 Multiselección no contigua y guardado

La multiselección no se guarda en el JSON del proyecto ni en el del proceso. Es un estado transitorio de la sesión.

33.4 Paneles colapsables, modo Iniciación y octava

Los dos primeros se persisten en localStorage. La octava, no.

Esto significa que dos usuarios en el mismo navegador comparten preferencias de panel y modo. Si se necesita aislar, habría que usar un prefijo distinto por usuario o un backend.

33.5 Encadenamiento de generadores

La Fuente generador anterior permite encadenar G1 → G2, pero solo un nivel.

33.6 Undo del proceso generativo

Cada botón que escribe texto hace su propio snapshot de undo. El historial propio del panel (§31) permite volver a un paso concreto, pero es un mecanismo aparte del Ctrl+Z general.

33.7 Pulso con cambios de compás Pendiente

El pulso usa un único timeSig. No respeta cambios de compás dentro de la pieza.

33.8 Filtrar posiciones y espaciar eventos Nuevo

Ambos generadores siguen la convención general: no modifican la fuente. Escriben el resultado en el manual de Destino. Por eso son intercambiables con el resto de generadores y se pueden encadenar usando la fuente generador anterior.

34. Apéndice de ejemplos largos

34.1 Flujo completo: fila dodecafónica → inversión → MCM

  1. Iniciador source.row12, fila por defecto, valor 4, Manual MI.
  2. Generador transform.inversion, Fuente = Iniciador, axis = first, Destino = MIII.
  3. Voz MI: valor 8, Preservar posición = OFF.
  4. Realizar por MCM (loop ON en ambos).
MCM(6, 12) = 12
MI:   12 / 6 = 2 repeticiones
MIII: 12 / 12 = 1 repetición

34.2 Flujo completo: matriz dodecafónica

  1. Escribir la fila en MI.
  2. Generar matriz (Serie de = MI, Enviar a = MIII, Valor = 4).
  3. Pulsar "P5" para enviar la forma a MIII.
  4. Pulsar "R0" para enviar la retrogradación a MIII.
  5. Consultar el historial.

Aparecen 2 pasos. Pulsar «↶ Volver» en el primero descarta el segundo.

34.3 Flujo completo: fusión tonal-rítmica

  1. Escribir MI tonal y MIII rítmico a mano.
  2. Fusionar, direct, cyclic, ignoreRests = false, Destino = MI.

34.4 Flujo completo: fila nueva + inversión + historial

  1. Iniciador source.row12, pulsar "🎲 Fila nueva".
  2. Generador transform.inversion, axis = middle, Destino = MIII.
  3. Ver el historial: 2 pasos. Pulsar «↶ Volver» en el paso 1 revierte todo el proceso.

34.5 Flujo completo: filtro y espaciado encadenados Nuevo

  1. Iniciador source.row12, Valor Negra, Manual MI.
  2. Generador 1: Filtrar posiciones, Patrón Cada N = 3, Destino MIII. → 4 notas (posiciones 1, 4, 7, 10).
  3. Generador 2: Espaciar eventos, Fuente Generador anterior, Slots 2, Posición Después, Destino MIII.
  4. Voz: Manual MIII, Valor Negra, Preservar posición ON.

Resultado en MIII: 4 notas + 4 silencios, alternando.

APÉNDICES

Apéndice A — Glosario

Apéndice B — Tabla resumen de atajos

B.1 Sintaxis de entrada

Regla base: la primera palabra de cada línea es la duración. Todo lo que sigue son las notas del mismo evento: una sola nota, o varias formando un acorde (todas simultáneas). Para tener varios eventos, usa una línea por evento.

ComandoEfecto
4 C4Una negra (C4). Un evento, una nota.
4 C4 D4 E4 F4Un acorde de cuatro notas negras (simultáneas). No son cuatro negras seguidas.
4 C4 E4 G4Un acorde de tres notas (Do mayor, todas negras).
4 C4 repetido en 4 líneasCuatro negras consecutivas (una por línea).
4 rest / 4 s / 4 silencioSilencio de negra.
2. Bb3Blanca con puntillo (Si♭3).
1 C4 / 2 C4 / 4 C4 / 8 C4 / 16 C4Redonda / blanca / negra / corchea / semicorchea.
time 3/4 (o compas, m, t, c)Cambio de compás.
4 C4 ~ al final de líneaLigadura con la primera nota de la línea siguiente.
t3:2 8 C4 seguido de 8 D4, 8 E4Tresillo: 3 corcheas en el tiempo de 2.

B.2 Atajos de teclado

TeclaAcciónRespeta el foco
↑ / ↓Transponer ±1 semitono (o moverse dentro del acorde)Sí
Shift+↑ / Shift+↓Transponer ±1 octavaSí
+ / - (y con Shift)Transponer (multiselección > fragmento > nota > rango)Sí
← / →Navegar entre notasSí
Shift+← / Shift+→Extender / reducir fragmentoSí
Alt+↓ NuevoSiguiente panel (acordeón)Sí
Alt+↑ NuevoPanel anterior (acordeón)Sí
Alt+Enter NuevoAlternar panel enfocado sin cerrar los demásSí
Alt+Shift+Q NuevoAlternar todos los paneles (toggle)Sí
Alt+M NuevoAlternar Modo Iniciación / AvanzadoSí (ignora textarea/input)
Ctrl+Z / Cmd+ZDeshacerNo
Ctrl+Y / Cmd+YRehacerNo
Ctrl+Shift+ZRehacer (alternativo)No
EscDeseleccionar (o salir de pantalla completa)No
EspacioClaqueta + grabación MIDISí
EnterPlay / StopSí
TabAlternar manual MI ↔ MIIISí
Supr / BackspaceBorrar selección o limpiar editoresSí
RRetrogradarSí
IInvertirSí
1 2 4 8DuraciónSí
S o 9Semicorchea (16)Sí
. / ,PuntilloSí
Ctrl+C / Ctrl+VCopiar / pegar compasesSí
Ctrl+Shift+CCopiar fragmentoSí
Ctrl+Shift+VPegar fragmento (sustituir)Sí
a–gInsertar nota naturalSí
Shift+a–gInsertar silencioSí

Apéndice C — Cómo funciona el resaltado sincronizado

  1. Cada nota de VexFlow recibe un atributo data-note-id único.
  2. Al pulsar ▶ Reproducir, playAudio() programa cada nota con su tiempo exacto de inicio y duración. Con 🔁 Bucle, programa por adelantado las notas de la vuelta siguiente para mantener la continuidad.
  3. Un bucle requestAnimationFrame (updateVisuals) comprueba si now está dentro del intervalo de cada evento.
  4. Cuando una nota entra en su intervalo, se le añade la clase .playing y se llama a setNoteHighlight(el, color).
  5. Al salir del intervalo, se llama a setNoteHighlight(el, null) para restaurar los colores originales.
  6. Al pulsar ⏹ Parar o al terminar, se llama a stopAudio().

Por qué no basta el CSS: VexFlow 5 dibuja las cabezas de nota como <ellipse> con fill aplicado inline. Hay que recorrer los descendientes y modificar el atributo directamente.

C.1 Resaltado desde la textarea (violeta) Nuevo

Es un mecanismo aparte del resaltado de reproducción. Se activa al seleccionar texto en la textarea y añade la clase .nota-desde-textarea a las cabezas de nota correspondientes. Se limpia al perder el foco o al deseleccionar.

C.2 Overlay visual sobre la textarea Nuevo

Cuando el pentagrama selecciona una línea (clic simple, fragmento, compás, multiselección), se dibuja un <div class="sync-line-overlay"> encima de esa línea en el textarea. Se calcula con getExactLineHeight(), que mide el line-height real de la textarea (con un div espejo si el CSS no lo declara). El overlay se oculta cuando la textarea recibe el foco (porque entonces ya se ve la selección nativa).

Apéndice D — Comportamiento de teclas según el foco

Tecla<textarea> / <input><button>Resto
EspacioEscribe espacio.Activa botón.Claqueta.
EnterSalto de línea.Activa botón.Play/Stop.
TabTabulador.Mueve foco.Alterna manual.
EscDeselecciona.Deselecciona.Deselecciona / sale fullscreen.
Supr / BackspaceBorra carácter.—Borra selección o limpia.
REscribe r.—Retrogradar.
IEscribe i.—Invertir.
1/2/4/8/S/9Escribe.—Duración.
. / ,Escribe.—Puntillo.
+ / -Escribe.—Transponer.
← / →Mueve cursor.—Navega (Shift = extiende).
↑ / ↓Mueve cursor.—Transponer.
a–gEscribe.—Inserta nota.
Shift+a–gEscribe mayúscula.—Inserta silencio.
Ctrl+Z / Ctrl+YDeshacer / Rehacer.Deshacer / Rehacer.Deshacer / Rehacer.
Ctrl+C / Ctrl+VCopiar / pegar texto.Copiar / pegar compases.Copiar / pegar compases o fragmento.
Ctrl+Shift+C—Copiar fragmento.Copiar fragmento.
Ctrl+Shift+V—Pegar fragmento.Pegar fragmento.
Alt+↓ / ↑ Nuevo——Acordeón de paneles.
Alt+Enter Nuevo——Alternar panel enfocado.
Alt+Shift+Q Nuevo——Alternar todos los paneles (toggle).
Alt+M Nuevo—Alternar Modo Iniciación / Avanzado.Alternar Modo Iniciación / Avanzado.

Apéndice E — Ejemplos completos

E.1 Herencia simple

4 F#4 F4 F4 F4

E.2 Becuadro

4 F#4 Fn4 F4 F4

E.3 Transposición de compás sin ligadura

Entrada:

4 F4
4 F4
4 F4
4 F4

Acción: seleccionar compás, pulsar ↑.

4 F#4
4 F#4
4 F#4
4 F#4

Tras Generar Partituras:

4 F#4
4 F4
4 F4
4 F4

E.4 Ligadura dentro del mismo compás

4 C4 ~
4 C4

Retrogradar (R): el resultado es 2 C4.

E.5 Ligadura entre compases + transposición

Entrada:

2 F4
4 D4
4 D4 ~
4 D4
2 rest

Tras ↑:

2 F#4
4 D#4
4 D#4 ~
4 D#4
2 rest

E.6 Retrogradación con padding

Entrada:

2 F4
4 D4
4 D4 ~
4 D4
2 rest

Tras R:

2. rest
4 D4 ~
4 D4
4 D4
2 F4

E.7 Inversión con ligadura

Entrada:

2 F4
4 G#4
4 G#4 ~
4 G#4
2 rest

Tras I con eje F4:

2 F4
4 D4
4 D4 ~
4 D4
2 rest

E.8 Normalización

4 F#4 F#4 F#4

Tras Generar Partituras:

4 F#4 F4 F4

E.9 Copiar un fragmento y sustituir

Entrada en MI:

4 C4 D4 E4 F4
  1. Shift+clic en C4 y Shift+clic en D4 → fragmento de 2 beats.
  2. 🎼 Copiar fragmento.
  3. Clic en el compás.
  4. 🎼 Sustituir.

Resultado: sin cambios.

E.10 Copiar un fragmento e insertarlo

4 C4 D4 E4 F4
  1. Shift+clic en C4 dos veces → fragmento de 1 beat.
  2. 🎼 Copiar fragmento.
  3. Clic en el compás.
  4. 🎼 Insertar.

Resultado:

4 C4 C4 D4 E4
4 F4 rest rest rest

E.11 Cambio de valor a negra con puntillo forzado

Entrada en MI: 4 C4 / 4 D4 / 4 E4.

Acción: Voz MI, Valor = 4, Puntillo = "Con puntillo", Preservar posición = OFF.

Resultado:

4. C4
4. D4
4. E4
4. rest

E.12 Forzar compás 3/4

Entrada en MI: 4 C4 … 4 A4 (6 negras).

Acción: Voz MI, Valor = 4, Compás = 3/4.

Resultado:

time 3/4
4 C4
4 D4
4 E4
4 F4
4 G4
4 A4

E.13 Reproducir con pulso activo

  1. Activa el checkbox 🔔 Pulso en la cabecera.
  2. Pulsa ▶ Reproducir.
  3. Se oye un click por tiempo, con acento en el primer tiempo de cada compás.
  4. Al pulsar ⏹ Parar, los clicks se detienen junto con las notas.

E.14 Matriz dodecafónica: enviar P5 a MIII

Entrada en MI (fila dodecafónica): 4 C4 C#4 D4 D#4 E4 F4 F#4 G4 G#4 A4 A#4 B4.

  1. Panel generativo → Bloque 5 → Serie de = MI, Enviar a = MIII, Valor = 4.
  2. Pulsa Generar matriz.
  3. Pulsa la etiqueta P5 (fila 5, columna izquierda).

Resultado en MIII:

4 G4
4 G#4
4 A4
4 A#4
4 B4
4 C5
4 C#5
4 D5
4 D#5
4 E5
4 F5
4 F#5

E.15 Historial: volver a un paso anterior

  1. Aplica un Iniciador, un Generador y un cambio de Voz.
  2. El bloque 4 muestra los 3 pasos.
  3. Pulsa ↶ Volver en el paso 1.
  4. Los textareas vuelven al estado anterior al paso 1.
  5. Los pasos 2 y 3 se descartan del historial.
  6. Puedes deshacer este "volver" con Ctrl+Z.

E.16 Insertar una nota desde el piano o los botones

  1. Selecciona el manual activo: MI o MIII.
  2. Elige la duración con los botones 1/2/4/8/S y, si quieres, activa el puntillo con ..
  3. Si tu instrumento es de teclas, pulsa una tecla del piano.
  4. Si tu instrumento es de botones, pulsa un botón de las tres filas.
  5. La nota se reproduce y se inserta en el manual activo con la duración elegida.

E.17 Sincronización textarea ⇄ pentagrama Nuevo

Entrada en MI:

4 C4
4 D4
4 E4
4 F4
  1. Haz clic en la nota E4 del pentagrama.
  2. La línea 3 del textarea (4 E4) queda marcada con un overlay azul claro.
  3. Alternativamente, selecciona con el ratón las líneas 2 y 3 del textarea (4 D4 y 4 E4).
  4. En el pentagrama, las cabezas de nota de D4 y E4 se resaltan en violeta.
  5. Al hacer clic en un lugar vacío del pentagrama, la sincronización se limpia.

E.18 Transponer tres notas sueltas con multiselección Nuevo

Entrada en MI: 4 C4 D4 E4 F4.

  1. Clic en C4 → se vuelve azul.
  2. Ctrl+Shift+clic en D4 → ambos se vuelven verdes (multiselección).
  3. Ctrl+Shift+clic en F4 → los tres se vuelven verdes; E4 queda sin marcar.
  4. Pulsa + una vez → resultado: 4 C#4 D#4 E4 F#4.
  5. Pulsa Esc para limpiar la multiselección.

E.19 Navegar por los paneles con el teclado Nuevo

  1. Pulsa Alt+↓: se abre la ayuda "📖 Sintaxis y Atajos".
  2. Pulsa Alt+↓ cinco veces: recorres Configuración, Claqueta, Opciones MIDI, Iniciador, Generador (cada uno se abre y cierra el anterior).
  3. Pulsa Alt+↑: vuelves a Iniciador.
  4. Pulsa Alt+Enter: Iniciador y Generador quedan abiertos a la vez.
  5. Pulsa Alt+Shift+Q: como hay paneles abiertos, se cierran todos. Si lo vuelves a pulsar, se abren todos.

E.20 Alternar Modo Iniciación Nuevo

  1. Al abrir el editor por primera vez, arranca en Modo Iniciación: solo se ven el piano, los botones, las dos textareas, los botones Generar Partituras y Limpiar, y un aviso.
  2. El botón de la cabecera dice ⚙️ Avanzado.
  3. Pulsa Alt+M o haz clic en ⚙️ Avanzado: aparecen todas las herramientas avanzadas (Inspector, Panel generativo, Asistente de patrones, etc.).
  4. El botón ahora dice 🔰 Iniciación.
  5. Pulsa Alt+M otra vez para volver al modo Iniciación.
  6. Al recargar la página, la app arranca en el modo que estaba activo.

E.21 Desplazar la entrada una octava Nuevo

Objetivo: escribir una nota grave (Mi1) sin cambiar la partitura general.

  1. Comprueba la etiqueta #octaveOffsetLabel: muestra 0.
  2. Pulsa 8va ↓. La etiqueta pasa a −1 y el piano ahora cubre E1–E4.
  3. Pulsa una tecla del piano. Se inserta la nota en la octava desplazada (por ejemplo, 4 E1).
  4. Si quieres volver al rango original, pulsa 8va ↑ una vez. La etiqueta vuelve a 0.
  5. Si quieres escribir en la octava alta, pulsa 8va ↑ dos veces. La etiqueta muestra +1 y el piano cubre E3–E6.
  6. Pulsa una tecla: se inserta la nota en la octava +1 (por ejemplo, 4 E6).

En el Registro de actividad aparecen los mensajes del cambio de octava con el rango resultante.

E.22 Semicorchea con S o con 9 Nuevo

Ambas teclas hacen lo mismo:

  1. Sin selección: S o 9 fijan la duración base de entrada a semicorchea.
  2. Con una nota o silencio seleccionado: S o 9 cambian la duración del elemento seleccionado a semicorchea.

En teclados sin Numpad, S está más cerca de la mano izquierda; en teclados con Numpad, 9 es más rápido de pulsar.

E.23 Filtrar posiciones — subconjunto impar Nuevo

  1. Iniciador Fila dada, Notas: C4 D4 E4 F4 G4 A4 B4 C5, Valor Negra (4), Manual MI.
  2. Generador Filtrar posiciones, Fuente Iniciador, Patrón Impar (1, 3, 5, 7…), Conservar silencios No, Destino MIII.

Resultado en MIII: 4 C4 / 4 E4 / 4 G4 / 4 B4.

E.24 Espaciar eventos — airear una serie Nuevo

  1. Partiendo del ejemplo E.23, MIII tiene 4 notas.
  2. Generador Espaciar eventos, Fuente Texto actual de MIII, Slots 2, Posición Después, Destino MIII.

Resultado en MIII: 4 C4 / 4 rest / 4 E4 / 4 rest / 4 G4 / 4 rest / 4 B4 / 4 rest.

E.25 Filtro + espaciado combinados Nuevo

  1. Iniciador source.row12, valor Negra, Manual MI.
  2. Generador 1: Filtrar posiciones, Patrón Cada N, N = 3, Destino MIII.
  3. Generador 2: Espaciar eventos, Fuente Generador anterior, Slots 3, Posición Antes, Destino MIII.

Resultado en MIII: 4 notas (posiciones 1, 4, 7, 10 de la serie), cada una precedida de 2 silencios de su misma duración.

Apéndice F — Mantenimiento del documento


Manual Unificado V11.1 — Editor Musical (MI y MIII).
La aplicación forma parte de un conjunto de aplicaciones dirigidas a la improvisación para acordeón.

🎼 Volver al editor