# Audio privado Este directorio guarda los **archivos completos** del catálogo. No se sirve como estático: nada de lo que hay aquí llega a la web por sí solo. Solo lo entrega `/descargas/…`, y únicamente a quien lo ha comprado. Lo que sí es público es el **fragmento de muestra** de cada tema, que vive aparte, en `static/muestras/`, y es lo que suena en el reproductor. ## Subir un tema desde el panel Lo normal es no tocar este directorio a mano. En `/admin`, el campo **Archivo de audio** de una canción sube el máster; aterriza en `media/audio/subidas/` con el nombre que traiga, porque el navegador no puede colocarlo mejor. Lo demás lo hace `npm run medios`, que corre solo antes de `npm run dev` y de `npm run build`: 1. Mueve el archivo de `subidas/` a la carpeta de su disco —o a `singles/`— con el nombre de la convención, y reescribe la clave en el Markdown. 2. Recorta el fragmento de muestra en `static/muestras/`. 3. Escribe la duración en el frontmatter si estaba vacía. Hace falta **ffmpeg** en el equipo. Sin él el script no rompe nada: avisa de las muestras que no ha podido generar y sigue. En un servidor de despliegue no se necesita, porque las muestras van en el repositorio. Si un archivo se queda en `subidas/` sin que ninguna canción lo reclame, el script lo dice en cada arranque. Suele significar que falta la ficha del tema. ## Convención ``` media/audio/ / 01-.mp3 01--orquestal.mp3 ← una alternativa musical singles/ .mp3 ← temas sin álbum static/muestras/ ``` La ruta relativa dentro de cada uno de los dos árboles es la **clave** que se escribe en el contenido, sin barra inicial: ```yaml # src/content/canciones/como-si-nada.md audio: como-si-nada/01-como-si-nada.mp3 versiones: - nombre: 'Versión orquestal' audio: como-si-nada/01-como-si-nada-orquestal.mp3 ``` De esa única clave salen las dos rutas: `media/audio/` para la descarga y `/muestras/` para la escucha pública. Por eso no hay que escribirlas dos veces, y por eso una clave que empiece por `/` se rechaza al compilar: sería una ruta pública, y el archivo completo no lo es. El número delante del nombre es el mismo `numero` que lleva la canción en su frontmatter. No es obligatorio, pero mantiene el directorio ordenado igual que el disco. ## Dónde apunta el directorio La variable `MEDIA_DIR` decide la raíz del audio privado; por defecto, `./media/audio`. Al desplegar hay que copiar este directorio junto a la aplicación: **no lo genera el build**. ## Formato - **MP3 a 192 kbps** o superior para el archivo completo: lo reproduce y lo abre cualquier cosa, y es lo que se entrega al comprador. - **Muestra de 30 a 45 segundos**, del mismo archivo, con un fundido de salida. Debe dejar claro cómo suena el tema sin sustituirlo. - Etiqueta los archivos completos con sus metadatos (título, artista, álbum): es lo primero que ve quien los descarga. Para generar una muestra a mano, 40 segundos desde el segundo 30. El `-ss` va **antes** del `-i`: detrás, el filtro sigue viendo los tiempos del original, el fundido cae seis segundos después de empezar y el resto sale mudo. ```bash ffmpeg -ss 30 -t 40 -i media/audio/album/01-tema.mp3 \ -af "afade=t=out:st=36:d=4" static/muestras/album/01-tema.mp3 ``` ## Los archivos que hay ahora Son **marcadores de posición**: un tono por pista, seis segundos en el archivo completo y dos en la muestra, con una nota distinta cada uno para poder comprobar de oído que el reproductor cambia de tema y que la descarga entrega lo que debe. Para poner el material real, lo cómodo es el panel: subir el archivo en la ficha del tema y arrancar. Si prefieres hacerlo a mano, copia el máster en `media/audio/` respetando la estructura, ajusta el campo `audio` y lanza `npm run medios` para la muestra y la duración. En ambos casos, borra después el `.wav` de marcador de posición de los dos directorios. Las portadas provisionales están en `static/images/albumes/` y `static/images/canciones/`: sustitúyelas manteniendo el nombre, o cambia el campo `portada`.