В Without Streaming я сделал управление как на пульте:
одна ручка смещает эфир Jazz ⇄ Hip-hop, вторая меняет энергию Drifting ⇄ Driving.
Основа намеренно простая и прозрачная: я помечаю треки тегами в Telegram (#J / #H / #JxH и #drift / #drive / #dd). Индексатор собирает это в playlist.json, а сервер по запросу /playlist?mix=&energy= пересобирает порядок треков. #JxH и #dd это треки, которые я сам считаю смешанными по стилю (Jazz×Hip-hop) и треки со смешанной энергией (между drift и drive).
Дальше код делает простую вещь: превращает положение ползунков в коэффициенты “сколько внимания дать каждой стороне”, и считает итоговую оценку трека score. Чем выше score, тем выше трек поднимается в выдаче /playlist.
jazz_bias = 1.0 - hiphop_bias
drive_bias = energy / 100.0
drift_bias = 1.0 - drive_bias
score = jazz_bias * w_jazz + hiphop_bias * w_hiphop \
+ drift_bias * w_drift + drive_bias * w_drive
• mix и energy превращаются в коэффициенты *_bias: это “сколько влияния” дать каждой стороне шкалы.
• w_jazz / w_hiphop / w_drift / w_drive это веса трека, которые получаются из тегов при индексации.
• score это итоговая оценка: чем она выше, тем раньше трек окажется в эфире при текущих настройках.
Дальше включается важная инженерная часть: чтобы эфир не зацикливался на узкой категории, сервер сначала отдаёт “профильные” треки (и мосты), а затем подмешивает остальные.
Почему пока не идеально: теги субъективны, две оси создают много комбинаций, и “музыкально правильно” не всегда совпадает с “самой высокой оценкой”.
Авто-режимы (Auto Flow / Auto Energy) двигают ручки плавно и не ломают текущий трек, а эффект проявляется на следующем.
Кстати, авто-режим можно включить прямо с ползунка: нажмите на “точку” (ползунок) и он начнёт двигаться автоматически.
В следующем посте разберу внутренний конвейер Without Streaming: как индексатор собирает playlist.json, как /playlist формирует эфир под ручки и как /audio стримит медиа из Telegram chunked без сохранения на диск.
Оглавление темы 📌
Навигация по проектам канала 📍
Все проекты 🎶
#WithoutStreaming@annsFlow
💻 annFlow