Migrating from Spotify Audio Features: a Field-by-Field Threshold Guide

від

у

Migrating from Spotify Audio Features: посібник порогів по кожному полю по полю
https://ift.tt/vp9M83l

TL;DR: Spotify закрив /audio-features 2024-11-27. APIFreqBlog Music пропонує готовий варіант на api.freqblog.com/v1/audio-features/{id} — той самий шлях, та та сама форма відповіді. Числа наші (аналіз сигналу за допомогою librosa + Essentia, не ML-класифікатори Spotify), тож кілька розподілів полів змістилися. Це посібник з поетапного донастроювання з реальними даними розподілу з нашого каталогу близько ~57,000 треків.

Це syndicated-міррор — канонічна версія з повним форматуванням доступна за https://freqblog.com/blog/spotify-audio-features-migration-thresholds/ (де таблиця коректно відображається).

Форма міграції

Ви змінили хоста з api.spotify.com на api.freqblog.com. Ваш існуючий обробник GET /v1/audio-features/{id} все ще розбирає відповідь незмінно, модульні тести пройдуть. Потім ваш downstream if features.danceability > 0.7 рекомендатор починає відображати дивні треки. Ваше правило acousticness > 0.5 спрацьовує практично на everything. Ваш фільтр liveness > 0.8 відхиляє увесь каталог.

Міграція сумісна на рівні формату (shape). Напрямок зміни — на рівні значень. Spotify будував свої Audio Features шляхом навчання ML-класифікаторів на позначеному корпусі; ми обчислюємо свої з сигнал-аналізу. Одні й ті ж імена, різні «звіри».

Таблиця порогів (медіани каталогу понад ~8k треків)

  • bpm / tempo — медіана 118.7 — готовий варіант. Також bpm_alt виправляє відомий баг Spotify з напівтаймінгом.
  • key (0–11 / -1) — готовий варіант. Повертається як key_int.
  • mode (0/1) — готовий варіант.
  • energy — медіана 0.73 — злегка зсувилася вгору; пороги підвищити ~0.05–0.1.
  • valence — медіана 0.48 — найближчий до розподілу Spotify. Мінімальна повторна настройка.
  • danceability — медіана 0.74 — зсунулась вгору. Старий 0.65 ≈ нашому 0.80.
  • acousticness — медіана 0.98не використовуйте як «є акустично». Розрізняє близько 0.99.
  • instrumentalness — медіана 0.23 — проксі форми сигналу, не вокальний класифікатор.
  • liveness — медіана 1.00 (насичена) — наразі не діагностична.
  • speechiness — медіана 0.45 — зсунулась вгору ~5–10×. Старе 0.66 ≈ наші >0.85.
  • loudness — медіана -14 dB — на 3–6 дБ нижче, ніж у Spotify (вікно 30с vs повний трек BS.1770); використовуйте відносно, не абсолютно.
  • time_signature — у практиці завжди 4. Розглядайте як інформаційне, а не як фільтр.

Чому acousticness дорівнює 0.98 для всього

Наша формула: 1 - clip(spectral_flatness / 0.15, 0, 1). Низька спектральна «плоскість» означає, що сигнал має сильні тональні/гармонічні піки — що більшість музики має, акустична чи електрична. Приблизно 99% нашого каталогу має оцінку >0.9. Якщо ваш код Spotify говорив acousticness > 0.7 = акустичний трек і спрацьовував на ~20% вашої бібліотеки, той же поріг під FreqBlog спрацюватиме на ~99% від неї. Це поле не є марним сигналом — воно розрізняє тональну музику і шумову підкладку (трек з білим шумом, чисте амбієнт, записи з важким спотворенням) — але його корисний поріг близько 0.99.

Чому liveness насичується

Формула: clip(noise_floor_ratio * 6.0, 0, 1), де noise_floor_ratio — це 5-й перцентильний RMS ділене на 95-й перцентильний RMS. Інтуїція: живі записі мають підвищений рівень шуму. Проблема: сучасна мастеринґована музика має сильну динамику компресії, що зменшує розподіл RMS-перцентилів — і множник ×6 насичує на 1.0 майже миттєво. Поки ми не запустимо кращий детектор, відмовтеся від фільтра liveness.

Що ми робимо правильно

  • BPM + key/mode/key_int — Essentia як зріла DSP; порівнянно з ML Spotify для звичайних випадків. Також bpm_alt — це задокументоване покращення над відомою помилкою виявлення напівтаймінгу у Spotify (Blinding Lights: Spotify казав 85; сприйняття 171; ми відправляємо 85 у bpm і 171 у bpm_alt).
  • Camelot + Open Key — першокласні поля, готові до інструментів гармонійного мікшування.
  • Гнучкість ідентифікаторів/v1/audio-features/{id} приймає ідентифікатори треків Spotify, ISRC (з або без дефісів), spotify:track:… URI або open.spotify.com/track/… URL. Передавайте той, що дає ваш шар даних.
  • Задовго-до-оброслі запаси — якщо трек відсутній у каталозі, наш бекфіл інжестить його за 30с–2хв і надішле вам електронною поштою, коли буде готовий. API Spotify ніколи цього не мав.

Повна документація (з прикладами вто-)/ формулами по кожному полю) тут:

freqblog.com/blog/spotify-audio-features-migration-thresholds/

Безкоштовний тариф — 1 000 запитів на місяць, без карти. Коментарі / зворотній зв’язок щодо використання — привітні — вказані поля з застереженням (acousticness/liveness тощо) де саме попит клієнтів диктує наступний раунд вдосконалень.

HI-FI News

via DEV Community https://dev.to

12 травня 2026 р. 00:41.

May 12, 2026 at 12:41AM


Коментарі

Залишити відповідь