# ¿A qué suena tu fotografía? · V2

Revisión solicitada por Abraham: mejorar las composiciones con el agente compositor, una verdad narrativa por pieza, cuatro acordes como máximo, conservar el carácter de la primera prueba de píxeles y hacer visible el origen real del patrón mientras suena. Todas las piezas nuevas se sintetizaron con Python, NumPy y SciPy.

## Escuchar y ver

Abrir `Escuchar-v2.html` en la carpeta superior. La sala permite elegir fotografía, reproducir y recorrer el audio, activar o desactivar la capa de origen y escuchar la mezcla, sólo los píxeles o sólo la melodía. Tocar una zona horizontal de la imagen sitúa el barrido en esa posición. La primera versión está conservada en `Escuchar-v1.html`.

| Pieza | Duración final | Cuatro acordes | Notas de melodía | Sonoridad medida |
|---|---:|---|---:|---:|
| Un paso más | 86 s | Dm, Bb, F, C | 53 | -20.98 LUFS |
| Un instante juntos | 78 s | C, Am, F, G | 39 | -21.0 LUFS |
| Alguien al otro lado | 76 s | Em, C, G, D | 43 | -20.99 LUFS |

## La relación entre la foto y la música

**Píxeles:** la imagen original se divide en 96 columnas × 12 filas. Cada celda es la media de los píxeles incluidos en su rectángulo exacto; no se utiliza un recorte distinto para el visor. sRGB se convierte a luz lineal antes de calcular luminancia. El barrido interpola los valores de dos columnas vecinas. El visor dibuja ambas y muestra sus pesos. Las doce bandas se afinan a notas del acorde escrito; las zonas superiores ocupan el registro agudo. El brillo determina amplitud y el color modifica armónicos, con las mismas fórmulas en audio y visualización.

**Melodía:** el compositor escribió alturas, ritmos, acordes, motivos, pausas y la ruta de atención por la fotografía. Cada nota mide una región rectangular concreta de la foto original. Su luminancia, croma, contraste y proporción cálida afectan la amplitud, el ataque y los armónicos de esa nota. El recuadro y la etiqueta corresponden al evento realmente renderizado, incluidos ataque, gate y release. La altura se declara escrita; no se atribuye a una frecuencia intrínseca del color.

**Espacio:** reverberación sintética derivada de los dos stems secos. Sus colas prolongan eventos anteriores y no se dibujan como una nueva región fuente. Al aislar píxeles o melodía se escucha su señal seca, con el mismo nivel que aporta a la mezcla; no se vuelve a normalizar el solo para hacerlo más fuerte.

El campo y la melodía son dos recorridos distintos: el primero recorre la imagen completa; la segunda vuelve a regiones significativas. Esa distinción se conserva en pantalla. Las notas de paso de la melodía no constituyen nuevos cambios de acorde. Hay cuatro identidades armónicas por pieza, con fundidos entre ellas. El campo usa un fader fijo; `field_gain_by_section` en la propuesta del compositor no se ejecutó, para conservar la dinámica procedente de la imagen y de los fundidos.

## Sincronización

El visor consume `manifest.js`, generado por el mismo programa que produce los WAV. Lee `audio.currentTime` en cada cuadro; no arranca un cronómetro independiente. Por eso pausar, adelantar, reiniciar y cambiar de capa conservan la posición. El audio se renderiza a 48 kHz; la resolución visible depende de la frecuencia de refresco de pantalla. No se ha calibrado la latencia de una salida de audio Bluetooth ni se promete sincronía física a nivel de muestra entre pantalla y altavoces.

Los manifiestos conservan timestamps, parámetros de envolvente, notas, acordes, rectángulos en píxeles y coordenadas normalizadas, mediciones visuales, matriz de celdas, transiciones armónicas y hashes. Las barras de pantalla representan amplitudes calculadas de las voces, no un análisis espectral de la mezcla ni una animación aleatoria.

## Revisión

Los tres renders se decodifican correctamente, tienen señales finitas, no presentan clipping y conservan stems alineados. Se emplea una ganancia constante para aproximarlos a −21 LUFS sin compresión global. Las mediciones exactas están en `analysis/all-manifests.json`. Se revisó la partitura y el contrato audiovisual con el agente compositor. No se realizó escucha directa por parte de los agentes; la eficacia emocional y el balance percibido siguen pendientes de Abraham.

Las historias son lecturas autorales de las imágenes, no afirmaciones sobre las emociones o biografías reales de las personas retratadas. Se busca claridad y experiencia humana reconocible; no se afirma una emoción universal garantizada.

## Archivos y reproducción

- `audio/`: mezcla WAV 24 bit / 48 kHz y MP3 256 kbps de cada pieza.
- `stems/`: píxeles, melodía y espacio; todos parten del mismo cero y tienen la misma duración. Píxeles y melodía también tienen MP3 para la sala.
- `production/score.py`: partitura original del compositor; `COMPOSICION.md`: motivos y narrativa.
- `production/render.py`: motor de síntesis y generación de manifiestos. `app.js`, `app.css` y `template.html`: visor.
- `analysis/`: manifiestos, entorno y pruebas técnicas.

Para reconstruir, ejecutar `production/render.py` con el Python 3.12 y las dependencias existentes que se indican en su cabecera, y después `production/publish.py`. Las rutas a DD M4 y al runtime están explícitas; deben adaptarse en otra máquina. La reproducción no requiere Python ni internet. No se utilizaron muestras externas ni modelos de texto a música en V2.

## Run y decisión

ACS-RUN-20261030-FOTOGRAFIA-SONORA-002. Trace2. Régimen autoral. Agente compositor ACS-21: narrativa, armonía, motivos y eventos. Agente principal bajo ACS-21: medición de píxeles, síntesis NumPy/SciPy, sincronización, mezcla, visor y QA. Handoff consumido: score.py. Fuente de criterio: Abraham prefirió explícitamente la pieza de píxeles de V1. Decisión: un solo motor para las tres, cuatro acordes, melodía escrita, materias sonoras medidas y visualización causal. Se conservan las versiones anteriores. Aprobación artística pendiente de escucha humana.
