Commit ·
fbd620e
verified ·
0
Parent(s):
Publish ChordNet 2E1D ONNX classifier and matched CQT plan
Browse files- .gitattributes +37 -0
- README.md +187 -0
- chordnet.onnx +3 -0
- config.json +206 -0
- cqt-plan.bin +3 -0
- cqt-plan.manifest.json +77 -0
.gitattributes
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
*.json text eol=lf
|
| 37 |
+
*.md text eol=lf
|
README.md
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
library_name: onnxruntime-web
|
| 4 |
+
pipeline_tag: audio-classification
|
| 5 |
+
tags:
|
| 6 |
+
- audio
|
| 7 |
+
- chord-recognition
|
| 8 |
+
- music-information-retrieval
|
| 9 |
+
- constant-q-transform
|
| 10 |
+
- onnx
|
| 11 |
+
- onnxruntime-web
|
| 12 |
+
- webgpu
|
| 13 |
+
---
|
| 14 |
+
|
| 15 |
+
# ChordMini ChordNet (2E1D) — classifier + CQT plan (ONNX / WebGPU)
|
| 16 |
+
|
| 17 |
+
ONNX export of the **ChordMini** chord recognizer (ChordNet "2E1D", 170-class
|
| 18 |
+
large vocabulary), packaged for the [`musetric`][musetric] `packages/ai` runtime
|
| 19 |
+
(`onnxruntime-web` on **WebGPU**).
|
| 20 |
+
|
| 21 |
+
The graph is the **classifier only**: it takes log-CQT feature windows and
|
| 22 |
+
returns per-frame chord logits. Feature extraction is deliberately *not* baked
|
| 23 |
+
in — the host computes a recursive constant-Q transform on WebGPU and hands the
|
| 24 |
+
result over as a GPU buffer, so no features cross back to the CPU. This is not a
|
| 25 |
+
drop-in `audio -> chords` model.
|
| 26 |
+
|
| 27 |
+
```text
|
| 28 |
+
mono PCM @ 22050 Hz (arithmetic-mean downmix — see Limitations)
|
| 29 |
+
-> WebGPU recursive CQT -> log(|CQT| + 1e-6) features [T, 144]
|
| 30 |
+
-> pad/window -> [W, 108, 144]
|
| 31 |
+
-> chordnet.onnx -> logits [W, 108, 170]
|
| 32 |
+
-> WebGPU smoothing + argmax -> chord indices [T]
|
| 33 |
+
```
|
| 34 |
+
|
| 35 |
+
`cqt-plan.bin` ships with the model because it *defines* the features the graph
|
| 36 |
+
expects: the octave schedule, the sparse per-octave FFT basis and the resampling
|
| 37 |
+
FIR, baked from librosa 0.11.0. Model and plan are a matched pair — a release
|
| 38 |
+
therefore carries a hashable feature-extraction contract instead of an implicit
|
| 39 |
+
one.
|
| 40 |
+
|
| 41 |
+
Normalization (`(x - mean) / (std + 1e-8)`) is inside the graph. CQT, windowing,
|
| 42 |
+
smoothing and argmax stay in the host so their GPU buffers stay reusable.
|
| 43 |
+
|
| 44 |
+
## Intended uses & limitations
|
| 45 |
+
|
| 46 |
+
**Intended:**
|
| 47 |
+
- Chord recognition over music, as a stage in an audio pipeline.
|
| 48 |
+
- Client/edge inference via WebGPU through `onnxruntime-web`.
|
| 49 |
+
|
| 50 |
+
**Out of scope:**
|
| 51 |
+
- Standalone use without a host that computes librosa-equivalent log-CQT
|
| 52 |
+
features, windows them to 108 frames, and applies smoothing + argmax to the
|
| 53 |
+
logits (see `musetric` `packages/ai` and `packages/cqt`).
|
| 54 |
+
- Use in other training frameworks — this is an inference-only export.
|
| 55 |
+
|
| 56 |
+
**Limitations:**
|
| 57 |
+
- The 108-frame window and 144 CQT bins are fixed model contract; only the
|
| 58 |
+
window count `W` is dynamic. Inputs shorter than 108 frames must be padded to
|
| 59 |
+
one window and trimmed back.
|
| 60 |
+
- **The features must be librosa-equivalent.** Substituting a different CQT is
|
| 61 |
+
not free: an nnAudio `CQT1992v2` stand-in correlates at ~0.998 yet still costs
|
| 62 |
+
~1.2% of frames end to end. Use the shipped plan.
|
| 63 |
+
- **The model is gain-sensitive.** It was trained on `librosa.load`'s arithmetic
|
| 64 |
+
mean downmix `(L+R)/2`. `ffmpeg -ac 1` uses an energy-preserving rematrix
|
| 65 |
+
`(L+R)/sqrt(2)`, i.e. a factor of √2, which `log(|CQT| + 1e-6)` turns into a
|
| 66 |
+
constant `log(√2) = 0.347` offset on every feature — after `std = 1.719` a
|
| 67 |
+
uniform `+0.20` shift, enough to flip frames near a decision boundary. Downmix
|
| 68 |
+
as the arithmetic mean.
|
| 69 |
+
- Its `idx_to_chord` checkpoint map differs from the reference runner's
|
| 70 |
+
`idx2voca_chord()` on 70 of 170 indices, in enharmonic spelling only
|
| 71 |
+
(`Db:min` vs `C#:min`). `config.json` ships the runner's vocabulary.
|
| 72 |
+
- Training-data provenance of the upstream checkpoint is not documented here.
|
| 73 |
+
|
| 74 |
+
## How to use
|
| 75 |
+
|
| 76 |
+
The session runs the classifier; the host supplies `features` and consumes
|
| 77 |
+
`logits`.
|
| 78 |
+
|
| 79 |
+
```ts
|
| 80 |
+
import * as ort from 'onnxruntime-web/webgpu';
|
| 81 |
+
import { createCqt, verifyCqtPlanArtifact } from '@musetric/cqt/gpu';
|
| 82 |
+
|
| 83 |
+
const session = await ort.InferenceSession.create('chordnet.onnx', {
|
| 84 |
+
executionProviders: ['webgpu'],
|
| 85 |
+
preferredOutputLocation: { logits: 'gpu-buffer' },
|
| 86 |
+
});
|
| 87 |
+
const device = await ort.env.webgpu.device;
|
| 88 |
+
|
| 89 |
+
// cqt-plan.bin; verifies the payload against the SHA-256 it carries.
|
| 90 |
+
const plan = await verifyCqtPlanArtifact(new Uint8Array(planBytes));
|
| 91 |
+
const cqt = createCqt(device).get({ input: pcm, output: features, sampleCount, plan });
|
| 92 |
+
// cqt.run(encoder) writes log features [T, 144]; pad T up to a multiple of 108.
|
| 93 |
+
|
| 94 |
+
const input = ort.Tensor.fromGpuBuffer(paddedFeatures, {
|
| 95 |
+
dataType: 'float32',
|
| 96 |
+
dims: [windowCount, 108, 144],
|
| 97 |
+
});
|
| 98 |
+
const { logits } = await session.run({ features: input });
|
| 99 |
+
// logits: float32 [W, 108, 170] -> uniform 9-frame smoothing -> argmax -> indices
|
| 100 |
+
```
|
| 101 |
+
|
| 102 |
+
See the `musetric` `packages/ai` host code for the full CQT, smoothing/argmax and
|
| 103 |
+
segment-grouping pipeline.
|
| 104 |
+
|
| 105 |
+
## Files
|
| 106 |
+
|
| 107 |
+
| File | Size | SHA256 |
|
| 108 |
+
|---|---|---|
|
| 109 |
+
| `chordnet.onnx` | 9,604,664 B | `9a6570bf611cdc3f2c36286307af46fb94927fe7f6a2bc22a87c0ebf5f6c082e` |
|
| 110 |
+
| `config.json` | 3,009 B | `1f26c11ebea51ec08f12e813eb213a729fa0ecc407ac7632dfdc7bad67e65aa4` |
|
| 111 |
+
| `cqt-plan.bin` | 23,896 B | `c31f0a6fd2d582d753be6628b5daecdee58acba53cba93b2bc2b5c75dee2ba48` |
|
| 112 |
+
| `cqt-plan.manifest.json` | 1,721 B | `522b178e4f6e8ae5b6bf63b8e2f1a615fe2398592e27f7d9e3e219810081019f` |
|
| 113 |
+
|
| 114 |
+
`config.json` records the I/O contract, checkpoint normalization, the CQT
|
| 115 |
+
configuration and the 170-label vocabulary. `cqt-plan.manifest.json` records the
|
| 116 |
+
plan's generator, configuration and payload hash.
|
| 117 |
+
|
| 118 |
+
**Signature** — float32 weights, opset `ai.onnx` 17:
|
| 119 |
+
|
| 120 |
+
| Tensor | Type | Shape | Meaning |
|
| 121 |
+
|---|---|---|---|
|
| 122 |
+
| `features` (in) | float32 | `[W, 108, 144]` | unnormalized `log(\|CQT\| + 1e-6)` windows; 108 frames, 144 bins |
|
| 123 |
+
| `logits` (out) | float32 | `[W, 108, 170]` | per-frame chord logits, before smoothing and argmax |
|
| 124 |
+
|
| 125 |
+
**CQT plan** — `librosa 0.11.0`, `sr=22050`, `hop=2048`, `fmin=C1`, `n_bins=144`,
|
| 126 |
+
`bins_per_octave=24`, `norm=1`, `sparsity=0.01`, `window='hann'`, `scale=True`,
|
| 127 |
+
`pad_mode='constant'`; 6 octaves after one early downsample, 512-point FFT per
|
| 128 |
+
octave, resampler `kaiser-lowpass-255-cutoff-0.48-beta-12`.
|
| 129 |
+
|
| 130 |
+
## Validation
|
| 131 |
+
|
| 132 |
+
This export + the WebGPU CQT vs the PyTorch + `librosa.cqt` reference runner:
|
| 133 |
+
|
| 134 |
+
| Metric | Value |
|
| 135 |
+
|---|---|
|
| 136 |
+
| per-frame chord agreement (20 instrumental stems) | **1.0000** |
|
| 137 |
+
| exported logits vs Torch ChordNet, identical inputs | max abs error < `1e-4` |
|
| 138 |
+
| degenerate outputs | 0 |
|
| 139 |
+
|
| 140 |
+
Agreement is exact because the only approximation was removed. The predecessor
|
| 141 |
+
artifact baked the whole pipeline into one graph with nnAudio `CQT1992v2` in
|
| 142 |
+
place of `librosa.cqt`; that stand-in was the entire remaining gap (mean 0.9883,
|
| 143 |
+
worst 0.9410) and cost 70% of inference time and 37.8 of 47.4 MB. Reproducing
|
| 144 |
+
librosa's recursive per-octave transform on WebGPU fixed accuracy and size at
|
| 145 |
+
once.
|
| 146 |
+
|
| 147 |
+
Validate on the material fed in production — the **instrumental stem**.
|
| 148 |
+
Agreement measured on audio where the reference emits a near-constant label (for
|
| 149 |
+
example an isolated vocal, where "no chord" is correct on ~99% of frames)
|
| 150 |
+
carries no information: a stub returning that label scores just as well.
|
| 151 |
+
Re-run the parity gate on the exact published bytes before relying on it.
|
| 152 |
+
|
| 153 |
+
## Source & lineage
|
| 154 |
+
|
| 155 |
+
Code license and weight license are separate; ONNX conversion does not change the
|
| 156 |
+
weight license. Documented only as far as it is verifiable.
|
| 157 |
+
|
| 158 |
+
- **Architecture:** ChordNet "2E1D" — frequency encoder + time encoder +
|
| 159 |
+
decoder, a small transformer (~2.3 M parameters).
|
| 160 |
+
- **Reference implementation and weights:** [`ptnghia-j/ChordMini`][upstream],
|
| 161 |
+
**MIT** (per its `LICENSE`). Upstream publishes **no Hugging Face repo**, so
|
| 162 |
+
the weights come from the GitHub repository rather than the Hub.
|
| 163 |
+
- **Checkpoint:** [`checkpoints/2e1d_model_best.pth`][ckpt] — 27,523,646 B, git
|
| 164 |
+
blob `b61f6b3a02cc42b87afa38392f80d185a49f719a` — fetched at export time from
|
| 165 |
+
[`raw.githubusercontent.com`][ckpt-raw]. That URL tracks `main` and upstream
|
| 166 |
+
publishes no tagged release, so the fetch follows a moving branch; the blob
|
| 167 |
+
hash above identifies what this export actually used.
|
| 168 |
+
- **Vendored code:** the inference subset lives under
|
| 169 |
+
`musetric_toolkit/chords_audio/chordmini` in [musetric-toolkit][toolkit]; see
|
| 170 |
+
its [`thirdPartyNotices.md`][notices].
|
| 171 |
+
- **Export tooling:** `scripts/onnx/chordmini` in [musetric-toolkit][toolkit].
|
| 172 |
+
- **Host runtime:** `packages/cqt` (the CQT) and `packages/ai` (the session and
|
| 173 |
+
the smoothing/argmax passes) in [`musetric`][musetric].
|
| 174 |
+
|
| 175 |
+
This export preserves the upstream **MIT** license; we do not claim authorship of
|
| 176 |
+
the original weights.
|
| 177 |
+
|
| 178 |
+
## License
|
| 179 |
+
|
| 180 |
+
MIT, inherited from the upstream weights.
|
| 181 |
+
|
| 182 |
+
[upstream]: https://github.com/ptnghia-j/ChordMini
|
| 183 |
+
[ckpt]: https://github.com/ptnghia-j/ChordMini/blob/main/checkpoints/2e1d_model_best.pth
|
| 184 |
+
[ckpt-raw]: https://raw.githubusercontent.com/ptnghia-j/ChordMini/main/checkpoints/2e1d_model_best.pth
|
| 185 |
+
[toolkit]: https://github.com/popelenkow/musetric-toolkit
|
| 186 |
+
[notices]: https://github.com/popelenkow/musetric-toolkit/blob/main/thirdPartyNotices.md
|
| 187 |
+
[musetric]: https://github.com/popelenkow/musetric
|
chordnet.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9a6570bf611cdc3f2c36286307af46fb94927fe7f6a2bc22a87c0ebf5f6c082e
|
| 3 |
+
size 9604664
|
config.json
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"modelType": "chordmini-chordnet-2e1d",
|
| 3 |
+
"input": {
|
| 4 |
+
"name": "features",
|
| 5 |
+
"shape": [
|
| 6 |
+
"windows",
|
| 7 |
+
108,
|
| 8 |
+
144
|
| 9 |
+
],
|
| 10 |
+
"dtype": "float32"
|
| 11 |
+
},
|
| 12 |
+
"output": {
|
| 13 |
+
"name": "logits",
|
| 14 |
+
"shape": [
|
| 15 |
+
"windows",
|
| 16 |
+
108,
|
| 17 |
+
170
|
| 18 |
+
],
|
| 19 |
+
"dtype": "float32"
|
| 20 |
+
},
|
| 21 |
+
"seqLen": 108,
|
| 22 |
+
"sampleRate": 22050,
|
| 23 |
+
"hopLength": 2048,
|
| 24 |
+
"frameDuration": 0.09287981859410431,
|
| 25 |
+
"fmin": 32.70319566257483,
|
| 26 |
+
"nBins": 144,
|
| 27 |
+
"binsPerOctave": 24,
|
| 28 |
+
"smoothingKernel": 9,
|
| 29 |
+
"numChords": 170,
|
| 30 |
+
"mean": -2.2279880046844482,
|
| 31 |
+
"std": 1.719132900238037,
|
| 32 |
+
"normalizationEpsilon": 1e-08,
|
| 33 |
+
"normalizationInGraph": true,
|
| 34 |
+
"chordVocab": [
|
| 35 |
+
"C:min",
|
| 36 |
+
"C",
|
| 37 |
+
"C:dim",
|
| 38 |
+
"C:aug",
|
| 39 |
+
"C:min6",
|
| 40 |
+
"C:maj6",
|
| 41 |
+
"C:min7",
|
| 42 |
+
"C:minmaj7",
|
| 43 |
+
"C:maj7",
|
| 44 |
+
"C:7",
|
| 45 |
+
"C:dim7",
|
| 46 |
+
"C:hdim7",
|
| 47 |
+
"C:sus2",
|
| 48 |
+
"C:sus4",
|
| 49 |
+
"C#:min",
|
| 50 |
+
"C#",
|
| 51 |
+
"C#:dim",
|
| 52 |
+
"C#:aug",
|
| 53 |
+
"C#:min6",
|
| 54 |
+
"C#:maj6",
|
| 55 |
+
"C#:min7",
|
| 56 |
+
"C#:minmaj7",
|
| 57 |
+
"C#:maj7",
|
| 58 |
+
"C#:7",
|
| 59 |
+
"C#:dim7",
|
| 60 |
+
"C#:hdim7",
|
| 61 |
+
"C#:sus2",
|
| 62 |
+
"C#:sus4",
|
| 63 |
+
"D:min",
|
| 64 |
+
"D",
|
| 65 |
+
"D:dim",
|
| 66 |
+
"D:aug",
|
| 67 |
+
"D:min6",
|
| 68 |
+
"D:maj6",
|
| 69 |
+
"D:min7",
|
| 70 |
+
"D:minmaj7",
|
| 71 |
+
"D:maj7",
|
| 72 |
+
"D:7",
|
| 73 |
+
"D:dim7",
|
| 74 |
+
"D:hdim7",
|
| 75 |
+
"D:sus2",
|
| 76 |
+
"D:sus4",
|
| 77 |
+
"D#:min",
|
| 78 |
+
"D#",
|
| 79 |
+
"D#:dim",
|
| 80 |
+
"D#:aug",
|
| 81 |
+
"D#:min6",
|
| 82 |
+
"D#:maj6",
|
| 83 |
+
"D#:min7",
|
| 84 |
+
"D#:minmaj7",
|
| 85 |
+
"D#:maj7",
|
| 86 |
+
"D#:7",
|
| 87 |
+
"D#:dim7",
|
| 88 |
+
"D#:hdim7",
|
| 89 |
+
"D#:sus2",
|
| 90 |
+
"D#:sus4",
|
| 91 |
+
"E:min",
|
| 92 |
+
"E",
|
| 93 |
+
"E:dim",
|
| 94 |
+
"E:aug",
|
| 95 |
+
"E:min6",
|
| 96 |
+
"E:maj6",
|
| 97 |
+
"E:min7",
|
| 98 |
+
"E:minmaj7",
|
| 99 |
+
"E:maj7",
|
| 100 |
+
"E:7",
|
| 101 |
+
"E:dim7",
|
| 102 |
+
"E:hdim7",
|
| 103 |
+
"E:sus2",
|
| 104 |
+
"E:sus4",
|
| 105 |
+
"F:min",
|
| 106 |
+
"F",
|
| 107 |
+
"F:dim",
|
| 108 |
+
"F:aug",
|
| 109 |
+
"F:min6",
|
| 110 |
+
"F:maj6",
|
| 111 |
+
"F:min7",
|
| 112 |
+
"F:minmaj7",
|
| 113 |
+
"F:maj7",
|
| 114 |
+
"F:7",
|
| 115 |
+
"F:dim7",
|
| 116 |
+
"F:hdim7",
|
| 117 |
+
"F:sus2",
|
| 118 |
+
"F:sus4",
|
| 119 |
+
"F#:min",
|
| 120 |
+
"F#",
|
| 121 |
+
"F#:dim",
|
| 122 |
+
"F#:aug",
|
| 123 |
+
"F#:min6",
|
| 124 |
+
"F#:maj6",
|
| 125 |
+
"F#:min7",
|
| 126 |
+
"F#:minmaj7",
|
| 127 |
+
"F#:maj7",
|
| 128 |
+
"F#:7",
|
| 129 |
+
"F#:dim7",
|
| 130 |
+
"F#:hdim7",
|
| 131 |
+
"F#:sus2",
|
| 132 |
+
"F#:sus4",
|
| 133 |
+
"G:min",
|
| 134 |
+
"G",
|
| 135 |
+
"G:dim",
|
| 136 |
+
"G:aug",
|
| 137 |
+
"G:min6",
|
| 138 |
+
"G:maj6",
|
| 139 |
+
"G:min7",
|
| 140 |
+
"G:minmaj7",
|
| 141 |
+
"G:maj7",
|
| 142 |
+
"G:7",
|
| 143 |
+
"G:dim7",
|
| 144 |
+
"G:hdim7",
|
| 145 |
+
"G:sus2",
|
| 146 |
+
"G:sus4",
|
| 147 |
+
"G#:min",
|
| 148 |
+
"G#",
|
| 149 |
+
"G#:dim",
|
| 150 |
+
"G#:aug",
|
| 151 |
+
"G#:min6",
|
| 152 |
+
"G#:maj6",
|
| 153 |
+
"G#:min7",
|
| 154 |
+
"G#:minmaj7",
|
| 155 |
+
"G#:maj7",
|
| 156 |
+
"G#:7",
|
| 157 |
+
"G#:dim7",
|
| 158 |
+
"G#:hdim7",
|
| 159 |
+
"G#:sus2",
|
| 160 |
+
"G#:sus4",
|
| 161 |
+
"A:min",
|
| 162 |
+
"A",
|
| 163 |
+
"A:dim",
|
| 164 |
+
"A:aug",
|
| 165 |
+
"A:min6",
|
| 166 |
+
"A:maj6",
|
| 167 |
+
"A:min7",
|
| 168 |
+
"A:minmaj7",
|
| 169 |
+
"A:maj7",
|
| 170 |
+
"A:7",
|
| 171 |
+
"A:dim7",
|
| 172 |
+
"A:hdim7",
|
| 173 |
+
"A:sus2",
|
| 174 |
+
"A:sus4",
|
| 175 |
+
"A#:min",
|
| 176 |
+
"A#",
|
| 177 |
+
"A#:dim",
|
| 178 |
+
"A#:aug",
|
| 179 |
+
"A#:min6",
|
| 180 |
+
"A#:maj6",
|
| 181 |
+
"A#:min7",
|
| 182 |
+
"A#:minmaj7",
|
| 183 |
+
"A#:maj7",
|
| 184 |
+
"A#:7",
|
| 185 |
+
"A#:dim7",
|
| 186 |
+
"A#:hdim7",
|
| 187 |
+
"A#:sus2",
|
| 188 |
+
"A#:sus4",
|
| 189 |
+
"B:min",
|
| 190 |
+
"B",
|
| 191 |
+
"B:dim",
|
| 192 |
+
"B:aug",
|
| 193 |
+
"B:min6",
|
| 194 |
+
"B:maj6",
|
| 195 |
+
"B:min7",
|
| 196 |
+
"B:minmaj7",
|
| 197 |
+
"B:maj7",
|
| 198 |
+
"B:7",
|
| 199 |
+
"B:dim7",
|
| 200 |
+
"B:hdim7",
|
| 201 |
+
"B:sus2",
|
| 202 |
+
"B:sus4",
|
| 203 |
+
"X",
|
| 204 |
+
"N"
|
| 205 |
+
]
|
| 206 |
+
}
|
cqt-plan.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c31f0a6fd2d582d753be6628b5daecdee58acba53cba93b2bc2b5c75dee2ba48
|
| 3 |
+
size 23896
|
cqt-plan.manifest.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"formatVersion": 1,
|
| 3 |
+
"generator": "librosa==0.11.0;numpy==2.4.6;scipy==1.16.3;resampler=kaiser-lowpass-255-cutoff-0.48-beta-12",
|
| 4 |
+
"payloadSha256": "9e233a7935aefc8172b3cead5bea8cbd1379c3f67066de7c8d59137cbc9bba94",
|
| 5 |
+
"artifactSha256": "c31f0a6fd2d582d753be6628b5daecdee58acba53cba93b2bc2b5c75dee2ba48",
|
| 6 |
+
"config": {
|
| 7 |
+
"sampleRate": 22050.0,
|
| 8 |
+
"hopLength": 2048,
|
| 9 |
+
"fmin": 32.70319566257483,
|
| 10 |
+
"nBins": 144,
|
| 11 |
+
"binsPerOctave": 24,
|
| 12 |
+
"output": "logMagnitude"
|
| 13 |
+
},
|
| 14 |
+
"earlyDownsampleCount": 1,
|
| 15 |
+
"octaveCount": 6,
|
| 16 |
+
"coefficientCount": 1818,
|
| 17 |
+
"downsampleTapCount": 255,
|
| 18 |
+
"downsample": {
|
| 19 |
+
"algorithm": "kaiser-lowpass-fir",
|
| 20 |
+
"cutoff": 0.48,
|
| 21 |
+
"kaiserBeta": 12,
|
| 22 |
+
"gain": 1.4142135623730951,
|
| 23 |
+
"delay": 127,
|
| 24 |
+
"boundary": "constant",
|
| 25 |
+
"outputLength": "ceil(input/2)"
|
| 26 |
+
},
|
| 27 |
+
"octaves": [
|
| 28 |
+
{
|
| 29 |
+
"index": 0,
|
| 30 |
+
"sampleRate": 11025.0,
|
| 31 |
+
"hopLength": 1024,
|
| 32 |
+
"fftSize": 512,
|
| 33 |
+
"binStart": 120,
|
| 34 |
+
"binCount": 24
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"index": 1,
|
| 38 |
+
"sampleRate": 5512.5,
|
| 39 |
+
"hopLength": 512,
|
| 40 |
+
"fftSize": 512,
|
| 41 |
+
"binStart": 96,
|
| 42 |
+
"binCount": 24
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"index": 2,
|
| 46 |
+
"sampleRate": 2756.25,
|
| 47 |
+
"hopLength": 256,
|
| 48 |
+
"fftSize": 512,
|
| 49 |
+
"binStart": 72,
|
| 50 |
+
"binCount": 24
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"index": 3,
|
| 54 |
+
"sampleRate": 1378.125,
|
| 55 |
+
"hopLength": 128,
|
| 56 |
+
"fftSize": 512,
|
| 57 |
+
"binStart": 48,
|
| 58 |
+
"binCount": 24
|
| 59 |
+
},
|
| 60 |
+
{
|
| 61 |
+
"index": 4,
|
| 62 |
+
"sampleRate": 689.0625,
|
| 63 |
+
"hopLength": 64,
|
| 64 |
+
"fftSize": 512,
|
| 65 |
+
"binStart": 24,
|
| 66 |
+
"binCount": 24
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"index": 5,
|
| 70 |
+
"sampleRate": 344.53125,
|
| 71 |
+
"hopLength": 32,
|
| 72 |
+
"fftSize": 512,
|
| 73 |
+
"binStart": 0,
|
| 74 |
+
"binCount": 24
|
| 75 |
+
}
|
| 76 |
+
]
|
| 77 |
+
}
|