# KISUM *musik al revés*: le pasas un tema de audio (o el audio de un vídeo) y KISUM lo escucha, saca el tempo y los golpes, y te lo devuelve como **código Strudel** listo para pegar en tu Strudel local (`localhost:3009`) y seguir tocándolo en vivo. ``` tema.mp3 / clip.mp4 ──> análisis (tempo, onsets por bandas, bajo) ──> patrón ──> Strudel ``` **Acepta cualquier archivo con audio**: `mp3`, `wav`, `flac`, `m4a`, `ogg`... y también vídeo (`mp4`, `mkv`, `webm`, `mov`...). Los formatos de audio se leen directos; para vídeo u otros contenedores extrae la pista con `ffmpeg` de forma automática (necesitas tener `ffmpeg` instalado). ## Instalación ```bash cd ~/COFRE/CODERS/MUSIKA/AUDIO/PROYECTOS/KISUM python3 -m venv .venv .venv/bin/pip install -r requirements.txt ``` ## Uso ```bash .venv/bin/python3 kisum.py tema.mp3 # imprime el código Strudel .venv/bin/python3 kisum.py clip.mp4 # vale también un vídeo .venv/bin/python3 kisum.py tema.mp3 --bars 8 # analiza 8 compases .venv/bin/python3 kisum.py tema.mp3 --bass # añade línea de bajo (experimental) .venv/bin/python3 kisum.py tema.mp3 -o tema.strudel ``` ## Cómo funciona (v0) 1. **Tempo y rejilla** — `librosa.beat.beat_track` saca el BPM y los tiempos de negra; cada negra se parte en 4 (semicorcheas) → rejilla de 16 pasos por compás (4/4). 2. **Golpes por bandas** — detección de onsets en tres bandas: graves (20–150 Hz → `bd`), medios (150–2500 Hz → `sd`), agudos (5–11 kHz → `hh`). 3. **Cuantización** — cada golpe cae en el paso más cercano de la rejilla. 4. **Salida** — un `stack()` de patrones Strudel, un compás entre `[ ]` y los compases alternando con `< >`. 5. **`--bass`** — croma por pulso sobre el audio grave → `note("...")`. Es aproximado: úsalo como punto de partida, no como transcripción. ## Limitaciones conocidas de la v0 - Asume 4/4 y tempo estable (techno/house van perfectos; jazz no). - No separa instrumentos: un golpe grave "es" un bombo aunque fuera otra cosa. La separación por stems (demucs) está en la hoja de ruta. - El BPM puede salir al doble o a la mitad; corrígelo en el `setcps`. ## Hoja de ruta - [x] v0: batería por bandas + tempo → Strudel (este directorio) - [x] Soporte universal de archivos: audio + vídeo (extracción con ffmpeg) - [ ] Separación por stems (demucs) y transcripción por stem - [ ] Melodía/acordes (basic-pitch) → `note()` con más de una voz - [ ] Elegir samples de Strudel según el timbre detectado - [ ] Modo directo: escuchar por el micro/monitor y transcribir en vivo