---
name: audio-taste
description: "Use the interaction data on public social charts (heat / usage count / views / like-to-view rate) — the Douyin hot-song chart, the Bilibili music section and similar public charts — as a screen to pick the BGM samples the public actually votes for, then use local librosa to break out the audio features (BPM / key / energy / brightness / harmonicity), and bank the result into an auditory-aesthetics rule library per platform × chart that serves as the reference anchor when choosing BGM or voiceover for a video. Use when the user wants to improve BGM taste, says the BGM is too monotonous, wants to learn from viral scoring, asks what background music to pick, or needs data backing for BGM before making a video."
---

> Original skill · commissioned by the user · English edition, 2026-11-12

# audio-taste (Auditory Aesthetics)

One line: **BGM taste is screened by data and measured by audio features, not guessed.** The Douyin hot-song chart (what the public really takes and puts under videos) is the screen, local librosa features (BPM / key / energy / brightness / harmonicity) are the ruler; the crossing of the two gives a BGM reference library of "what the public really buys *and* what really sounds good", made specifically to cure "monotonous BGM".

## When to use

- "The BGM is too monotonous", "how do I improve my scoring taste", "show me how other people choose music for viral videos"
- Before making a video (talking-head voiceover / knowledge short / narrative / dance), when you need a data-backed reference anchor for song selection
- When you want to know "what BGM style does the audience of a given platform / content type actually buy"

## When not to use

- Pure music theory / music production (arrangement, harmony) → `local-audio`
- Concrete editing / mixing / beat-matching → `clip-skills` / `ffmpeg-skill`
- Writing the voiceover script, judging a topic → `koubo-playbook` / `topic-radar`
- Visual cover / inline-image aesthetics → `data-taste` (that is the visual edition, this skill is the auditory edition)

## Core principles

- **Data screen + audio ruler**: the Douyin hot-song chart's heat / persistence and Bilibili's views / like-to-view rate are the screen for "does the public accept it", the five librosa features (BPM / key / energy / brightness / harmonicity) are the ruler for "does it sound good, what flavour is it". Screening without measuring teaches you "high heat but bad"; measuring without screening drifts away from the public.
- **Per platform, per chart**: **the Douyin hot-song chart = a BGM usage signal** (what the public really takes and puts under videos), **the Bilibili music section = a music-content consumption signal** (covers / performances / derivative-work trends). The two are different things and must never be mixed into one stew.
- **Samples are assets**: every high-data BGM is an "auditory sample" carrying data provenance; accumulated, they become a song-selection reference library that compounds.

## Workflow

### Step 1 · collect (script route, free, no login)

```bash
# Douyin hot-song chart (free DataXAPI .md page, refreshed every 4 hours, includes 7-day chart persistence)
node <SKILL_DIR>/scripts/collect_douyin_music.mjs --out <WORKSPACE>/douyin-music-raw.json

# Bilibili ranking (public API, music section rid=3)
node <SKILL_DIR>/scripts/collect_bilibili.mjs --rid 3 --type all --top 30 --out <WORKSPACE>/bilibili-music-raw.json
```

- Douyin hot-song chart: heat = the platform's index (not a play count, only comparable inside the chart), plus the number of days on the chart in the last 7.
- Bilibili ranking: outputs title + exact interaction counts (views / likes / coins / shares / comments / favourites / danmaku) + bvid.

### Step 2 · score

```bash
node <SKILL_DIR>/scripts/score.mjs --raw raw.json --out scored.json --min-view 100000
```

- The Douyin hot-song chart carries its own heat ranking; the script passes it through (heat is the rank, not recomputed).
- Bilibili uses the spread score = `log10(view)×50 + like-to-view×1000 + coin-to-view×1000 + share-to-view×1000 + comment-to-view×500`, output descending.

### Step 3 · download + break out (machine track, local and free)

```bash
# download Bilibili audio one by one (up to 192k AAC without login)
node <SKILL_DIR>/scripts/download_bilibili_audio.mjs --aid <aid> --out <AUDIO_DIR>

# librosa batch breakdown: BPM / key / energy (RMS) / brightness (centroid) / harmonic share / onset strength
& "<TOOLS_DIR>/audio-ml/Scripts/python.exe" <SKILL_DIR>/scripts/analyze_audio.py --dir <AUDIO_DIR> --out <OUT_JSON> [--vocals]
```

- Depends on the local `<TOOLS_DIR>/audio-ml` venv (librosa 1.0 / torchaudio 2.8 / demucs); **call it by absolute path, do not inject PATH**.
- `--vocals` runs demucs source separation to decide whether vocals are present; slow on CPU (5–10 minutes for a 4-minute song), off by default.
- **Douyin hot songs have no direct audio link** (they need a Soda Music / NetEase Cloud Music / QQ Music login), so the machine track is marked "pending"; the semantic track proceeds as usual.

### Step 4 · library

Write "chart × high-data samples + the five auditory dimensions + machine-track features + shared rules" into `references/library/<platform>/<chart>-<YYYYMMDD>.md`; the format is in `references/library-template.md`.

### Step 5 · anchor

When choosing BGM for a video:

1. Look up the high-data rules for the matching chart in `references/library/douyin/`.
2. Translate those rules into "song-selection reference anchors" and write them into the script / song-selection list (BPM range, whether vocals are present, emotion match, take the chorus section).
3. Hand over to `local-audio` (synthesis / finding the track) or `clip-skills` (mixing and beat-matching); afterwards compare the result against "chosen with the reference library" and "chosen without it".

## Hard rules

- **Data screen + audio ruler, both are mandatory**: trusting heat alone teaches you brainworm hits; trusting librosa alone drifts away from the public.
- **Per platform, per chart — no stew**: the Douyin hot-song chart (BGM) and the Bilibili music section (music consumption) must be stored separately.
- **Samples must carry data provenance**: every sample must record `platform + chart + heat/views + persistence + collection date`; a sample without data provenance does not enter the library.
- **Downloaded audio is for local analysis only — never republished, never passed on.**
- **Free first**: public charts + local librosa; any paid data service (e.g. a DataXAPI endpoint at $0.002 per call) requires a budget report first — by default use the free `.md` page.

## Red lines

- Never treat "high heat" as "high aesthetics" directly — it must pass the five auditory dimensions + machine-track breakdown.
- Never summarize rules mixed across platforms / charts ("Douyin BGM" and "the Bilibili music section" are two different things).
- The sample library lives only in `references/library/`; it must not be scattered in the workspace root.
- Audio is a "sample", not an "asset": never used directly as a deliverable, never passed off as original copyrighted work.

## Known workstation limitations (verified once)

| Source | Status | Handling |
|---|---|---|
| Douyin hot-song chart (DataXAPI .md page) | ✅ free and public; node fetches the raw markdown directly, heat + 7-day persistence | parsed by `collect_douyin_music.mjs` |
| Bilibili ranking/v2 API (music section rid=3) | ✅ public without login, 200, title + exact interaction counts + bvid | `collect_bilibili.mjs` |
| Bilibili audio stream (playurl DASH) | ✅ downloadable without login, 30280 = 192k AAC | `download_bilibili_audio.mjs` |
| librosa feature breakdown | ✅ `audio-ml` venv, BPM / key / energy / brightness / harmonicity all work | `analyze_audio.py` |
| demucs vocal separation | ✅ usable, slow on CPU (5–10 minutes for a 4-minute song) | `--vocals`, enable on demand |
| Direct audio link for Douyin hot songs | ❌ needs a Soda Music / NetEase Cloud Music / QQ Music login | machine track marked "pending", semantic track still done |
