k-l-lambda commited on
Commit
bc3f652
·
1 Parent(s): 9c671dd

Deploy complete CPU-capable Speaking MIDI demo

Browse files
.gitattributes CHANGED
@@ -38,3 +38,7 @@ examples/poetry/sonnet-18.wav filter=lfs diff=lfs merge=lfs -text
38
  examples/poetry/spring-dawn.wav filter=lfs diff=lfs merge=lfs -text
39
  examples/poetry/stork-tower.wav filter=lfs diff=lfs merge=lfs -text
40
  examples/poetry/the-tyger.wav filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
38
  examples/poetry/spring-dawn.wav filter=lfs diff=lfs merge=lfs -text
39
  examples/poetry/stork-tower.wav filter=lfs diff=lfs merge=lfs -text
40
  examples/poetry/the-tyger.wav filter=lfs diff=lfs merge=lfs -text
41
+ *.sf3 filter=lfs diff=lfs merge=lfs -text
42
+ *.wav filter=lfs diff=lfs merge=lfs -text
43
+ *.png filter=lfs diff=lfs merge=lfs -text
44
+ *.mid filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ outputs/
2
+ __pycache__/
3
+ .venv/
4
+ .local/
5
+ *.log
README.md CHANGED
@@ -1,13 +1,84 @@
1
  ---
2
- title: Hf Speaking Midi
3
- emoji: 📉
4
- colorFrom: red
5
- colorTo: blue
6
  sdk: gradio
7
- sdk_version: 6.29.0
8
- python_version: '3.12'
9
  app_file: app.py
10
  pinned: false
 
 
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: Speaking MIDI
3
+ emoji: 🎹
4
+ colorFrom: indigo
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 6.17.3
8
+ python_version: '3.10'
9
  app_file: app.py
10
  pinned: false
11
+ models:
12
+ - Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign
13
  ---
14
 
15
+ # Speaking MIDI
16
+
17
+ An interactive demonstration of **fixed-timbre inverse synthesis**: approximate speech or other audio using only Grand Piano MIDI notes. Upload/record audio, or generate a voice from text with Qwen3-TTS, then compare the source, a spectral-peak baseline, and optimized piano playback. Download the actual MIDI and inspect aligned spectrograms and a velocity-colored piano roll.
18
+
19
+ English and Chinese examples are available instantly through the two example buttons. They contain about eight seconds of speech each and use the full refinement algorithm. New jobs default to a smaller search budget for responsive CPU experimentation. The technique approximates spectral structure; it does not guarantee intelligible words or perform conventional melody transcription.
20
+
21
+ ## Poetry voice examples
22
+
23
+ Five ready-made Qwen VoiceDesign recordings cover Chinese and English public-domain poetry: Li Bai’s **Quiet Night Thoughts**, Meng Haoran’s **Spring Dawn**, Wang Zhihuan’s **On the Stork Tower**, the opening couplet of Shakespeare’s **Sonnet 18**, and the first stanza of Blake’s **The Tyger**. Select an example to load and listen to its recording, then press **Generate piano MIDI**. Selection switches to audio mode and sets the fitting window to 12 seconds. These are speech inputs; their MIDI is generated on demand. Text, authorship, durations, and generation provenance are available in [the poetry examples](examples/poetry/README.md).
24
+
25
+ ## Two input modes
26
+
27
+ - **Audio → MIDI:** upload or record sound, select the prefix duration, and fit piano notes. This path never loads a TTS model.
28
+ - **Text → speech → MIDI:** generate speech with Qwen3-TTS 1.7B VoiceDesign, then run exactly the same fitting pipeline. The default voice description is `一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。` (a gentle, confident young woman with clear speech and a warm, lively delivery).
29
+
30
+ Inputs are limited to 25 MB, 300 text characters, and a fitted prefix of at most 12 seconds. Longer recordings are read only through the selected prefix. New jobs share one compute queue, with at most eight queued requests. Temporary outputs are ephemeral, are cleaned after 24 hours when another job starts, and disappear when the Space restarts. Do not treat this public demonstration as private storage.
31
+
32
+ ## Algorithm
33
+
34
+ The renderer is FluidSynth with bank 0, program 0 of the bundled MuseScore General SoundFont, fixed gain 0.8, and disabled chorus/reverb. Each candidate MIDI event has a pitch, velocity, onset and gate duration. We seek events whose **rendered sound** resembles the input, rather than merely extracting its fundamental frequency.
35
+
36
+ 1. Convert the input to mono at 24 kHz and normalize RMS to 0.035. Analyze magnitudes using a 2048-sample Hann STFT with 240-sample (10 ms) hops and project them onto 96 triangular frequency bands.
37
+ 2. Render a dictionary of 657 templates: pitches 36–108, velocities 45/75/105, and gate durations 60/120/240 ms. Each template includes a short release tail. Cache the dictionary by renderer configuration and SoundFont hash.
38
+ 3. Weight each band inversely to the square root of its RMS magnitude, with a floor to avoid amplifying near-silence. Greedily select a template and onset that most reduce weighted squared residual error. For residual $R$ and a shifted atom $A$, the improvement is
39
+
40
+ $$
41
+ \Delta = 2\langle R,A\rangle - \lVert A\rVert_2^2.
42
+ $$
43
+
44
+ Subtract the selected atom and forbid overlapping holds of the same MIDI pitch. Stop on nonpositive improvement or the iteration budget. The budget counts search attempts, so the accepted note count may be smaller.
45
+
46
+ 4. Export and decode the MIDI, then render it through the actual synthesizer. Test global velocity offsets against a log-band objective. With **Full per-note refinement**, also try each note's velocity ±10, onset ±10 ms, gate duration ±20 ms, and deletion, accepting only measured improvements:
47
+
48
+ $$
49
+ L = \frac{1}{BT}\sum_{b,t}\left|\log(1+F(y)_{b,t})-\log(1+F(S(M))_{b,t})\right|.
50
+ $$
51
+
52
+ Here $F$ is band-magnitude analysis, $y$ is the normalized target, $M$ is MIDI, and $S$ is the fixed piano renderer. The quick setting runs dictionary search and global velocity refinement; it skips the per-note sweep. The baseline rounds strong spectral peaks to piano pitches and separately calibrates global velocity.
53
+
54
+ All four spectrogram panels use the same color scale. Metrics compare the input-length interval; audio includes a 0.5-second release tail. Log-band MAE is the optimization target, while spectral convergence is reported separately and need not improve. Neither metric measures speech intelligibility. Magnitude addition is only an approximation because real notes interact in phase, which motivates the renderer refinement step.
55
+
56
+ The fitting core is vendored from [Speaking MIDI](https://github.com/k-l-lambda/speaking-midi/tree/932f8eb), with a portable SoundFont path and an optional quick-refinement flag. See that project for full experiments, derivations, and reproducible demo provenance.
57
+
58
+ ## CPU and GPU execution
59
+
60
+ The Space defaults to `INFERENCE_DEVICE=cpu`. TTS uses float32 on CPU and SDPA attention; no FlashAttention or ZeroGPU decorator is required. A separate process loads only VoiceDesign for text jobs and releases its memory before piano fitting. The fitting worker also runs on CPU, even when a GPU is present. Model downloads are cached between requests on the running instance. CPU-basic hardware can take several minutes; the first request additionally downloads the model. Each worker has a 30-minute timeout.
61
+
62
+ To run locally:
63
+
64
+ ```bash
65
+ # Python 3.10; install libfluidsynth3, libsndfile1 and sox using your OS package manager.
66
+ python -m venv .venv
67
+ . .venv/bin/activate
68
+ pip install -r requirements.txt gradio==6.17.3
69
+ python app.py
70
+ ```
71
+
72
+ Optional environment variables: `QWEN_MODEL_PATH` selects an existing local VoiceDesign snapshot; `PORT` defaults to 7860; `OMP_NUM_THREADS` defaults to 2. For GPU execution, install CUDA-compatible PyTorch/torchaudio wheels instead of the CPU wheels and set `INFERENCE_DEVICE=cuda` (or `auto` for detection). CUDA TTS uses bfloat16. The deployment targets CPU-basic and does not request GPU hardware. On 2026-10-01, Hugging Face rejected Space creation for the current account with HTTP 402: even CPU-basic Gradio hosting requires a PRO subscription. An eligible account is required to deploy; local execution works without that subscription.
73
+
74
+ ## Relationship to the Qwen Space
75
+
76
+ The [official Qwen3-TTS Space](https://huggingface.co/spaces/Qwen/Qwen3-TTS/blob/6ae5dfa/app.py) was inspected as the backend reference. This app follows its `Qwen3TTSModel.from_pretrained(..., attn_implementation='sdpa')` and `generate_voice_design(text, language, instruct)` flow. Our backend is written separately and loads one model on demand, supports float32 CPU inference, and limits generation to 512 new tokens. We deliberately use VoiceDesign 1.7B because the 0.6B CustomVoice model does not honor natural-language voice instructions.
77
+
78
+ ## Assets and attribution
79
+
80
+ The bundled `assets/gm.sf3` is MuseScore General v0.2, with SHA-256 `5b85b6c2c61d10b2b91cddd41efcce7b25cd31c8271d511c73afafbef20b6fa3`. See [its license](assets/MuseScore_General_License.md) for authors, MIT terms, and sample credits. Model weights remain in the upstream Qwen repository and are downloaded at runtime; they are not included here. Qwen3-TTS model license: Apache-2.0. The generated demo assets and their model revision, settings, and hashes are recorded in [examples/manifest.json](examples/manifest.json).
81
+
82
+ ## Deployment
83
+
84
+ Authenticate using `hf auth login` or set `HF_TOKEN`, then run `python deploy.py`. The script creates `<authenticated-user>/hf-speaking-midi` and commits the application and assets to that Space. It never upgrades an account or requests paid hardware. See [validation results](VALIDATION.md) for what has actually been tested.
VALIDATION.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Validation
2
+
3
+ Checked on 2026-10-01 with Python 3.10, Gradio 6.17.3, Qwen-TTS 0.1.1, PyTorch 2.10.0 and FluidSynth 2.2.5.
4
+
5
+ - Six automated tests passed: input validation/prefix reading, actual CPU audio fitting, both packaged examples, MIDI timing/audio round-trip, known-note dictionary recovery, and cached objective equivalence.
6
+ - Real CPU VoiceDesign generation with float32, SDPA and the requested voice description produced a 1.12-second `Hello, piano.` clip in 8.60 seconds of generation time, excluding loading. Snapshot: `5ecdb67327fd37bb2e042aab12ff7391903235d3`.
7
+ - Local Gradio API exercised both modes. A 0.5-second uploaded prefix with 20 search iterations completed in 7.2 seconds; text → speech → MIDI completed in 29.1 seconds, including model loading and fitting. Both ran on CPU. These are local workstation measurements, not hosted CPU-basic benchmarks.
8
+ - Chrome/Playwright checked example loading, input mode switching and 390-pixel mobile layout. No JavaScript errors or horizontal page overflow were observed. The desktop screenshot was visually inspected.
9
+ - Existing English and Chinese eight-second demos were generated on GPU and are labeled as precomputed. Their generation and fit provenance remain in `examples/manifest.json`.
10
+
11
+ An earlier create-Space API attempt returned HTTP 402. The Space now exists at `k-l-lambda/hf-speaking-midi`; its repository was cloned on 2026-10-01 and the complete application copied into that checkout, preserving the remote history and poetry recordings. Local validation does not establish that the hosted build or inference succeeds. No subscription or paid hardware was requested.
app.py ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """CPU-capable, renderer-constrained speech-to-piano demonstration."""
2
+ import json
3
+ import os
4
+ from pathlib import Path
5
+ import subprocess
6
+ import sys
7
+ import tempfile
8
+ import shutil
9
+ import time
10
+
11
+ os.environ.setdefault('OMP_NUM_THREADS', '2')
12
+ os.environ.setdefault('MPLBACKEND', 'Agg')
13
+ import gradio as gr
14
+ import numpy as np
15
+ import soundfile as sf
16
+
17
+ ROOT = Path(__file__).resolve().parent
18
+ VOICE = '一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。'
19
+ MODEL = 'Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign'
20
+ DEVICE = os.getenv('INFERENCE_DEVICE', 'cpu')
21
+ if DEVICE not in {'cpu', 'cuda', 'auto'}:
22
+ raise ValueError('INFERENCE_DEVICE must be cpu, cuda or auto')
23
+ RUNS = ROOT / 'outputs' / 'runs'
24
+ RUNS.mkdir(parents=True, exist_ok=True)
25
+
26
+
27
+ def worker(command, log, timeout=1800):
28
+ """Bound each job and release all model memory when the child exits."""
29
+ env = os.environ.copy()
30
+ if DEVICE == 'cpu':
31
+ env['CUDA_VISIBLE_DEVICES'] = ''
32
+ with log.open('w') as stream:
33
+ process = subprocess.Popen([sys.executable, *command], cwd=ROOT, env=env,
34
+ stdout=stream, stderr=subprocess.STDOUT)
35
+ try:
36
+ process.wait(timeout=timeout)
37
+ except subprocess.TimeoutExpired:
38
+ process.kill()
39
+ process.wait()
40
+ raise gr.Error('This job exceeded 30 minutes. Try a shorter clip or a smaller note budget.') from None
41
+ except BaseException:
42
+ process.kill()
43
+ process.wait()
44
+ raise
45
+ if process.returncode:
46
+ print(log.read_text()[-6000:], flush=True)
47
+ raise gr.Error('Generation failed. Please try a shorter clip; server logs contain details.')
48
+
49
+
50
+ def prepare_audio(path, out, seconds):
51
+ if not path:
52
+ raise gr.Error('Upload or record an audio clip first.')
53
+ info = sf.info(path)
54
+ if not 8000 <= info.samplerate <= 192000 or info.channels > 8:
55
+ raise gr.Error('Use audio with 1–8 channels and an 8–192 kHz sample rate.')
56
+ # Read only the selected prefix, bounding memory even for long uploads.
57
+ audio, rate = sf.read(path, frames=int(float(seconds) * info.samplerate), always_2d=True)
58
+ audio = audio.mean(axis=1)
59
+ if len(audio) < rate * .2 or not np.isfinite(audio).all() or np.max(np.abs(audio)) < 1e-7:
60
+ raise gr.Error('Audio must contain at least 0.2 seconds of finite, non-silent sound.')
61
+ sf.write(out, audio, rate, subtype='FLOAT')
62
+ return len(audio) / rate
63
+
64
+
65
+ def piano_roll(directory):
66
+ import matplotlib.pyplot as plt
67
+ from matplotlib.patches import Rectangle
68
+ notes = json.loads((directory / 'refined.json').read_text())
69
+ fig, ax = plt.subplots(figsize=(11, 3))
70
+ for note in notes:
71
+ ax.add_patch(Rectangle((note['start'], note['pitch']-.4), note['duration'], .8,
72
+ color=plt.cm.viridis(note['velocity']/127)))
73
+ duration = sf.info(directory / 'target.wav').duration
74
+ ax.set(xlim=(0, duration), ylim=(35,109), xlabel='Seconds', ylabel='MIDI pitch',
75
+ title=f'{len(notes)} piano notes · color indicates velocity')
76
+ ax.grid(alpha=.15); fig.tight_layout()
77
+ path = directory / 'piano-roll.png'; fig.savefig(path, dpi=130); plt.close(fig)
78
+ return str(path)
79
+
80
+
81
+ def result(directory, status):
82
+ metrics = json.loads((directory / 'metrics.json').read_text())
83
+ return (status, str(directory/'target.wav'), str(directory/'baseline.wav'),
84
+ str(directory/'refined.wav'), str(directory/'spectrogram.png'),
85
+ (str(directory/'piano-roll.png') if (directory/'piano-roll.png').exists() else piano_roll(directory)), str(directory/'refined.mid'), metrics['results'])
86
+
87
+
88
+ def run(mode, audio, text, language, description, seconds, budget, refine, progress=gr.Progress()):
89
+ if mode not in {'Audio → MIDI', 'Text → speech → MIDI'} or not .5 <= float(seconds) <= 12 or not 20 <= int(budget) <= 240:
90
+ raise gr.Error('Choose a valid mode, duration (0.5–12 s), and budget (20–240).')
91
+ if language not in {'Auto', 'English', 'Chinese', 'Japanese', 'Korean', 'French', 'German', 'Spanish', 'Portuguese', 'Russian'}:
92
+ raise gr.Error('Choose a supported language.')
93
+ for old in RUNS.glob('job-*'):
94
+ if old.is_dir() and time.time() - old.stat().st_mtime > 86400:
95
+ shutil.rmtree(old)
96
+ directory = Path(tempfile.mkdtemp(prefix='job-', dir=RUNS))
97
+ empty = (None,) * 7
98
+ started = time.monotonic()
99
+ if mode == 'Text → speech → MIDI':
100
+ if not text.strip() or len(text) > 300 or not description.strip() or len(description) > 600:
101
+ raise gr.Error('Enter 1–300 text characters and a voice description of 1–600 characters.')
102
+ yield ('1/4 · Generating speech. CPU VoiceDesign can take several minutes on first use.', *empty)
103
+ progress(.05, desc='Loading VoiceDesign and generating speech')
104
+ prompts = directory/'prompts.json'
105
+ prompts.write_text(json.dumps([dict(name='speech', text=text.strip(), language=language, instruct=description.strip())]))
106
+ command = ['scripts/generate_speech.py', '--device', DEVICE, '--model', MODEL,
107
+ '--samples', str(prompts), '--out', str(directory)]
108
+ if os.getenv('QWEN_MODEL_PATH'):
109
+ command += ['--model-path', os.environ['QWEN_MODEL_PATH']]
110
+ worker(command, directory/'tts.log')
111
+ audio = str(directory/'speech.wav')
112
+ duration = prepare_audio(audio, directory/'input.wav', seconds)
113
+ yield (f'2/4 · Analyzing the first {duration:.2f} s and building piano templates.',
114
+ str(directory/'input.wav'), None, None, None, None, None, None)
115
+ progress(.3, desc='Fitting piano note templates; then checking the real synthesizer')
116
+ command = ['-m', 'speaking_midi', str(directory/'input.wav'), '--out', str(directory),
117
+ '--soundfont', str(ROOT/'assets/gm.sf3'), '--max-notes', str(int(budget))]
118
+ if not refine:
119
+ command.append('--skip-local-refinement')
120
+ worker(command, directory/'fit.log')
121
+ progress(.95, desc='Drawing spectrograms and MIDI piano roll')
122
+ yield result(directory, f'4/4 · Complete in {time.monotonic()-started:.1f} s on {DEVICE}. '
123
+ + ('Full renderer refinement.' if refine else 'Quick fit with global velocity refinement.'))
124
+
125
+
126
+ def example(language):
127
+ return result(ROOT/'examples'/language, 'Precomputed VoiceDesign example · full renderer refinement · generated on GPU.')
128
+
129
+
130
+ def build_ui():
131
+ with gr.Blocks(title='Speaking MIDI') as demo:
132
+ gr.Markdown('# Speaking MIDI\nTurn a voice into piano notes. Compare the sound, inspect the spectrum, and download the MIDI.\n'
133
+ 'This is experimental sound approximation: words may become difficult to understand.')
134
+ with gr.Row():
135
+ english = gr.Button('Listen to English example')
136
+ chinese = gr.Button('Listen to Chinese example')
137
+ with gr.Row():
138
+ with gr.Column(scale=1):
139
+ mode = gr.Radio(['Audio → MIDI', 'Text → speech → MIDI'], value='Audio → MIDI', label='Start with')
140
+ audio = gr.Audio(sources=['upload', 'microphone'], type='filepath', label='Input audio')
141
+ with gr.Group(visible=False) as speech_controls:
142
+ text = gr.Textbox(value='Hello, can you hear the piano speaking?', label='Words to speak', lines=3, max_length=300)
143
+ language = gr.Dropdown(['Auto', 'English', 'Chinese', 'Japanese', 'Korean', 'French', 'German', 'Spanish', 'Portuguese', 'Russian'], value='English', label='Language')
144
+ description = gr.Textbox(value=VOICE, label='Voice description', lines=3, max_length=600)
145
+ with gr.Accordion('Fitting options', open=False):
146
+ seconds = gr.Slider(.5, 12, value=8, step=.5, label='Fit the first N seconds')
147
+ budget = gr.Slider(20, 240, value=80, step=20, label='Search iteration budget')
148
+ refine = gr.Checkbox(value=False, label='Full per-note refinement (slower)')
149
+ submit = gr.Button('Generate piano MIDI', variant='primary')
150
+ gr.Markdown('CPU inference is supported. Speech generation and full refinement can take several minutes. '
151
+ 'Try the ready-made examples for instant playback. Clips are processed up to the selected duration.')
152
+ with gr.Column(scale=2):
153
+ status = gr.Markdown('Choose an example or create a new fit.')
154
+ source = gr.Audio(label='1 · Source used for fitting', interactive=False)
155
+ baseline = gr.Audio(label='2 · Simple spectral-peak baseline', interactive=False)
156
+ piano = gr.Audio(label='3 · Optimized piano MIDI rendered with Grand Piano', interactive=False)
157
+ midi = gr.File(label='Download MIDI', interactive=False)
158
+ poetry = json.loads((ROOT/'examples/poetry/prompts.json').read_text())
159
+ gr.Examples(
160
+ examples=[['Audio → MIDI', str(ROOT/'examples/poetry'/f"{row['name']}.wav"),
161
+ row['text'], row['language'], 12] for row in poetry],
162
+ inputs=[mode, audio, text, language, seconds], cache_examples=False,
163
+ label='Poetry voices · select to listen, then generate piano MIDI',
164
+ example_labels=[f"{row['title']} — {row['author']} ({row['language']})" for row in poetry],
165
+ )
166
+ selected_text = gr.Textbox(label='Selected text', interactive=False, lines=2)
167
+ text.change(lambda value: value, text, selected_text, queue=False)
168
+ with gr.Tabs():
169
+ with gr.Tab('Spectrogram comparison'):
170
+ spectrum = gr.Image(label='Shared scale · source / baseline / dictionary / optimized', interactive=False)
171
+ with gr.Tab('MIDI piano roll'):
172
+ roll = gr.Image(label='Note timing, pitch and velocity', interactive=False)
173
+ with gr.Tab('Measurements'):
174
+ measurements = gr.JSON(label='Lower log-band MAE is better; this does not measure intelligibility')
175
+ gr.Markdown('**How it works:** synthesize 657 piano templates → match weighted spectral bands → '
176
+ 'choose discrete notes → re-render MIDI → reduce measured spectral error. '
177
+ '[Algorithm and experiments](https://github.com/k-l-lambda/speaking-midi) · '
178
+ '[Qwen3-TTS](https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign)')
179
+ outputs = [status, source, baseline, piano, spectrum, roll, midi, measurements]
180
+ mode.change(lambda value: (gr.update(visible=value=='Audio → MIDI'), gr.update(visible=value!='Audio → MIDI')),
181
+ mode, [audio, speech_controls], queue=False)
182
+ submit.click(run, [mode,audio,text,language,description,seconds,budget,refine], outputs,
183
+ concurrency_limit=1, concurrency_id='compute', api_name='generate')
184
+ english.click(lambda: example('en'), outputs=outputs, api_name='english_example')
185
+ chinese.click(lambda: example('zh'), outputs=outputs, api_name='chinese_example')
186
+ return demo.queue(max_size=8, default_concurrency_limit=1)
187
+
188
+
189
+ if __name__ == '__main__':
190
+ build_ui().launch(server_name='0.0.0.0', server_port=int(os.getenv('PORT', '7860')),
191
+ max_file_size='25mb', allowed_paths=[str(RUNS), str(ROOT/'examples')])
assets/MuseScore_General_License.md ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MuseScore_General.sf2
2
+ ---
3
+
4
+ Current version: 0.2 13th May 2020
5
+
6
+ This is a scaled-down version of **MuseScore_General-HQ.sf2** that replaces some of the larger instruments to save memory and CPU on older PCs. This SoundFont is currently a work-in-progress. Detailed information on presets and sample sources used can be found in "MuseScore_General_Sample_Sources.csv". All instruments without attribution are still using samples from FluidR3Mono.
7
+
8
+ FluidR3 (original version) by Frank Wen Copyright (c) 2000-02
9
+
10
+ Mono conversion (FluidR3Mono) by Michael Cowgill Copyright (c) 2014-17
11
+
12
+ Adaptation for MuseScore_General.sf2 by S. Christian Collins Copyright (c) 2018-19
13
+
14
+ Temple Blocks instrument provided by Ethan Winer Copyright (c) 2002
15
+
16
+ Drumline Cymbals provided by Michael Schorsch Copyright (c) 2016
17
+
18
+ MuseScore_General.sf2 is shared under the MIT license as described in COPYING, as was FluidR3Mono and FluidR3 before it.
19
+
20
+ The COPYING and README files from the original FluidR3GM file are now displayed here for reference.
21
+
22
+ The acknowledgements and copyright notices above must be included in any derivative work.
23
+
24
+
25
+ README
26
+ ---
27
+
28
+ Fluid (R3) SoundFont
29
+
30
+ Copyright (c) 2000-2002, 2008 Frank Wen <getfrank@gmail.com>
31
+
32
+ I hereby release Fluid under the MIT license, as described in COPYING.
33
+
34
+
35
+ Thanks to Toby Smithe for helping to get Fluid included in Ubuntu.
36
+
37
+ This package, of course, is the original Release 3 of Fluid.
38
+
39
+
40
+ Fluid was constructed in part from samples found in the public domain that I
41
+ edited/cleaned/remixed/programmed and largely from recordings of my own and
42
+ in conjunction with the people below who helped along the way:
43
+
44
+ Suren M. Seron
45
+ Scott Hanan
46
+ Steve Aupperle
47
+ Chris Gillman
48
+ Alex Taubr
49
+ Chris Prola
50
+ Andrew Klenk
51
+ Winfried Hubbe
52
+ Dylan
53
+ Tim
54
+ Gort
55
+ Uros Katic
56
+ Ethan Winer (http://www.ethanwiner.com)
57
+
58
+
59
+ It's obviously been a few years since the project, but its nice to see that
60
+ people are still enjoying my work and getting good use out of it. As always,
61
+ I'd like to hear some work done with Fluid so email me, or just email me to
62
+ say hello and tell me what is going on in the computer musician world.
63
+ Who knows, maybe I'll kick start this project again? ;)
64
+
65
+
66
+ COPYING
67
+ ---
68
+
69
+ Mono version: Copyright (c) 2014-16 Michael Cowgill
70
+ Copyright (c) 2000-2002, 2008 Frank Wen <getfrank@gmail.com>
71
+
72
+ Permission is hereby granted, free of charge, to any person
73
+ obtaining a copy of this software and associated documentation
74
+ files (the "Software"), to deal in the Software without
75
+ restriction, including without limitation the rights to use,
76
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
77
+ copies of the Software, and to permit persons to whom the
78
+ Software is furnished to do so, subject to the following
79
+ conditions:
80
+
81
+ The above copyright notice and this permission notice shall be
82
+ included in all copies or substantial portions of the Software.
83
+
84
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
86
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
87
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
88
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
90
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
91
+ OTHER DEALINGS IN THE SOFTWARE.
assets/gm.sf3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5b85b6c2c61d10b2b91cddd41efcce7b25cd31c8271d511c73afafbef20b6fa3
3
+ size 39900972
deploy.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Publish with HF_TOKEN or an existing Hugging Face login; never store tokens here."""
2
+ from pathlib import Path
3
+ from huggingface_hub import HfApi
4
+
5
+ if __name__ == '__main__':
6
+ api = HfApi()
7
+ repo = f"{api.whoami()['name']}/hf-speaking-midi"
8
+ api.create_repo(repo, repo_type='space', space_sdk='gradio', exist_ok=True)
9
+ commit = api.upload_folder(repo_id=repo, repo_type='space', folder_path=Path(__file__).parent,
10
+ allow_patterns=['app.py', 'deploy.py', 'README.md', 'VALIDATION.md', 'requirements.txt', 'packages.txt',
11
+ '.gitignore', 'speaking_midi/*.py', 'scripts/*.py', 'tests/*.py',
12
+ 'assets/*', 'examples/**'],
13
+ commit_message='Build CPU-capable Speaking MIDI audio and VoiceDesign demo')
14
+ print(commit.commit_url)
examples/README.md ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Speaking MIDI demos
2
+
3
+ Two complete Qwen3-TTS 1.7B VoiceDesign recordings are fitted with the fixed `gm.sf3` Grand Piano preset. Open [index.html](index.html) from a local checkout for audio players and an interactive MIDI piano roll. Playback and visualization work offline. Playing one track pauses the others; clicking the piano roll seeks within the fitted piano audio.
4
+
5
+ | Language | Voice | Speech duration | Piano WAV duration |
6
+ |---|---|---:|---:|
7
+ | English | VoiceDesign | 7.84 s | 8.34 s |
8
+ | Chinese | VoiceDesign | 7.60 s | 8.10 s |
9
+
10
+ The piano files include 0.5 seconds of release tail. These are naturally generated utterances: the speech was not cropped, padded, or time-stretched to hit the target duration.
11
+
12
+ ## Voice design
13
+
14
+ Both samples pass the following exact instruction to `generate_voice_design`:
15
+
16
+ > 一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。
17
+
18
+ English translation: A gentle, confident young woman with a clear voice, a warm tone, and a light, engaging delivery.
19
+
20
+ The model is [Qwen3-TTS-12Hz-1.7B-VoiceDesign](https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign). It designs a voice from the description instead of selecting the Ryan or Vivian presets used in the earlier short experiment. The installed 0.6B CustomVoice interface ignores style instructions, so the generator rejects that combination rather than silently losing the requested description.
21
+
22
+ ## Files
23
+
24
+ Each language directory contains:
25
+
26
+ - `source.wav`: original Qwen3-TTS output, 24 kHz mono, floating-point WAV.
27
+ - `target.wav`: the same recording at the fitter's common RMS level of 0.035.
28
+ - `baseline`, `dictionary`, and `refined`: `.wav`, `.mid`, and decoded note `.json` for each method.
29
+ - `spectrogram.png`: target and all three reconstructions, with common display limits.
30
+ - `piano-roll.png`: the final exported MIDI, with note velocity encoded by color.
31
+ - `metrics.json`: measured distances, renderer identity, configuration, and repeatability.
32
+
33
+ `prompts.json` contains the texts and exact voice instructions. `manifest.json` records model provenance, measured sample durations, generation settings, and SHA256 hashes for the per-language assets. The HTML page embeds the final MIDI note events so it can open locally without fetching JSON or loading any external scripts.
34
+
35
+ The static piano roll uses a viridis velocity color scale, while the browser roll uses blue-to-yellow with a labeled velocity legend. Both show MIDI key-hold intervals, not the full audible decay.
36
+
37
+ ## Measured spectral fit
38
+
39
+ | Language | Method | Notes | Log-band MAE | Linear STFT convergence |
40
+ |---|---|---:|---:|---:|
41
+ | English | Baseline | 457 | 0.457734 | 0.831107 |
42
+ | English | Dictionary | 159 | 0.410655 | 0.759557 |
43
+ | English | Refined | 148 | 0.387474 | 0.760693 |
44
+ | Chinese | Baseline | 445 | 0.447968 | 0.831025 |
45
+ | Chinese | Dictionary | 123 | 0.411163 | 0.770461 |
46
+ | Chinese | Refined | 117 | 0.392300 | 0.798604 |
47
+
48
+ Final log-band MAE is 15.3% lower than the baseline for English and 12.4% lower for Chinese. Refinement optimizes log-band MAE; the linear STFT metric is reported separately and need not move in the same direction.
49
+
50
+ ## Evaluation scope
51
+
52
+ These longer samples have not received human intelligibility or ASR evaluation. Lower spectral error does not establish that the piano speaks understandable words. Recognition scores in the [research project's RESULTS.md](https://github.com/k-l-lambda/speaking-midi/blob/master/RESULTS.md) concern the earlier, shorter recordings only. All spectral metrics use the same target calibration and exclude the extra release tail beyond the speech duration. The baseline and fitted versions have different note counts.
53
+
54
+ ## Regenerate
55
+
56
+ After installing the dependencies listed in the top-level README, repeat fitting from this Space repository:
57
+
58
+ ```bash
59
+ python -m speaking_midi examples/en/source.wav --out outputs/demos/en
60
+ python -m speaking_midi examples/zh/source.wav --out outputs/demos/zh
61
+ python scripts/generate_speech.py --device cpu \
62
+ --model Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign \
63
+ --samples examples/prompts.json --out outputs/new-speech
64
+ ```
65
+
66
+ These commands write new outputs without modifying the committed examples. The complete demo packaging workflow is maintained in the [research repository](https://github.com/k-l-lambda/speaking-midi#readme). Use the committed `source.wav` files when comparing fitting methods on identical inputs; model/library changes can change generated speech.
examples/en/baseline.json ADDED
@@ -0,0 +1,2744 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "pitch": 64,
4
+ "velocity": 44,
5
+ "start": 0.0,
6
+ "duration": 0.06
7
+ },
8
+ {
9
+ "pitch": 76,
10
+ "velocity": 13,
11
+ "start": 0.0,
12
+ "duration": 0.06
13
+ },
14
+ {
15
+ "pitch": 83,
16
+ "velocity": 13,
17
+ "start": 0.0,
18
+ "duration": 0.06
19
+ },
20
+ {
21
+ "pitch": 64,
22
+ "velocity": 51,
23
+ "start": 0.06,
24
+ "duration": 0.06
25
+ },
26
+ {
27
+ "pitch": 76,
28
+ "velocity": 26,
29
+ "start": 0.06,
30
+ "duration": 0.06
31
+ },
32
+ {
33
+ "pitch": 83,
34
+ "velocity": 20,
35
+ "start": 0.06,
36
+ "duration": 0.06
37
+ },
38
+ {
39
+ "pitch": 95,
40
+ "velocity": 11,
41
+ "start": 0.06,
42
+ "duration": 0.06
43
+ },
44
+ {
45
+ "pitch": 98,
46
+ "velocity": 10,
47
+ "start": 0.06,
48
+ "duration": 0.06
49
+ },
50
+ {
51
+ "pitch": 104,
52
+ "velocity": 12,
53
+ "start": 0.06,
54
+ "duration": 0.06
55
+ },
56
+ {
57
+ "pitch": 64,
58
+ "velocity": 45,
59
+ "start": 0.12,
60
+ "duration": 0.06
61
+ },
62
+ {
63
+ "pitch": 91,
64
+ "velocity": 8,
65
+ "start": 0.12,
66
+ "duration": 0.06
67
+ },
68
+ {
69
+ "pitch": 65,
70
+ "velocity": 43,
71
+ "start": 0.18,
72
+ "duration": 0.06
73
+ },
74
+ {
75
+ "pitch": 66,
76
+ "velocity": 45,
77
+ "start": 0.18,
78
+ "duration": 0.06
79
+ },
80
+ {
81
+ "pitch": 78,
82
+ "velocity": 40,
83
+ "start": 0.18,
84
+ "duration": 0.06
85
+ },
86
+ {
87
+ "pitch": 84,
88
+ "velocity": 18,
89
+ "start": 0.18,
90
+ "duration": 0.06
91
+ },
92
+ {
93
+ "pitch": 85,
94
+ "velocity": 35,
95
+ "start": 0.18,
96
+ "duration": 0.06
97
+ },
98
+ {
99
+ "pitch": 89,
100
+ "velocity": 10,
101
+ "start": 0.18,
102
+ "duration": 0.06
103
+ },
104
+ {
105
+ "pitch": 90,
106
+ "velocity": 17,
107
+ "start": 0.18,
108
+ "duration": 0.06
109
+ },
110
+ {
111
+ "pitch": 67,
112
+ "velocity": 45,
113
+ "start": 0.24,
114
+ "duration": 0.06
115
+ },
116
+ {
117
+ "pitch": 79,
118
+ "velocity": 45,
119
+ "start": 0.24,
120
+ "duration": 0.06
121
+ },
122
+ {
123
+ "pitch": 86,
124
+ "velocity": 41,
125
+ "start": 0.24,
126
+ "duration": 0.06
127
+ },
128
+ {
129
+ "pitch": 91,
130
+ "velocity": 35,
131
+ "start": 0.24,
132
+ "duration": 0.06
133
+ },
134
+ {
135
+ "pitch": 95,
136
+ "velocity": 16,
137
+ "start": 0.24,
138
+ "duration": 0.06
139
+ },
140
+ {
141
+ "pitch": 101,
142
+ "velocity": 13,
143
+ "start": 0.24,
144
+ "duration": 0.06
145
+ },
146
+ {
147
+ "pitch": 103,
148
+ "velocity": 12,
149
+ "start": 0.24,
150
+ "duration": 0.06
151
+ },
152
+ {
153
+ "pitch": 67,
154
+ "velocity": 42,
155
+ "start": 0.3,
156
+ "duration": 0.06
157
+ },
158
+ {
159
+ "pitch": 79,
160
+ "velocity": 41,
161
+ "start": 0.3,
162
+ "duration": 0.06
163
+ },
164
+ {
165
+ "pitch": 86,
166
+ "velocity": 23,
167
+ "start": 0.3,
168
+ "duration": 0.06
169
+ },
170
+ {
171
+ "pitch": 91,
172
+ "velocity": 35,
173
+ "start": 0.3,
174
+ "duration": 0.06
175
+ },
176
+ {
177
+ "pitch": 95,
178
+ "velocity": 19,
179
+ "start": 0.3,
180
+ "duration": 0.06
181
+ },
182
+ {
183
+ "pitch": 98,
184
+ "velocity": 30,
185
+ "start": 0.3,
186
+ "duration": 0.06
187
+ },
188
+ {
189
+ "pitch": 66,
190
+ "velocity": 47,
191
+ "start": 0.36,
192
+ "duration": 0.06
193
+ },
194
+ {
195
+ "pitch": 69,
196
+ "velocity": 9,
197
+ "start": 0.36,
198
+ "duration": 0.06
199
+ },
200
+ {
201
+ "pitch": 79,
202
+ "velocity": 31,
203
+ "start": 0.36,
204
+ "duration": 0.06
205
+ },
206
+ {
207
+ "pitch": 86,
208
+ "velocity": 16,
209
+ "start": 0.36,
210
+ "duration": 0.06
211
+ },
212
+ {
213
+ "pitch": 101,
214
+ "velocity": 14,
215
+ "start": 0.36,
216
+ "duration": 0.06
217
+ },
218
+ {
219
+ "pitch": 103,
220
+ "velocity": 11,
221
+ "start": 0.36,
222
+ "duration": 0.06
223
+ },
224
+ {
225
+ "pitch": 65,
226
+ "velocity": 46,
227
+ "start": 0.42,
228
+ "duration": 0.06
229
+ },
230
+ {
231
+ "pitch": 75,
232
+ "velocity": 15,
233
+ "start": 0.42,
234
+ "duration": 0.06
235
+ },
236
+ {
237
+ "pitch": 77,
238
+ "velocity": 13,
239
+ "start": 0.42,
240
+ "duration": 0.06
241
+ },
242
+ {
243
+ "pitch": 79,
244
+ "velocity": 18,
245
+ "start": 0.42,
246
+ "duration": 0.06
247
+ },
248
+ {
249
+ "pitch": 84,
250
+ "velocity": 9,
251
+ "start": 0.42,
252
+ "duration": 0.06
253
+ },
254
+ {
255
+ "pitch": 63,
256
+ "velocity": 48,
257
+ "start": 0.48,
258
+ "duration": 0.06000000000000005
259
+ },
260
+ {
261
+ "pitch": 74,
262
+ "velocity": 41,
263
+ "start": 0.48,
264
+ "duration": 0.06000000000000005
265
+ },
266
+ {
267
+ "pitch": 81,
268
+ "velocity": 31,
269
+ "start": 0.48,
270
+ "duration": 0.06000000000000005
271
+ },
272
+ {
273
+ "pitch": 86,
274
+ "velocity": 20,
275
+ "start": 0.48,
276
+ "duration": 0.06000000000000005
277
+ },
278
+ {
279
+ "pitch": 90,
280
+ "velocity": 14,
281
+ "start": 0.48,
282
+ "duration": 0.06000000000000005
283
+ },
284
+ {
285
+ "pitch": 96,
286
+ "velocity": 19,
287
+ "start": 0.48,
288
+ "duration": 0.06000000000000005
289
+ },
290
+ {
291
+ "pitch": 98,
292
+ "velocity": 14,
293
+ "start": 0.48,
294
+ "duration": 0.06000000000000005
295
+ },
296
+ {
297
+ "pitch": 100,
298
+ "velocity": 15,
299
+ "start": 0.48,
300
+ "duration": 0.06000000000000005
301
+ },
302
+ {
303
+ "pitch": 62,
304
+ "velocity": 40,
305
+ "start": 0.54,
306
+ "duration": 0.06000000000000005
307
+ },
308
+ {
309
+ "pitch": 74,
310
+ "velocity": 40,
311
+ "start": 0.54,
312
+ "duration": 0.06000000000000005
313
+ },
314
+ {
315
+ "pitch": 81,
316
+ "velocity": 34,
317
+ "start": 0.54,
318
+ "duration": 0.06000000000000005
319
+ },
320
+ {
321
+ "pitch": 86,
322
+ "velocity": 25,
323
+ "start": 0.54,
324
+ "duration": 0.06000000000000005
325
+ },
326
+ {
327
+ "pitch": 90,
328
+ "velocity": 19,
329
+ "start": 0.54,
330
+ "duration": 0.06000000000000005
331
+ },
332
+ {
333
+ "pitch": 93,
334
+ "velocity": 18,
335
+ "start": 0.54,
336
+ "duration": 0.06000000000000005
337
+ },
338
+ {
339
+ "pitch": 95,
340
+ "velocity": 28,
341
+ "start": 0.54,
342
+ "duration": 0.06000000000000005
343
+ },
344
+ {
345
+ "pitch": 98,
346
+ "velocity": 13,
347
+ "start": 0.54,
348
+ "duration": 0.06000000000000005
349
+ },
350
+ {
351
+ "pitch": 61,
352
+ "velocity": 40,
353
+ "start": 0.6000000000000001,
354
+ "duration": 0.06000000000000005
355
+ },
356
+ {
357
+ "pitch": 74,
358
+ "velocity": 33,
359
+ "start": 0.6000000000000001,
360
+ "duration": 0.06000000000000005
361
+ },
362
+ {
363
+ "pitch": 81,
364
+ "velocity": 13,
365
+ "start": 0.6000000000000001,
366
+ "duration": 0.06000000000000005
367
+ },
368
+ {
369
+ "pitch": 93,
370
+ "velocity": 10,
371
+ "start": 0.6000000000000001,
372
+ "duration": 0.06000000000000005
373
+ },
374
+ {
375
+ "pitch": 95,
376
+ "velocity": 17,
377
+ "start": 0.6000000000000001,
378
+ "duration": 0.06000000000000005
379
+ },
380
+ {
381
+ "pitch": 98,
382
+ "velocity": 11,
383
+ "start": 0.6000000000000001,
384
+ "duration": 0.06000000000000005
385
+ },
386
+ {
387
+ "pitch": 100,
388
+ "velocity": 14,
389
+ "start": 0.6000000000000001,
390
+ "duration": 0.06000000000000005
391
+ },
392
+ {
393
+ "pitch": 102,
394
+ "velocity": 11,
395
+ "start": 0.6000000000000001,
396
+ "duration": 0.06000000000000005
397
+ },
398
+ {
399
+ "pitch": 61,
400
+ "velocity": 44,
401
+ "start": 0.6600000000000001,
402
+ "duration": 0.06000000000000005
403
+ },
404
+ {
405
+ "pitch": 73,
406
+ "velocity": 31,
407
+ "start": 0.6600000000000001,
408
+ "duration": 0.06000000000000005
409
+ },
410
+ {
411
+ "pitch": 80,
412
+ "velocity": 13,
413
+ "start": 0.6600000000000001,
414
+ "duration": 0.06000000000000005
415
+ },
416
+ {
417
+ "pitch": 99,
418
+ "velocity": 10,
419
+ "start": 0.6600000000000001,
420
+ "duration": 0.06000000000000005
421
+ },
422
+ {
423
+ "pitch": 101,
424
+ "velocity": 11,
425
+ "start": 0.6600000000000001,
426
+ "duration": 0.06000000000000005
427
+ },
428
+ {
429
+ "pitch": 103,
430
+ "velocity": 9,
431
+ "start": 0.6600000000000001,
432
+ "duration": 0.06000000000000005
433
+ },
434
+ {
435
+ "pitch": 60,
436
+ "velocity": 41,
437
+ "start": 0.7200000000000002,
438
+ "duration": 0.06000000000000005
439
+ },
440
+ {
441
+ "pitch": 73,
442
+ "velocity": 40,
443
+ "start": 0.7200000000000002,
444
+ "duration": 0.06000000000000005
445
+ },
446
+ {
447
+ "pitch": 79,
448
+ "velocity": 15,
449
+ "start": 0.7200000000000002,
450
+ "duration": 0.06000000000000005
451
+ },
452
+ {
453
+ "pitch": 83,
454
+ "velocity": 20,
455
+ "start": 0.7200000000000002,
456
+ "duration": 0.06000000000000005
457
+ },
458
+ {
459
+ "pitch": 84,
460
+ "velocity": 32,
461
+ "start": 0.7200000000000002,
462
+ "duration": 0.06000000000000005
463
+ },
464
+ {
465
+ "pitch": 88,
466
+ "velocity": 31,
467
+ "start": 0.7200000000000002,
468
+ "duration": 0.06000000000000005
469
+ },
470
+ {
471
+ "pitch": 91,
472
+ "velocity": 16,
473
+ "start": 0.7200000000000002,
474
+ "duration": 0.06000000000000005
475
+ },
476
+ {
477
+ "pitch": 61,
478
+ "velocity": 42,
479
+ "start": 0.7800000000000002,
480
+ "duration": 0.06000000000000005
481
+ },
482
+ {
483
+ "pitch": 72,
484
+ "velocity": 38,
485
+ "start": 0.7800000000000002,
486
+ "duration": 0.06000000000000005
487
+ },
488
+ {
489
+ "pitch": 79,
490
+ "velocity": 42,
491
+ "start": 0.7800000000000002,
492
+ "duration": 0.06000000000000005
493
+ },
494
+ {
495
+ "pitch": 84,
496
+ "velocity": 39,
497
+ "start": 0.7800000000000002,
498
+ "duration": 0.06000000000000005
499
+ },
500
+ {
501
+ "pitch": 88,
502
+ "velocity": 36,
503
+ "start": 0.7800000000000002,
504
+ "duration": 0.06000000000000005
505
+ },
506
+ {
507
+ "pitch": 91,
508
+ "velocity": 36,
509
+ "start": 0.7800000000000002,
510
+ "duration": 0.06000000000000005
511
+ },
512
+ {
513
+ "pitch": 94,
514
+ "velocity": 22,
515
+ "start": 0.7800000000000002,
516
+ "duration": 0.06000000000000005
517
+ },
518
+ {
519
+ "pitch": 106,
520
+ "velocity": 13,
521
+ "start": 0.7800000000000002,
522
+ "duration": 0.06000000000000005
523
+ },
524
+ {
525
+ "pitch": 61,
526
+ "velocity": 43,
527
+ "start": 0.8400000000000003,
528
+ "duration": 0.06000000000000005
529
+ },
530
+ {
531
+ "pitch": 73,
532
+ "velocity": 33,
533
+ "start": 0.8400000000000003,
534
+ "duration": 0.06000000000000005
535
+ },
536
+ {
537
+ "pitch": 80,
538
+ "velocity": 37,
539
+ "start": 0.8400000000000003,
540
+ "duration": 0.06000000000000005
541
+ },
542
+ {
543
+ "pitch": 85,
544
+ "velocity": 33,
545
+ "start": 0.8400000000000003,
546
+ "duration": 0.06000000000000005
547
+ },
548
+ {
549
+ "pitch": 88,
550
+ "velocity": 22,
551
+ "start": 0.8400000000000003,
552
+ "duration": 0.06000000000000005
553
+ },
554
+ {
555
+ "pitch": 92,
556
+ "velocity": 25,
557
+ "start": 0.8400000000000003,
558
+ "duration": 0.06000000000000005
559
+ },
560
+ {
561
+ "pitch": 94,
562
+ "velocity": 31,
563
+ "start": 0.8400000000000003,
564
+ "duration": 0.06000000000000005
565
+ },
566
+ {
567
+ "pitch": 97,
568
+ "velocity": 19,
569
+ "start": 0.8400000000000003,
570
+ "duration": 0.06000000000000005
571
+ },
572
+ {
573
+ "pitch": 63,
574
+ "velocity": 39,
575
+ "start": 0.9000000000000004,
576
+ "duration": 0.06000000000000005
577
+ },
578
+ {
579
+ "pitch": 73,
580
+ "velocity": 15,
581
+ "start": 0.9000000000000004,
582
+ "duration": 0.06000000000000005
583
+ },
584
+ {
585
+ "pitch": 75,
586
+ "velocity": 11,
587
+ "start": 0.9000000000000004,
588
+ "duration": 0.06000000000000005
589
+ },
590
+ {
591
+ "pitch": 80,
592
+ "velocity": 11,
593
+ "start": 0.9000000000000004,
594
+ "duration": 0.06000000000000005
595
+ },
596
+ {
597
+ "pitch": 65,
598
+ "velocity": 37,
599
+ "start": 0.9600000000000004,
600
+ "duration": 0.06000000000000005
601
+ },
602
+ {
603
+ "pitch": 79,
604
+ "velocity": 20,
605
+ "start": 0.9600000000000004,
606
+ "duration": 0.06000000000000005
607
+ },
608
+ {
609
+ "pitch": 67,
610
+ "velocity": 19,
611
+ "start": 1.0200000000000005,
612
+ "duration": 0.06000000000000005
613
+ },
614
+ {
615
+ "pitch": 61,
616
+ "velocity": 29,
617
+ "start": 1.2600000000000005,
618
+ "duration": 0.06000000000000005
619
+ },
620
+ {
621
+ "pitch": 63,
622
+ "velocity": 13,
623
+ "start": 1.2600000000000005,
624
+ "duration": 0.06000000000000005
625
+ },
626
+ {
627
+ "pitch": 67,
628
+ "velocity": 11,
629
+ "start": 1.2600000000000005,
630
+ "duration": 0.06000000000000005
631
+ },
632
+ {
633
+ "pitch": 73,
634
+ "velocity": 33,
635
+ "start": 1.2600000000000005,
636
+ "duration": 0.06000000000000005
637
+ },
638
+ {
639
+ "pitch": 80,
640
+ "velocity": 17,
641
+ "start": 1.2600000000000005,
642
+ "duration": 0.06000000000000005
643
+ },
644
+ {
645
+ "pitch": 85,
646
+ "velocity": 14,
647
+ "start": 1.2600000000000005,
648
+ "duration": 0.06000000000000005
649
+ },
650
+ {
651
+ "pitch": 88,
652
+ "velocity": 13,
653
+ "start": 1.2600000000000005,
654
+ "duration": 0.06000000000000005
655
+ },
656
+ {
657
+ "pitch": 91,
658
+ "velocity": 12,
659
+ "start": 1.2600000000000005,
660
+ "duration": 0.06000000000000005
661
+ },
662
+ {
663
+ "pitch": 59,
664
+ "velocity": 32,
665
+ "start": 1.3200000000000005,
666
+ "duration": 0.06000000000000005
667
+ },
668
+ {
669
+ "pitch": 61,
670
+ "velocity": 32,
671
+ "start": 1.3200000000000005,
672
+ "duration": 0.06000000000000005
673
+ },
674
+ {
675
+ "pitch": 71,
676
+ "velocity": 11,
677
+ "start": 1.3200000000000005,
678
+ "duration": 0.06000000000000005
679
+ },
680
+ {
681
+ "pitch": 73,
682
+ "velocity": 33,
683
+ "start": 1.3200000000000005,
684
+ "duration": 0.06000000000000005
685
+ },
686
+ {
687
+ "pitch": 80,
688
+ "velocity": 19,
689
+ "start": 1.3200000000000005,
690
+ "duration": 0.06000000000000005
691
+ },
692
+ {
693
+ "pitch": 84,
694
+ "velocity": 15,
695
+ "start": 1.3200000000000005,
696
+ "duration": 0.06000000000000005
697
+ },
698
+ {
699
+ "pitch": 85,
700
+ "velocity": 20,
701
+ "start": 1.3200000000000005,
702
+ "duration": 0.06000000000000005
703
+ },
704
+ {
705
+ "pitch": 88,
706
+ "velocity": 13,
707
+ "start": 1.3200000000000005,
708
+ "duration": 0.06000000000000005
709
+ },
710
+ {
711
+ "pitch": 60,
712
+ "velocity": 35,
713
+ "start": 1.3800000000000006,
714
+ "duration": 0.06000000000000005
715
+ },
716
+ {
717
+ "pitch": 72,
718
+ "velocity": 27,
719
+ "start": 1.3800000000000006,
720
+ "duration": 0.06000000000000005
721
+ },
722
+ {
723
+ "pitch": 79,
724
+ "velocity": 25,
725
+ "start": 1.3800000000000006,
726
+ "duration": 0.06000000000000005
727
+ },
728
+ {
729
+ "pitch": 84,
730
+ "velocity": 8,
731
+ "start": 1.3800000000000006,
732
+ "duration": 0.06000000000000005
733
+ },
734
+ {
735
+ "pitch": 60,
736
+ "velocity": 44,
737
+ "start": 1.4400000000000006,
738
+ "duration": 0.06000000000000005
739
+ },
740
+ {
741
+ "pitch": 72,
742
+ "velocity": 38,
743
+ "start": 1.4400000000000006,
744
+ "duration": 0.06000000000000005
745
+ },
746
+ {
747
+ "pitch": 79,
748
+ "velocity": 38,
749
+ "start": 1.4400000000000006,
750
+ "duration": 0.06000000000000005
751
+ },
752
+ {
753
+ "pitch": 80,
754
+ "velocity": 8,
755
+ "start": 1.4400000000000006,
756
+ "duration": 0.06000000000000005
757
+ },
758
+ {
759
+ "pitch": 84,
760
+ "velocity": 41,
761
+ "start": 1.4400000000000006,
762
+ "duration": 0.06000000000000005
763
+ },
764
+ {
765
+ "pitch": 88,
766
+ "velocity": 27,
767
+ "start": 1.4400000000000006,
768
+ "duration": 0.06000000000000005
769
+ },
770
+ {
771
+ "pitch": 91,
772
+ "velocity": 20,
773
+ "start": 1.4400000000000006,
774
+ "duration": 0.06000000000000005
775
+ },
776
+ {
777
+ "pitch": 94,
778
+ "velocity": 12,
779
+ "start": 1.4400000000000006,
780
+ "duration": 0.06000000000000005
781
+ },
782
+ {
783
+ "pitch": 60,
784
+ "velocity": 45,
785
+ "start": 1.5000000000000007,
786
+ "duration": 0.06000000000000005
787
+ },
788
+ {
789
+ "pitch": 72,
790
+ "velocity": 30,
791
+ "start": 1.5000000000000007,
792
+ "duration": 0.06000000000000005
793
+ },
794
+ {
795
+ "pitch": 79,
796
+ "velocity": 31,
797
+ "start": 1.5000000000000007,
798
+ "duration": 0.06000000000000005
799
+ },
800
+ {
801
+ "pitch": 84,
802
+ "velocity": 29,
803
+ "start": 1.5000000000000007,
804
+ "duration": 0.06000000000000005
805
+ },
806
+ {
807
+ "pitch": 88,
808
+ "velocity": 26,
809
+ "start": 1.5000000000000007,
810
+ "duration": 0.06000000000000005
811
+ },
812
+ {
813
+ "pitch": 91,
814
+ "velocity": 28,
815
+ "start": 1.5000000000000007,
816
+ "duration": 0.06000000000000005
817
+ },
818
+ {
819
+ "pitch": 93,
820
+ "velocity": 25,
821
+ "start": 1.5000000000000007,
822
+ "duration": 0.06000000000000005
823
+ },
824
+ {
825
+ "pitch": 58,
826
+ "velocity": 44,
827
+ "start": 1.5600000000000007,
828
+ "duration": 0.06000000000000005
829
+ },
830
+ {
831
+ "pitch": 71,
832
+ "velocity": 23,
833
+ "start": 1.5600000000000007,
834
+ "duration": 0.06000000000000005
835
+ },
836
+ {
837
+ "pitch": 78,
838
+ "velocity": 15,
839
+ "start": 1.5600000000000007,
840
+ "duration": 0.06000000000000005
841
+ },
842
+ {
843
+ "pitch": 83,
844
+ "velocity": 19,
845
+ "start": 1.5600000000000007,
846
+ "duration": 0.06000000000000005
847
+ },
848
+ {
849
+ "pitch": 86,
850
+ "velocity": 11,
851
+ "start": 1.5600000000000007,
852
+ "duration": 0.06000000000000005
853
+ },
854
+ {
855
+ "pitch": 90,
856
+ "velocity": 8,
857
+ "start": 1.5600000000000007,
858
+ "duration": 0.06000000000000005
859
+ },
860
+ {
861
+ "pitch": 93,
862
+ "velocity": 13,
863
+ "start": 1.5600000000000007,
864
+ "duration": 0.06000000000000005
865
+ },
866
+ {
867
+ "pitch": 58,
868
+ "velocity": 36,
869
+ "start": 1.6200000000000008,
870
+ "duration": 0.06000000000000005
871
+ },
872
+ {
873
+ "pitch": 63,
874
+ "velocity": 37,
875
+ "start": 1.7400000000000009,
876
+ "duration": 0.06000000000000005
877
+ },
878
+ {
879
+ "pitch": 76,
880
+ "velocity": 38,
881
+ "start": 1.7400000000000009,
882
+ "duration": 0.06000000000000005
883
+ },
884
+ {
885
+ "pitch": 83,
886
+ "velocity": 31,
887
+ "start": 1.7400000000000009,
888
+ "duration": 0.06000000000000005
889
+ },
890
+ {
891
+ "pitch": 87,
892
+ "velocity": 13,
893
+ "start": 1.7400000000000009,
894
+ "duration": 0.06000000000000005
895
+ },
896
+ {
897
+ "pitch": 91,
898
+ "velocity": 19,
899
+ "start": 1.7400000000000009,
900
+ "duration": 0.06000000000000005
901
+ },
902
+ {
903
+ "pitch": 94,
904
+ "velocity": 24,
905
+ "start": 1.7400000000000009,
906
+ "duration": 0.06000000000000005
907
+ },
908
+ {
909
+ "pitch": 63,
910
+ "velocity": 45,
911
+ "start": 1.800000000000001,
912
+ "duration": 0.06000000000000005
913
+ },
914
+ {
915
+ "pitch": 75,
916
+ "velocity": 42,
917
+ "start": 1.800000000000001,
918
+ "duration": 0.06000000000000005
919
+ },
920
+ {
921
+ "pitch": 82,
922
+ "velocity": 40,
923
+ "start": 1.800000000000001,
924
+ "duration": 0.06000000000000005
925
+ },
926
+ {
927
+ "pitch": 87,
928
+ "velocity": 19,
929
+ "start": 1.800000000000001,
930
+ "duration": 0.06000000000000005
931
+ },
932
+ {
933
+ "pitch": 91,
934
+ "velocity": 28,
935
+ "start": 1.800000000000001,
936
+ "duration": 0.06000000000000005
937
+ },
938
+ {
939
+ "pitch": 94,
940
+ "velocity": 25,
941
+ "start": 1.800000000000001,
942
+ "duration": 0.06000000000000005
943
+ },
944
+ {
945
+ "pitch": 63,
946
+ "velocity": 48,
947
+ "start": 1.860000000000001,
948
+ "duration": 0.06000000000000005
949
+ },
950
+ {
951
+ "pitch": 75,
952
+ "velocity": 13,
953
+ "start": 1.860000000000001,
954
+ "duration": 0.06000000000000005
955
+ },
956
+ {
957
+ "pitch": 82,
958
+ "velocity": 14,
959
+ "start": 1.860000000000001,
960
+ "duration": 0.06000000000000005
961
+ },
962
+ {
963
+ "pitch": 87,
964
+ "velocity": 8,
965
+ "start": 1.860000000000001,
966
+ "duration": 0.06000000000000005
967
+ },
968
+ {
969
+ "pitch": 91,
970
+ "velocity": 18,
971
+ "start": 1.860000000000001,
972
+ "duration": 0.06000000000000005
973
+ },
974
+ {
975
+ "pitch": 63,
976
+ "velocity": 44,
977
+ "start": 1.920000000000001,
978
+ "duration": 0.06000000000000005
979
+ },
980
+ {
981
+ "pitch": 74,
982
+ "velocity": 36,
983
+ "start": 1.920000000000001,
984
+ "duration": 0.06000000000000005
985
+ },
986
+ {
987
+ "pitch": 81,
988
+ "velocity": 32,
989
+ "start": 1.920000000000001,
990
+ "duration": 0.06000000000000005
991
+ },
992
+ {
993
+ "pitch": 86,
994
+ "velocity": 23,
995
+ "start": 1.920000000000001,
996
+ "duration": 0.06000000000000005
997
+ },
998
+ {
999
+ "pitch": 90,
1000
+ "velocity": 24,
1001
+ "start": 1.920000000000001,
1002
+ "duration": 0.06000000000000005
1003
+ },
1004
+ {
1005
+ "pitch": 91,
1006
+ "velocity": 12,
1007
+ "start": 1.920000000000001,
1008
+ "duration": 0.06000000000000005
1009
+ },
1010
+ {
1011
+ "pitch": 93,
1012
+ "velocity": 22,
1013
+ "start": 1.920000000000001,
1014
+ "duration": 0.06000000000000005
1015
+ },
1016
+ {
1017
+ "pitch": 96,
1018
+ "velocity": 15,
1019
+ "start": 1.920000000000001,
1020
+ "duration": 0.06000000000000005
1021
+ },
1022
+ {
1023
+ "pitch": 61,
1024
+ "velocity": 39,
1025
+ "start": 1.980000000000001,
1026
+ "duration": 0.05999999999999983
1027
+ },
1028
+ {
1029
+ "pitch": 72,
1030
+ "velocity": 28,
1031
+ "start": 1.980000000000001,
1032
+ "duration": 0.05999999999999983
1033
+ },
1034
+ {
1035
+ "pitch": 73,
1036
+ "velocity": 30,
1037
+ "start": 1.980000000000001,
1038
+ "duration": 0.05999999999999983
1039
+ },
1040
+ {
1041
+ "pitch": 81,
1042
+ "velocity": 26,
1043
+ "start": 1.980000000000001,
1044
+ "duration": 0.05999999999999983
1045
+ },
1046
+ {
1047
+ "pitch": 84,
1048
+ "velocity": 10,
1049
+ "start": 1.980000000000001,
1050
+ "duration": 0.05999999999999983
1051
+ },
1052
+ {
1053
+ "pitch": 86,
1054
+ "velocity": 13,
1055
+ "start": 1.980000000000001,
1056
+ "duration": 0.05999999999999983
1057
+ },
1058
+ {
1059
+ "pitch": 96,
1060
+ "velocity": 12,
1061
+ "start": 1.980000000000001,
1062
+ "duration": 0.05999999999999983
1063
+ },
1064
+ {
1065
+ "pitch": 98,
1066
+ "velocity": 9,
1067
+ "start": 1.980000000000001,
1068
+ "duration": 0.05999999999999983
1069
+ },
1070
+ {
1071
+ "pitch": 57,
1072
+ "velocity": 34,
1073
+ "start": 2.040000000000001,
1074
+ "duration": 0.06000000000000005
1075
+ },
1076
+ {
1077
+ "pitch": 59,
1078
+ "velocity": 33,
1079
+ "start": 2.040000000000001,
1080
+ "duration": 0.06000000000000005
1081
+ },
1082
+ {
1083
+ "pitch": 70,
1084
+ "velocity": 24,
1085
+ "start": 2.040000000000001,
1086
+ "duration": 0.06000000000000005
1087
+ },
1088
+ {
1089
+ "pitch": 71,
1090
+ "velocity": 24,
1091
+ "start": 2.040000000000001,
1092
+ "duration": 0.06000000000000005
1093
+ },
1094
+ {
1095
+ "pitch": 57,
1096
+ "velocity": 32,
1097
+ "start": 2.100000000000001,
1098
+ "duration": 0.06000000000000005
1099
+ },
1100
+ {
1101
+ "pitch": 70,
1102
+ "velocity": 25,
1103
+ "start": 2.100000000000001,
1104
+ "duration": 0.06000000000000005
1105
+ },
1106
+ {
1107
+ "pitch": 61,
1108
+ "velocity": 29,
1109
+ "start": 2.340000000000001,
1110
+ "duration": 0.06000000000000005
1111
+ },
1112
+ {
1113
+ "pitch": 95,
1114
+ "velocity": 9,
1115
+ "start": 2.340000000000001,
1116
+ "duration": 0.06000000000000005
1117
+ },
1118
+ {
1119
+ "pitch": 61,
1120
+ "velocity": 46,
1121
+ "start": 2.4000000000000012,
1122
+ "duration": 0.06000000000000005
1123
+ },
1124
+ {
1125
+ "pitch": 73,
1126
+ "velocity": 10,
1127
+ "start": 2.4000000000000012,
1128
+ "duration": 0.06000000000000005
1129
+ },
1130
+ {
1131
+ "pitch": 80,
1132
+ "velocity": 11,
1133
+ "start": 2.4000000000000012,
1134
+ "duration": 0.06000000000000005
1135
+ },
1136
+ {
1137
+ "pitch": 85,
1138
+ "velocity": 8,
1139
+ "start": 2.4000000000000012,
1140
+ "duration": 0.06000000000000005
1141
+ },
1142
+ {
1143
+ "pitch": 95,
1144
+ "velocity": 12,
1145
+ "start": 2.4000000000000012,
1146
+ "duration": 0.06000000000000005
1147
+ },
1148
+ {
1149
+ "pitch": 98,
1150
+ "velocity": 14,
1151
+ "start": 2.4000000000000012,
1152
+ "duration": 0.06000000000000005
1153
+ },
1154
+ {
1155
+ "pitch": 100,
1156
+ "velocity": 13,
1157
+ "start": 2.4000000000000012,
1158
+ "duration": 0.06000000000000005
1159
+ },
1160
+ {
1161
+ "pitch": 102,
1162
+ "velocity": 14,
1163
+ "start": 2.4000000000000012,
1164
+ "duration": 0.06000000000000005
1165
+ },
1166
+ {
1167
+ "pitch": 63,
1168
+ "velocity": 46,
1169
+ "start": 2.4600000000000013,
1170
+ "duration": 0.06000000000000005
1171
+ },
1172
+ {
1173
+ "pitch": 76,
1174
+ "velocity": 16,
1175
+ "start": 2.4600000000000013,
1176
+ "duration": 0.06000000000000005
1177
+ },
1178
+ {
1179
+ "pitch": 65,
1180
+ "velocity": 50,
1181
+ "start": 2.5200000000000014,
1182
+ "duration": 0.06000000000000005
1183
+ },
1184
+ {
1185
+ "pitch": 77,
1186
+ "velocity": 19,
1187
+ "start": 2.5200000000000014,
1188
+ "duration": 0.06000000000000005
1189
+ },
1190
+ {
1191
+ "pitch": 84,
1192
+ "velocity": 8,
1193
+ "start": 2.5200000000000014,
1194
+ "duration": 0.06000000000000005
1195
+ },
1196
+ {
1197
+ "pitch": 63,
1198
+ "velocity": 47,
1199
+ "start": 2.5800000000000014,
1200
+ "duration": 0.06000000000000005
1201
+ },
1202
+ {
1203
+ "pitch": 74,
1204
+ "velocity": 19,
1205
+ "start": 2.5800000000000014,
1206
+ "duration": 0.06000000000000005
1207
+ },
1208
+ {
1209
+ "pitch": 81,
1210
+ "velocity": 9,
1211
+ "start": 2.5800000000000014,
1212
+ "duration": 0.06000000000000005
1213
+ },
1214
+ {
1215
+ "pitch": 82,
1216
+ "velocity": 10,
1217
+ "start": 2.5800000000000014,
1218
+ "duration": 0.06000000000000005
1219
+ },
1220
+ {
1221
+ "pitch": 59,
1222
+ "velocity": 42,
1223
+ "start": 2.6400000000000015,
1224
+ "duration": 0.06000000000000005
1225
+ },
1226
+ {
1227
+ "pitch": 71,
1228
+ "velocity": 19,
1229
+ "start": 2.6400000000000015,
1230
+ "duration": 0.06000000000000005
1231
+ },
1232
+ {
1233
+ "pitch": 73,
1234
+ "velocity": 14,
1235
+ "start": 2.6400000000000015,
1236
+ "duration": 0.06000000000000005
1237
+ },
1238
+ {
1239
+ "pitch": 79,
1240
+ "velocity": 12,
1241
+ "start": 2.6400000000000015,
1242
+ "duration": 0.06000000000000005
1243
+ },
1244
+ {
1245
+ "pitch": 57,
1246
+ "velocity": 41,
1247
+ "start": 2.7000000000000015,
1248
+ "duration": 0.06000000000000005
1249
+ },
1250
+ {
1251
+ "pitch": 69,
1252
+ "velocity": 22,
1253
+ "start": 2.7000000000000015,
1254
+ "duration": 0.06000000000000005
1255
+ },
1256
+ {
1257
+ "pitch": 55,
1258
+ "velocity": 10,
1259
+ "start": 2.7600000000000016,
1260
+ "duration": 0.06000000000000005
1261
+ },
1262
+ {
1263
+ "pitch": 58,
1264
+ "velocity": 9,
1265
+ "start": 2.7600000000000016,
1266
+ "duration": 0.06000000000000005
1267
+ },
1268
+ {
1269
+ "pitch": 58,
1270
+ "velocity": 35,
1271
+ "start": 2.8200000000000016,
1272
+ "duration": 0.06000000000000005
1273
+ },
1274
+ {
1275
+ "pitch": 70,
1276
+ "velocity": 27,
1277
+ "start": 2.8200000000000016,
1278
+ "duration": 0.06000000000000005
1279
+ },
1280
+ {
1281
+ "pitch": 77,
1282
+ "velocity": 9,
1283
+ "start": 2.8200000000000016,
1284
+ "duration": 0.06000000000000005
1285
+ },
1286
+ {
1287
+ "pitch": 58,
1288
+ "velocity": 32,
1289
+ "start": 2.8800000000000017,
1290
+ "duration": 0.06000000000000005
1291
+ },
1292
+ {
1293
+ "pitch": 69,
1294
+ "velocity": 26,
1295
+ "start": 2.8800000000000017,
1296
+ "duration": 0.06000000000000005
1297
+ },
1298
+ {
1299
+ "pitch": 58,
1300
+ "velocity": 42,
1301
+ "start": 2.9400000000000017,
1302
+ "duration": 0.06000000000000005
1303
+ },
1304
+ {
1305
+ "pitch": 70,
1306
+ "velocity": 37,
1307
+ "start": 2.9400000000000017,
1308
+ "duration": 0.06000000000000005
1309
+ },
1310
+ {
1311
+ "pitch": 77,
1312
+ "velocity": 15,
1313
+ "start": 2.9400000000000017,
1314
+ "duration": 0.06000000000000005
1315
+ },
1316
+ {
1317
+ "pitch": 82,
1318
+ "velocity": 8,
1319
+ "start": 2.9400000000000017,
1320
+ "duration": 0.06000000000000005
1321
+ },
1322
+ {
1323
+ "pitch": 105,
1324
+ "velocity": 9,
1325
+ "start": 2.9400000000000017,
1326
+ "duration": 0.06000000000000005
1327
+ },
1328
+ {
1329
+ "pitch": 58,
1330
+ "velocity": 40,
1331
+ "start": 3.0000000000000018,
1332
+ "duration": 0.06000000000000005
1333
+ },
1334
+ {
1335
+ "pitch": 70,
1336
+ "velocity": 39,
1337
+ "start": 3.0000000000000018,
1338
+ "duration": 0.06000000000000005
1339
+ },
1340
+ {
1341
+ "pitch": 77,
1342
+ "velocity": 36,
1343
+ "start": 3.0000000000000018,
1344
+ "duration": 0.06000000000000005
1345
+ },
1346
+ {
1347
+ "pitch": 82,
1348
+ "velocity": 29,
1349
+ "start": 3.0000000000000018,
1350
+ "duration": 0.06000000000000005
1351
+ },
1352
+ {
1353
+ "pitch": 86,
1354
+ "velocity": 17,
1355
+ "start": 3.0000000000000018,
1356
+ "duration": 0.06000000000000005
1357
+ },
1358
+ {
1359
+ "pitch": 89,
1360
+ "velocity": 14,
1361
+ "start": 3.0000000000000018,
1362
+ "duration": 0.06000000000000005
1363
+ },
1364
+ {
1365
+ "pitch": 92,
1366
+ "velocity": 18,
1367
+ "start": 3.0000000000000018,
1368
+ "duration": 0.06000000000000005
1369
+ },
1370
+ {
1371
+ "pitch": 94,
1372
+ "velocity": 14,
1373
+ "start": 3.0000000000000018,
1374
+ "duration": 0.06000000000000005
1375
+ },
1376
+ {
1377
+ "pitch": 58,
1378
+ "velocity": 33,
1379
+ "start": 3.060000000000002,
1380
+ "duration": 0.06000000000000005
1381
+ },
1382
+ {
1383
+ "pitch": 70,
1384
+ "velocity": 29,
1385
+ "start": 3.060000000000002,
1386
+ "duration": 0.06000000000000005
1387
+ },
1388
+ {
1389
+ "pitch": 77,
1390
+ "velocity": 33,
1391
+ "start": 3.060000000000002,
1392
+ "duration": 0.06000000000000005
1393
+ },
1394
+ {
1395
+ "pitch": 82,
1396
+ "velocity": 26,
1397
+ "start": 3.060000000000002,
1398
+ "duration": 0.06000000000000005
1399
+ },
1400
+ {
1401
+ "pitch": 86,
1402
+ "velocity": 19,
1403
+ "start": 3.060000000000002,
1404
+ "duration": 0.06000000000000005
1405
+ },
1406
+ {
1407
+ "pitch": 89,
1408
+ "velocity": 19,
1409
+ "start": 3.060000000000002,
1410
+ "duration": 0.06000000000000005
1411
+ },
1412
+ {
1413
+ "pitch": 91,
1414
+ "velocity": 14,
1415
+ "start": 3.060000000000002,
1416
+ "duration": 0.06000000000000005
1417
+ },
1418
+ {
1419
+ "pitch": 59,
1420
+ "velocity": 19,
1421
+ "start": 3.120000000000002,
1422
+ "duration": 0.06000000000000005
1423
+ },
1424
+ {
1425
+ "pitch": 71,
1426
+ "velocity": 17,
1427
+ "start": 3.120000000000002,
1428
+ "duration": 0.06000000000000005
1429
+ },
1430
+ {
1431
+ "pitch": 77,
1432
+ "velocity": 8,
1433
+ "start": 3.120000000000002,
1434
+ "duration": 0.06000000000000005
1435
+ },
1436
+ {
1437
+ "pitch": 57,
1438
+ "velocity": 37,
1439
+ "start": 3.180000000000002,
1440
+ "duration": 0.06000000000000005
1441
+ },
1442
+ {
1443
+ "pitch": 62,
1444
+ "velocity": 10,
1445
+ "start": 3.180000000000002,
1446
+ "duration": 0.06000000000000005
1447
+ },
1448
+ {
1449
+ "pitch": 64,
1450
+ "velocity": 12,
1451
+ "start": 3.180000000000002,
1452
+ "duration": 0.06000000000000005
1453
+ },
1454
+ {
1455
+ "pitch": 70,
1456
+ "velocity": 26,
1457
+ "start": 3.180000000000002,
1458
+ "duration": 0.06000000000000005
1459
+ },
1460
+ {
1461
+ "pitch": 77,
1462
+ "velocity": 14,
1463
+ "start": 3.180000000000002,
1464
+ "duration": 0.06000000000000005
1465
+ },
1466
+ {
1467
+ "pitch": 58,
1468
+ "velocity": 42,
1469
+ "start": 3.240000000000002,
1470
+ "duration": 0.06000000000000005
1471
+ },
1472
+ {
1473
+ "pitch": 70,
1474
+ "velocity": 20,
1475
+ "start": 3.240000000000002,
1476
+ "duration": 0.06000000000000005
1477
+ },
1478
+ {
1479
+ "pitch": 77,
1480
+ "velocity": 10,
1481
+ "start": 3.240000000000002,
1482
+ "duration": 0.06000000000000005
1483
+ },
1484
+ {
1485
+ "pitch": 63,
1486
+ "velocity": 36,
1487
+ "start": 3.300000000000002,
1488
+ "duration": 0.06000000000000005
1489
+ },
1490
+ {
1491
+ "pitch": 76,
1492
+ "velocity": 27,
1493
+ "start": 3.300000000000002,
1494
+ "duration": 0.06000000000000005
1495
+ },
1496
+ {
1497
+ "pitch": 82,
1498
+ "velocity": 13,
1499
+ "start": 3.300000000000002,
1500
+ "duration": 0.06000000000000005
1501
+ },
1502
+ {
1503
+ "pitch": 83,
1504
+ "velocity": 13,
1505
+ "start": 3.300000000000002,
1506
+ "duration": 0.06000000000000005
1507
+ },
1508
+ {
1509
+ "pitch": 84,
1510
+ "velocity": 11,
1511
+ "start": 3.300000000000002,
1512
+ "duration": 0.06000000000000005
1513
+ },
1514
+ {
1515
+ "pitch": 91,
1516
+ "velocity": 12,
1517
+ "start": 3.300000000000002,
1518
+ "duration": 0.06000000000000005
1519
+ },
1520
+ {
1521
+ "pitch": 66,
1522
+ "velocity": 38,
1523
+ "start": 3.360000000000002,
1524
+ "duration": 0.06000000000000005
1525
+ },
1526
+ {
1527
+ "pitch": 78,
1528
+ "velocity": 30,
1529
+ "start": 3.360000000000002,
1530
+ "duration": 0.06000000000000005
1531
+ },
1532
+ {
1533
+ "pitch": 79,
1534
+ "velocity": 15,
1535
+ "start": 3.360000000000002,
1536
+ "duration": 0.06000000000000005
1537
+ },
1538
+ {
1539
+ "pitch": 85,
1540
+ "velocity": 9,
1541
+ "start": 3.360000000000002,
1542
+ "duration": 0.06000000000000005
1543
+ },
1544
+ {
1545
+ "pitch": 66,
1546
+ "velocity": 38,
1547
+ "start": 3.420000000000002,
1548
+ "duration": 0.06000000000000005
1549
+ },
1550
+ {
1551
+ "pitch": 67,
1552
+ "velocity": 41,
1553
+ "start": 3.420000000000002,
1554
+ "duration": 0.06000000000000005
1555
+ },
1556
+ {
1557
+ "pitch": 79,
1558
+ "velocity": 16,
1559
+ "start": 3.420000000000002,
1560
+ "duration": 0.06000000000000005
1561
+ },
1562
+ {
1563
+ "pitch": 61,
1564
+ "velocity": 30,
1565
+ "start": 3.480000000000002,
1566
+ "duration": 0.06000000000000005
1567
+ },
1568
+ {
1569
+ "pitch": 64,
1570
+ "velocity": 32,
1571
+ "start": 3.480000000000002,
1572
+ "duration": 0.06000000000000005
1573
+ },
1574
+ {
1575
+ "pitch": 69,
1576
+ "velocity": 10,
1577
+ "start": 3.480000000000002,
1578
+ "duration": 0.06000000000000005
1579
+ },
1580
+ {
1581
+ "pitch": 72,
1582
+ "velocity": 22,
1583
+ "start": 3.480000000000002,
1584
+ "duration": 0.06000000000000005
1585
+ },
1586
+ {
1587
+ "pitch": 73,
1588
+ "velocity": 21,
1589
+ "start": 3.480000000000002,
1590
+ "duration": 0.06000000000000005
1591
+ },
1592
+ {
1593
+ "pitch": 77,
1594
+ "velocity": 9,
1595
+ "start": 3.480000000000002,
1596
+ "duration": 0.06000000000000005
1597
+ },
1598
+ {
1599
+ "pitch": 78,
1600
+ "velocity": 10,
1601
+ "start": 3.480000000000002,
1602
+ "duration": 0.06000000000000005
1603
+ },
1604
+ {
1605
+ "pitch": 55,
1606
+ "velocity": 26,
1607
+ "start": 3.5400000000000023,
1608
+ "duration": 0.06000000000000005
1609
+ },
1610
+ {
1611
+ "pitch": 73,
1612
+ "velocity": 24,
1613
+ "start": 3.5400000000000023,
1614
+ "duration": 0.06000000000000005
1615
+ },
1616
+ {
1617
+ "pitch": 78,
1618
+ "velocity": 24,
1619
+ "start": 3.5400000000000023,
1620
+ "duration": 0.06000000000000005
1621
+ },
1622
+ {
1623
+ "pitch": 79,
1624
+ "velocity": 25,
1625
+ "start": 3.5400000000000023,
1626
+ "duration": 0.06000000000000005
1627
+ },
1628
+ {
1629
+ "pitch": 80,
1630
+ "velocity": 25,
1631
+ "start": 3.5400000000000023,
1632
+ "duration": 0.06000000000000005
1633
+ },
1634
+ {
1635
+ "pitch": 81,
1636
+ "velocity": 25,
1637
+ "start": 3.5400000000000023,
1638
+ "duration": 0.06000000000000005
1639
+ },
1640
+ {
1641
+ "pitch": 82,
1642
+ "velocity": 24,
1643
+ "start": 3.5400000000000023,
1644
+ "duration": 0.06000000000000005
1645
+ },
1646
+ {
1647
+ "pitch": 53,
1648
+ "velocity": 22,
1649
+ "start": 3.6000000000000023,
1650
+ "duration": 0.06000000000000005
1651
+ },
1652
+ {
1653
+ "pitch": 65,
1654
+ "velocity": 20,
1655
+ "start": 3.6000000000000023,
1656
+ "duration": 0.06000000000000005
1657
+ },
1658
+ {
1659
+ "pitch": 72,
1660
+ "velocity": 16,
1661
+ "start": 3.6000000000000023,
1662
+ "duration": 0.06000000000000005
1663
+ },
1664
+ {
1665
+ "pitch": 77,
1666
+ "velocity": 25,
1667
+ "start": 3.6000000000000023,
1668
+ "duration": 0.06000000000000005
1669
+ },
1670
+ {
1671
+ "pitch": 79,
1672
+ "velocity": 18,
1673
+ "start": 3.6000000000000023,
1674
+ "duration": 0.06000000000000005
1675
+ },
1676
+ {
1677
+ "pitch": 81,
1678
+ "velocity": 30,
1679
+ "start": 3.6000000000000023,
1680
+ "duration": 0.06000000000000005
1681
+ },
1682
+ {
1683
+ "pitch": 82,
1684
+ "velocity": 20,
1685
+ "start": 3.6000000000000023,
1686
+ "duration": 0.06000000000000005
1687
+ },
1688
+ {
1689
+ "pitch": 84,
1690
+ "velocity": 17,
1691
+ "start": 3.6000000000000023,
1692
+ "duration": 0.06000000000000005
1693
+ },
1694
+ {
1695
+ "pitch": 54,
1696
+ "velocity": 19,
1697
+ "start": 3.6600000000000024,
1698
+ "duration": 0.06000000000000005
1699
+ },
1700
+ {
1701
+ "pitch": 61,
1702
+ "velocity": 12,
1703
+ "start": 3.6600000000000024,
1704
+ "duration": 0.06000000000000005
1705
+ },
1706
+ {
1707
+ "pitch": 70,
1708
+ "velocity": 12,
1709
+ "start": 3.6600000000000024,
1710
+ "duration": 0.06000000000000005
1711
+ },
1712
+ {
1713
+ "pitch": 75,
1714
+ "velocity": 12,
1715
+ "start": 3.6600000000000024,
1716
+ "duration": 0.06000000000000005
1717
+ },
1718
+ {
1719
+ "pitch": 76,
1720
+ "velocity": 11,
1721
+ "start": 3.6600000000000024,
1722
+ "duration": 0.06000000000000005
1723
+ },
1724
+ {
1725
+ "pitch": 77,
1726
+ "velocity": 14,
1727
+ "start": 3.6600000000000024,
1728
+ "duration": 0.06000000000000005
1729
+ },
1730
+ {
1731
+ "pitch": 80,
1732
+ "velocity": 15,
1733
+ "start": 3.6600000000000024,
1734
+ "duration": 0.06000000000000005
1735
+ },
1736
+ {
1737
+ "pitch": 56,
1738
+ "velocity": 17,
1739
+ "start": 3.7200000000000024,
1740
+ "duration": 0.06000000000000005
1741
+ },
1742
+ {
1743
+ "pitch": 68,
1744
+ "velocity": 9,
1745
+ "start": 3.7200000000000024,
1746
+ "duration": 0.06000000000000005
1747
+ },
1748
+ {
1749
+ "pitch": 61,
1750
+ "velocity": 14,
1751
+ "start": 4.320000000000002,
1752
+ "duration": 0.05999999999999961
1753
+ },
1754
+ {
1755
+ "pitch": 61,
1756
+ "velocity": 43,
1757
+ "start": 4.380000000000002,
1758
+ "duration": 0.05999999999999961
1759
+ },
1760
+ {
1761
+ "pitch": 73,
1762
+ "velocity": 30,
1763
+ "start": 4.380000000000002,
1764
+ "duration": 0.05999999999999961
1765
+ },
1766
+ {
1767
+ "pitch": 80,
1768
+ "velocity": 18,
1769
+ "start": 4.380000000000002,
1770
+ "duration": 0.05999999999999961
1771
+ },
1772
+ {
1773
+ "pitch": 81,
1774
+ "velocity": 17,
1775
+ "start": 4.380000000000002,
1776
+ "duration": 0.05999999999999961
1777
+ },
1778
+ {
1779
+ "pitch": 85,
1780
+ "velocity": 8,
1781
+ "start": 4.380000000000002,
1782
+ "duration": 0.05999999999999961
1783
+ },
1784
+ {
1785
+ "pitch": 61,
1786
+ "velocity": 24,
1787
+ "start": 4.440000000000001,
1788
+ "duration": 0.05999999999999961
1789
+ },
1790
+ {
1791
+ "pitch": 73,
1792
+ "velocity": 9,
1793
+ "start": 4.440000000000001,
1794
+ "duration": 0.05999999999999961
1795
+ },
1796
+ {
1797
+ "pitch": 65,
1798
+ "velocity": 33,
1799
+ "start": 4.500000000000001,
1800
+ "duration": 0.05999999999999961
1801
+ },
1802
+ {
1803
+ "pitch": 77,
1804
+ "velocity": 27,
1805
+ "start": 4.500000000000001,
1806
+ "duration": 0.05999999999999961
1807
+ },
1808
+ {
1809
+ "pitch": 84,
1810
+ "velocity": 8,
1811
+ "start": 4.500000000000001,
1812
+ "duration": 0.05999999999999961
1813
+ },
1814
+ {
1815
+ "pitch": 99,
1816
+ "velocity": 12,
1817
+ "start": 4.500000000000001,
1818
+ "duration": 0.05999999999999961
1819
+ },
1820
+ {
1821
+ "pitch": 64,
1822
+ "velocity": 49,
1823
+ "start": 4.5600000000000005,
1824
+ "duration": 0.05999999999999961
1825
+ },
1826
+ {
1827
+ "pitch": 67,
1828
+ "velocity": 19,
1829
+ "start": 4.5600000000000005,
1830
+ "duration": 0.05999999999999961
1831
+ },
1832
+ {
1833
+ "pitch": 77,
1834
+ "velocity": 30,
1835
+ "start": 4.5600000000000005,
1836
+ "duration": 0.05999999999999961
1837
+ },
1838
+ {
1839
+ "pitch": 83,
1840
+ "velocity": 12,
1841
+ "start": 4.5600000000000005,
1842
+ "duration": 0.05999999999999961
1843
+ },
1844
+ {
1845
+ "pitch": 84,
1846
+ "velocity": 12,
1847
+ "start": 4.5600000000000005,
1848
+ "duration": 0.05999999999999961
1849
+ },
1850
+ {
1851
+ "pitch": 99,
1852
+ "velocity": 18,
1853
+ "start": 4.5600000000000005,
1854
+ "duration": 0.05999999999999961
1855
+ },
1856
+ {
1857
+ "pitch": 63,
1858
+ "velocity": 40,
1859
+ "start": 4.62,
1860
+ "duration": 0.05999999999999961
1861
+ },
1862
+ {
1863
+ "pitch": 76,
1864
+ "velocity": 10,
1865
+ "start": 4.62,
1866
+ "duration": 0.05999999999999961
1867
+ },
1868
+ {
1869
+ "pitch": 62,
1870
+ "velocity": 22,
1871
+ "start": 4.739999999999999,
1872
+ "duration": 0.05999999999999961
1873
+ },
1874
+ {
1875
+ "pitch": 74,
1876
+ "velocity": 10,
1877
+ "start": 4.739999999999999,
1878
+ "duration": 0.05999999999999961
1879
+ },
1880
+ {
1881
+ "pitch": 82,
1882
+ "velocity": 15,
1883
+ "start": 4.739999999999999,
1884
+ "duration": 0.05999999999999961
1885
+ },
1886
+ {
1887
+ "pitch": 83,
1888
+ "velocity": 21,
1889
+ "start": 4.739999999999999,
1890
+ "duration": 0.05999999999999961
1891
+ },
1892
+ {
1893
+ "pitch": 84,
1894
+ "velocity": 13,
1895
+ "start": 4.739999999999999,
1896
+ "duration": 0.05999999999999961
1897
+ },
1898
+ {
1899
+ "pitch": 102,
1900
+ "velocity": 13,
1901
+ "start": 4.739999999999999,
1902
+ "duration": 0.05999999999999961
1903
+ },
1904
+ {
1905
+ "pitch": 103,
1906
+ "velocity": 11,
1907
+ "start": 4.739999999999999,
1908
+ "duration": 0.05999999999999961
1909
+ },
1910
+ {
1911
+ "pitch": 105,
1912
+ "velocity": 11,
1913
+ "start": 4.739999999999999,
1914
+ "duration": 0.05999999999999961
1915
+ },
1916
+ {
1917
+ "pitch": 64,
1918
+ "velocity": 38,
1919
+ "start": 4.799999999999999,
1920
+ "duration": 0.05999999999999961
1921
+ },
1922
+ {
1923
+ "pitch": 76,
1924
+ "velocity": 29,
1925
+ "start": 4.799999999999999,
1926
+ "duration": 0.05999999999999961
1927
+ },
1928
+ {
1929
+ "pitch": 83,
1930
+ "velocity": 28,
1931
+ "start": 4.799999999999999,
1932
+ "duration": 0.05999999999999961
1933
+ },
1934
+ {
1935
+ "pitch": 101,
1936
+ "velocity": 8,
1937
+ "start": 4.799999999999999,
1938
+ "duration": 0.05999999999999961
1939
+ },
1940
+ {
1941
+ "pitch": 103,
1942
+ "velocity": 8,
1943
+ "start": 4.799999999999999,
1944
+ "duration": 0.05999999999999961
1945
+ },
1946
+ {
1947
+ "pitch": 67,
1948
+ "velocity": 39,
1949
+ "start": 4.8599999999999985,
1950
+ "duration": 0.05999999999999961
1951
+ },
1952
+ {
1953
+ "pitch": 78,
1954
+ "velocity": 30,
1955
+ "start": 4.8599999999999985,
1956
+ "duration": 0.05999999999999961
1957
+ },
1958
+ {
1959
+ "pitch": 79,
1960
+ "velocity": 36,
1961
+ "start": 4.8599999999999985,
1962
+ "duration": 0.05999999999999961
1963
+ },
1964
+ {
1965
+ "pitch": 85,
1966
+ "velocity": 25,
1967
+ "start": 4.8599999999999985,
1968
+ "duration": 0.05999999999999961
1969
+ },
1970
+ {
1971
+ "pitch": 86,
1972
+ "velocity": 26,
1973
+ "start": 4.8599999999999985,
1974
+ "duration": 0.05999999999999961
1975
+ },
1976
+ {
1977
+ "pitch": 91,
1978
+ "velocity": 17,
1979
+ "start": 4.8599999999999985,
1980
+ "duration": 0.05999999999999961
1981
+ },
1982
+ {
1983
+ "pitch": 95,
1984
+ "velocity": 24,
1985
+ "start": 4.8599999999999985,
1986
+ "duration": 0.05999999999999961
1987
+ },
1988
+ {
1989
+ "pitch": 67,
1990
+ "velocity": 21,
1991
+ "start": 4.919999999999998,
1992
+ "duration": 0.05999999999999961
1993
+ },
1994
+ {
1995
+ "pitch": 79,
1996
+ "velocity": 19,
1997
+ "start": 4.919999999999998,
1998
+ "duration": 0.05999999999999961
1999
+ },
2000
+ {
2001
+ "pitch": 86,
2002
+ "velocity": 11,
2003
+ "start": 4.919999999999998,
2004
+ "duration": 0.05999999999999961
2005
+ },
2006
+ {
2007
+ "pitch": 63,
2008
+ "velocity": 18,
2009
+ "start": 4.979999999999998,
2010
+ "duration": 0.05999999999999961
2011
+ },
2012
+ {
2013
+ "pitch": 75,
2014
+ "velocity": 13,
2015
+ "start": 4.979999999999998,
2016
+ "duration": 0.05999999999999961
2017
+ },
2018
+ {
2019
+ "pitch": 62,
2020
+ "velocity": 33,
2021
+ "start": 5.039999999999997,
2022
+ "duration": 0.05999999999999961
2023
+ },
2024
+ {
2025
+ "pitch": 73,
2026
+ "velocity": 27,
2027
+ "start": 5.039999999999997,
2028
+ "duration": 0.05999999999999961
2029
+ },
2030
+ {
2031
+ "pitch": 74,
2032
+ "velocity": 27,
2033
+ "start": 5.039999999999997,
2034
+ "duration": 0.05999999999999961
2035
+ },
2036
+ {
2037
+ "pitch": 81,
2038
+ "velocity": 17,
2039
+ "start": 5.039999999999997,
2040
+ "duration": 0.05999999999999961
2041
+ },
2042
+ {
2043
+ "pitch": 57,
2044
+ "velocity": 34,
2045
+ "start": 5.099999999999997,
2046
+ "duration": 0.05999999999999961
2047
+ },
2048
+ {
2049
+ "pitch": 60,
2050
+ "velocity": 19,
2051
+ "start": 5.099999999999997,
2052
+ "duration": 0.05999999999999961
2053
+ },
2054
+ {
2055
+ "pitch": 69,
2056
+ "velocity": 32,
2057
+ "start": 5.099999999999997,
2058
+ "duration": 0.05999999999999961
2059
+ },
2060
+ {
2061
+ "pitch": 76,
2062
+ "velocity": 18,
2063
+ "start": 5.099999999999997,
2064
+ "duration": 0.05999999999999961
2065
+ },
2066
+ {
2067
+ "pitch": 81,
2068
+ "velocity": 14,
2069
+ "start": 5.099999999999997,
2070
+ "duration": 0.05999999999999961
2071
+ },
2072
+ {
2073
+ "pitch": 55,
2074
+ "velocity": 34,
2075
+ "start": 5.159999999999997,
2076
+ "duration": 0.05999999999999961
2077
+ },
2078
+ {
2079
+ "pitch": 68,
2080
+ "velocity": 36,
2081
+ "start": 5.159999999999997,
2082
+ "duration": 0.05999999999999961
2083
+ },
2084
+ {
2085
+ "pitch": 75,
2086
+ "velocity": 18,
2087
+ "start": 5.159999999999997,
2088
+ "duration": 0.05999999999999961
2089
+ },
2090
+ {
2091
+ "pitch": 79,
2092
+ "velocity": 13,
2093
+ "start": 5.159999999999997,
2094
+ "duration": 0.05999999999999961
2095
+ },
2096
+ {
2097
+ "pitch": 83,
2098
+ "velocity": 9,
2099
+ "start": 5.159999999999997,
2100
+ "duration": 0.05999999999999961
2101
+ },
2102
+ {
2103
+ "pitch": 55,
2104
+ "velocity": 33,
2105
+ "start": 5.219999999999996,
2106
+ "duration": 0.05999999999999961
2107
+ },
2108
+ {
2109
+ "pitch": 67,
2110
+ "velocity": 33,
2111
+ "start": 5.219999999999996,
2112
+ "duration": 0.05999999999999961
2113
+ },
2114
+ {
2115
+ "pitch": 74,
2116
+ "velocity": 29,
2117
+ "start": 5.219999999999996,
2118
+ "duration": 0.05999999999999961
2119
+ },
2120
+ {
2121
+ "pitch": 79,
2122
+ "velocity": 28,
2123
+ "start": 5.219999999999996,
2124
+ "duration": 0.05999999999999961
2125
+ },
2126
+ {
2127
+ "pitch": 83,
2128
+ "velocity": 22,
2129
+ "start": 5.219999999999996,
2130
+ "duration": 0.05999999999999961
2131
+ },
2132
+ {
2133
+ "pitch": 55,
2134
+ "velocity": 22,
2135
+ "start": 5.279999999999996,
2136
+ "duration": 0.05999999999999961
2137
+ },
2138
+ {
2139
+ "pitch": 67,
2140
+ "velocity": 13,
2141
+ "start": 5.279999999999996,
2142
+ "duration": 0.05999999999999961
2143
+ },
2144
+ {
2145
+ "pitch": 74,
2146
+ "velocity": 13,
2147
+ "start": 5.279999999999996,
2148
+ "duration": 0.05999999999999961
2149
+ },
2150
+ {
2151
+ "pitch": 80,
2152
+ "velocity": 14,
2153
+ "start": 5.279999999999996,
2154
+ "duration": 0.05999999999999961
2155
+ },
2156
+ {
2157
+ "pitch": 58,
2158
+ "velocity": 11,
2159
+ "start": 5.339999999999995,
2160
+ "duration": 0.05999999999999961
2161
+ },
2162
+ {
2163
+ "pitch": 57,
2164
+ "velocity": 25,
2165
+ "start": 5.399999999999995,
2166
+ "duration": 0.05999999999999961
2167
+ },
2168
+ {
2169
+ "pitch": 62,
2170
+ "velocity": 9,
2171
+ "start": 5.399999999999995,
2172
+ "duration": 0.05999999999999961
2173
+ },
2174
+ {
2175
+ "pitch": 70,
2176
+ "velocity": 22,
2177
+ "start": 5.399999999999995,
2178
+ "duration": 0.05999999999999961
2179
+ },
2180
+ {
2181
+ "pitch": 77,
2182
+ "velocity": 11,
2183
+ "start": 5.399999999999995,
2184
+ "duration": 0.05999999999999961
2185
+ },
2186
+ {
2187
+ "pitch": 81,
2188
+ "velocity": 9,
2189
+ "start": 5.399999999999995,
2190
+ "duration": 0.05999999999999961
2191
+ },
2192
+ {
2193
+ "pitch": 61,
2194
+ "velocity": 14,
2195
+ "start": 5.519999999999994,
2196
+ "duration": 0.05999999999999961
2197
+ },
2198
+ {
2199
+ "pitch": 61,
2200
+ "velocity": 40,
2201
+ "start": 5.579999999999994,
2202
+ "duration": 0.05999999999999961
2203
+ },
2204
+ {
2205
+ "pitch": 73,
2206
+ "velocity": 27,
2207
+ "start": 5.579999999999994,
2208
+ "duration": 0.05999999999999961
2209
+ },
2210
+ {
2211
+ "pitch": 79,
2212
+ "velocity": 16,
2213
+ "start": 5.579999999999994,
2214
+ "duration": 0.05999999999999961
2215
+ },
2216
+ {
2217
+ "pitch": 103,
2218
+ "velocity": 10,
2219
+ "start": 5.579999999999994,
2220
+ "duration": 0.05999999999999961
2221
+ },
2222
+ {
2223
+ "pitch": 61,
2224
+ "velocity": 41,
2225
+ "start": 5.6399999999999935,
2226
+ "duration": 0.05999999999999961
2227
+ },
2228
+ {
2229
+ "pitch": 73,
2230
+ "velocity": 32,
2231
+ "start": 5.6399999999999935,
2232
+ "duration": 0.05999999999999961
2233
+ },
2234
+ {
2235
+ "pitch": 80,
2236
+ "velocity": 34,
2237
+ "start": 5.6399999999999935,
2238
+ "duration": 0.05999999999999961
2239
+ },
2240
+ {
2241
+ "pitch": 85,
2242
+ "velocity": 27,
2243
+ "start": 5.6399999999999935,
2244
+ "duration": 0.05999999999999961
2245
+ },
2246
+ {
2247
+ "pitch": 89,
2248
+ "velocity": 11,
2249
+ "start": 5.6399999999999935,
2250
+ "duration": 0.05999999999999961
2251
+ },
2252
+ {
2253
+ "pitch": 65,
2254
+ "velocity": 37,
2255
+ "start": 5.699999999999993,
2256
+ "duration": 0.05999999999999961
2257
+ },
2258
+ {
2259
+ "pitch": 76,
2260
+ "velocity": 30,
2261
+ "start": 5.699999999999993,
2262
+ "duration": 0.05999999999999961
2263
+ },
2264
+ {
2265
+ "pitch": 77,
2266
+ "velocity": 32,
2267
+ "start": 5.699999999999993,
2268
+ "duration": 0.05999999999999961
2269
+ },
2270
+ {
2271
+ "pitch": 83,
2272
+ "velocity": 28,
2273
+ "start": 5.699999999999993,
2274
+ "duration": 0.05999999999999961
2275
+ },
2276
+ {
2277
+ "pitch": 84,
2278
+ "velocity": 26,
2279
+ "start": 5.699999999999993,
2280
+ "duration": 0.05999999999999961
2281
+ },
2282
+ {
2283
+ "pitch": 86,
2284
+ "velocity": 17,
2285
+ "start": 5.699999999999993,
2286
+ "duration": 0.05999999999999961
2287
+ },
2288
+ {
2289
+ "pitch": 96,
2290
+ "velocity": 14,
2291
+ "start": 5.699999999999993,
2292
+ "duration": 0.05999999999999961
2293
+ },
2294
+ {
2295
+ "pitch": 63,
2296
+ "velocity": 28,
2297
+ "start": 5.759999999999993,
2298
+ "duration": 0.05999999999999961
2299
+ },
2300
+ {
2301
+ "pitch": 65,
2302
+ "velocity": 43,
2303
+ "start": 5.759999999999993,
2304
+ "duration": 0.05999999999999961
2305
+ },
2306
+ {
2307
+ "pitch": 77,
2308
+ "velocity": 28,
2309
+ "start": 5.759999999999993,
2310
+ "duration": 0.05999999999999961
2311
+ },
2312
+ {
2313
+ "pitch": 83,
2314
+ "velocity": 18,
2315
+ "start": 5.759999999999993,
2316
+ "duration": 0.05999999999999961
2317
+ },
2318
+ {
2319
+ "pitch": 84,
2320
+ "velocity": 18,
2321
+ "start": 5.759999999999993,
2322
+ "duration": 0.05999999999999961
2323
+ },
2324
+ {
2325
+ "pitch": 61,
2326
+ "velocity": 37,
2327
+ "start": 5.819999999999992,
2328
+ "duration": 0.05999999999999961
2329
+ },
2330
+ {
2331
+ "pitch": 73,
2332
+ "velocity": 20,
2333
+ "start": 5.819999999999992,
2334
+ "duration": 0.05999999999999961
2335
+ },
2336
+ {
2337
+ "pitch": 74,
2338
+ "velocity": 20,
2339
+ "start": 5.819999999999992,
2340
+ "duration": 0.05999999999999961
2341
+ },
2342
+ {
2343
+ "pitch": 80,
2344
+ "velocity": 22,
2345
+ "start": 5.819999999999992,
2346
+ "duration": 0.05999999999999961
2347
+ },
2348
+ {
2349
+ "pitch": 81,
2350
+ "velocity": 21,
2351
+ "start": 5.819999999999992,
2352
+ "duration": 0.05999999999999961
2353
+ },
2354
+ {
2355
+ "pitch": 94,
2356
+ "velocity": 9,
2357
+ "start": 5.819999999999992,
2358
+ "duration": 0.05999999999999961
2359
+ },
2360
+ {
2361
+ "pitch": 59,
2362
+ "velocity": 32,
2363
+ "start": 5.879999999999992,
2364
+ "duration": 0.05999999999999961
2365
+ },
2366
+ {
2367
+ "pitch": 71,
2368
+ "velocity": 18,
2369
+ "start": 5.879999999999992,
2370
+ "duration": 0.05999999999999961
2371
+ },
2372
+ {
2373
+ "pitch": 78,
2374
+ "velocity": 14,
2375
+ "start": 5.879999999999992,
2376
+ "duration": 0.05999999999999961
2377
+ },
2378
+ {
2379
+ "pitch": 97,
2380
+ "velocity": 8,
2381
+ "start": 5.9399999999999915,
2382
+ "duration": 0.05999999999999961
2383
+ },
2384
+ {
2385
+ "pitch": 58,
2386
+ "velocity": 29,
2387
+ "start": 5.999999999999991,
2388
+ "duration": 0.05999999999999961
2389
+ },
2390
+ {
2391
+ "pitch": 71,
2392
+ "velocity": 18,
2393
+ "start": 5.999999999999991,
2394
+ "duration": 0.05999999999999961
2395
+ },
2396
+ {
2397
+ "pitch": 77,
2398
+ "velocity": 22,
2399
+ "start": 5.999999999999991,
2400
+ "duration": 0.05999999999999961
2401
+ },
2402
+ {
2403
+ "pitch": 82,
2404
+ "velocity": 23,
2405
+ "start": 5.999999999999991,
2406
+ "duration": 0.05999999999999961
2407
+ },
2408
+ {
2409
+ "pitch": 94,
2410
+ "velocity": 10,
2411
+ "start": 5.999999999999991,
2412
+ "duration": 0.05999999999999961
2413
+ },
2414
+ {
2415
+ "pitch": 57,
2416
+ "velocity": 36,
2417
+ "start": 6.059999999999991,
2418
+ "duration": 0.05999999999999961
2419
+ },
2420
+ {
2421
+ "pitch": 70,
2422
+ "velocity": 27,
2423
+ "start": 6.059999999999991,
2424
+ "duration": 0.05999999999999961
2425
+ },
2426
+ {
2427
+ "pitch": 77,
2428
+ "velocity": 26,
2429
+ "start": 6.059999999999991,
2430
+ "duration": 0.05999999999999961
2431
+ },
2432
+ {
2433
+ "pitch": 82,
2434
+ "velocity": 26,
2435
+ "start": 6.059999999999991,
2436
+ "duration": 0.05999999999999961
2437
+ },
2438
+ {
2439
+ "pitch": 86,
2440
+ "velocity": 9,
2441
+ "start": 6.059999999999991,
2442
+ "duration": 0.05999999999999961
2443
+ },
2444
+ {
2445
+ "pitch": 96,
2446
+ "velocity": 9,
2447
+ "start": 6.059999999999991,
2448
+ "duration": 0.05999999999999961
2449
+ },
2450
+ {
2451
+ "pitch": 56,
2452
+ "velocity": 21,
2453
+ "start": 6.11999999999999,
2454
+ "duration": 0.05999999999999961
2455
+ },
2456
+ {
2457
+ "pitch": 68,
2458
+ "velocity": 8,
2459
+ "start": 6.11999999999999,
2460
+ "duration": 0.05999999999999961
2461
+ },
2462
+ {
2463
+ "pitch": 59,
2464
+ "velocity": 33,
2465
+ "start": 6.2399999999999896,
2466
+ "duration": 0.05999999999999961
2467
+ },
2468
+ {
2469
+ "pitch": 71,
2470
+ "velocity": 27,
2471
+ "start": 6.2399999999999896,
2472
+ "duration": 0.05999999999999961
2473
+ },
2474
+ {
2475
+ "pitch": 78,
2476
+ "velocity": 9,
2477
+ "start": 6.2399999999999896,
2478
+ "duration": 0.05999999999999961
2479
+ },
2480
+ {
2481
+ "pitch": 97,
2482
+ "velocity": 9,
2483
+ "start": 6.2399999999999896,
2484
+ "duration": 0.05999999999999961
2485
+ },
2486
+ {
2487
+ "pitch": 60,
2488
+ "velocity": 37,
2489
+ "start": 6.299999999999989,
2490
+ "duration": 0.05999999999999961
2491
+ },
2492
+ {
2493
+ "pitch": 71,
2494
+ "velocity": 30,
2495
+ "start": 6.299999999999989,
2496
+ "duration": 0.05999999999999961
2497
+ },
2498
+ {
2499
+ "pitch": 79,
2500
+ "velocity": 15,
2501
+ "start": 6.299999999999989,
2502
+ "duration": 0.05999999999999961
2503
+ },
2504
+ {
2505
+ "pitch": 93,
2506
+ "velocity": 16,
2507
+ "start": 6.299999999999989,
2508
+ "duration": 0.05999999999999961
2509
+ },
2510
+ {
2511
+ "pitch": 96,
2512
+ "velocity": 9,
2513
+ "start": 6.299999999999989,
2514
+ "duration": 0.05999999999999961
2515
+ },
2516
+ {
2517
+ "pitch": 59,
2518
+ "velocity": 27,
2519
+ "start": 6.359999999999989,
2520
+ "duration": 0.05999999999999961
2521
+ },
2522
+ {
2523
+ "pitch": 71,
2524
+ "velocity": 17,
2525
+ "start": 6.359999999999989,
2526
+ "duration": 0.05999999999999961
2527
+ },
2528
+ {
2529
+ "pitch": 62,
2530
+ "velocity": 38,
2531
+ "start": 6.479999999999988,
2532
+ "duration": 0.05999999999999961
2533
+ },
2534
+ {
2535
+ "pitch": 62,
2536
+ "velocity": 40,
2537
+ "start": 6.539999999999988,
2538
+ "duration": 0.05999999999999961
2539
+ },
2540
+ {
2541
+ "pitch": 61,
2542
+ "velocity": 28,
2543
+ "start": 6.659999999999987,
2544
+ "duration": 0.05999999999999961
2545
+ },
2546
+ {
2547
+ "pitch": 66,
2548
+ "velocity": 11,
2549
+ "start": 6.659999999999987,
2550
+ "duration": 0.05999999999999961
2551
+ },
2552
+ {
2553
+ "pitch": 63,
2554
+ "velocity": 42,
2555
+ "start": 6.719999999999986,
2556
+ "duration": 0.05999999999999961
2557
+ },
2558
+ {
2559
+ "pitch": 63,
2560
+ "velocity": 21,
2561
+ "start": 6.779999999999986,
2562
+ "duration": 0.05999999999999961
2563
+ },
2564
+ {
2565
+ "pitch": 61,
2566
+ "velocity": 16,
2567
+ "start": 6.839999999999986,
2568
+ "duration": 0.05999999999999961
2569
+ },
2570
+ {
2571
+ "pitch": 100,
2572
+ "velocity": 8,
2573
+ "start": 6.839999999999986,
2574
+ "duration": 0.05999999999999961
2575
+ },
2576
+ {
2577
+ "pitch": 104,
2578
+ "velocity": 9,
2579
+ "start": 6.839999999999986,
2580
+ "duration": 0.05999999999999961
2581
+ },
2582
+ {
2583
+ "pitch": 105,
2584
+ "velocity": 12,
2585
+ "start": 6.839999999999986,
2586
+ "duration": 0.05999999999999961
2587
+ },
2588
+ {
2589
+ "pitch": 106,
2590
+ "velocity": 13,
2591
+ "start": 6.839999999999986,
2592
+ "duration": 0.05999999999999961
2593
+ },
2594
+ {
2595
+ "pitch": 61,
2596
+ "velocity": 23,
2597
+ "start": 6.899999999999985,
2598
+ "duration": 0.05999999999999961
2599
+ },
2600
+ {
2601
+ "pitch": 62,
2602
+ "velocity": 34,
2603
+ "start": 6.959999999999985,
2604
+ "duration": 0.05999999999999961
2605
+ },
2606
+ {
2607
+ "pitch": 62,
2608
+ "velocity": 46,
2609
+ "start": 7.0199999999999845,
2610
+ "duration": 0.05999999999999961
2611
+ },
2612
+ {
2613
+ "pitch": 63,
2614
+ "velocity": 39,
2615
+ "start": 7.079999999999984,
2616
+ "duration": 0.05999999999999961
2617
+ },
2618
+ {
2619
+ "pitch": 63,
2620
+ "velocity": 35,
2621
+ "start": 7.199999999999983,
2622
+ "duration": 0.05999999999999961
2623
+ },
2624
+ {
2625
+ "pitch": 75,
2626
+ "velocity": 31,
2627
+ "start": 7.199999999999983,
2628
+ "duration": 0.05999999999999961
2629
+ },
2630
+ {
2631
+ "pitch": 82,
2632
+ "velocity": 22,
2633
+ "start": 7.199999999999983,
2634
+ "duration": 0.05999999999999961
2635
+ },
2636
+ {
2637
+ "pitch": 64,
2638
+ "velocity": 38,
2639
+ "start": 7.259999999999983,
2640
+ "duration": 0.05999999999999961
2641
+ },
2642
+ {
2643
+ "pitch": 76,
2644
+ "velocity": 38,
2645
+ "start": 7.259999999999983,
2646
+ "duration": 0.05999999999999961
2647
+ },
2648
+ {
2649
+ "pitch": 83,
2650
+ "velocity": 28,
2651
+ "start": 7.259999999999983,
2652
+ "duration": 0.05999999999999961
2653
+ },
2654
+ {
2655
+ "pitch": 88,
2656
+ "velocity": 21,
2657
+ "start": 7.259999999999983,
2658
+ "duration": 0.05999999999999961
2659
+ },
2660
+ {
2661
+ "pitch": 89,
2662
+ "velocity": 14,
2663
+ "start": 7.259999999999983,
2664
+ "duration": 0.05999999999999961
2665
+ },
2666
+ {
2667
+ "pitch": 92,
2668
+ "velocity": 16,
2669
+ "start": 7.259999999999983,
2670
+ "duration": 0.05999999999999961
2671
+ },
2672
+ {
2673
+ "pitch": 66,
2674
+ "velocity": 37,
2675
+ "start": 7.3199999999999825,
2676
+ "duration": 0.05999999999999961
2677
+ },
2678
+ {
2679
+ "pitch": 78,
2680
+ "velocity": 33,
2681
+ "start": 7.3199999999999825,
2682
+ "duration": 0.05999999999999961
2683
+ },
2684
+ {
2685
+ "pitch": 85,
2686
+ "velocity": 17,
2687
+ "start": 7.3199999999999825,
2688
+ "duration": 0.05999999999999961
2689
+ },
2690
+ {
2691
+ "pitch": 93,
2692
+ "velocity": 12,
2693
+ "start": 7.3199999999999825,
2694
+ "duration": 0.05999999999999961
2695
+ },
2696
+ {
2697
+ "pitch": 94,
2698
+ "velocity": 14,
2699
+ "start": 7.3199999999999825,
2700
+ "duration": 0.05999999999999961
2701
+ },
2702
+ {
2703
+ "pitch": 66,
2704
+ "velocity": 32,
2705
+ "start": 7.379999999999982,
2706
+ "duration": 0.05999999999999961
2707
+ },
2708
+ {
2709
+ "pitch": 78,
2710
+ "velocity": 27,
2711
+ "start": 7.379999999999982,
2712
+ "duration": 0.05999999999999961
2713
+ },
2714
+ {
2715
+ "pitch": 85,
2716
+ "velocity": 8,
2717
+ "start": 7.379999999999982,
2718
+ "duration": 0.05999999999999961
2719
+ },
2720
+ {
2721
+ "pitch": 58,
2722
+ "velocity": 24,
2723
+ "start": 7.439999999999982,
2724
+ "duration": 0.05999999999999961
2725
+ },
2726
+ {
2727
+ "pitch": 70,
2728
+ "velocity": 11,
2729
+ "start": 7.439999999999982,
2730
+ "duration": 0.05999999999999961
2731
+ },
2732
+ {
2733
+ "pitch": 73,
2734
+ "velocity": 10,
2735
+ "start": 7.439999999999982,
2736
+ "duration": 0.05999999999999961
2737
+ },
2738
+ {
2739
+ "pitch": 55,
2740
+ "velocity": 12,
2741
+ "start": 7.499999999999981,
2742
+ "duration": 0.05999999999999961
2743
+ }
2744
+ ]
examples/en/baseline.mid ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1cc22cd12d8bbfe89bef508059f93b2a70c0bd19f3aa7d362ddf8291b640ef6b
3
+ size 2989
examples/en/baseline.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f6873a0a2e7b3c501dd968f4b0617fc5cc09d2c57b5b39935cde3cf6834e1a35
3
+ size 800720
examples/en/dictionary.json ADDED
@@ -0,0 +1,956 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "pitch": 104,
4
+ "velocity": 75,
5
+ "start": 0.07,
6
+ "duration": 0.06
7
+ },
8
+ {
9
+ "pitch": 64,
10
+ "velocity": 105,
11
+ "start": 0.02,
12
+ "duration": 0.12000000000000001
13
+ },
14
+ {
15
+ "pitch": 61,
16
+ "velocity": 45,
17
+ "start": 0.09000000000000001,
18
+ "duration": 0.06000000000000001
19
+ },
20
+ {
21
+ "pitch": 65,
22
+ "velocity": 45,
23
+ "start": 0.15000000000000002,
24
+ "duration": 0.06
25
+ },
26
+ {
27
+ "pitch": 66,
28
+ "velocity": 45,
29
+ "start": 0.0,
30
+ "duration": 0.24000000000000002
31
+ },
32
+ {
33
+ "pitch": 78,
34
+ "velocity": 75,
35
+ "start": 0.2,
36
+ "duration": 0.06
37
+ },
38
+ {
39
+ "pitch": 85,
40
+ "velocity": 75,
41
+ "start": 0.2,
42
+ "duration": 0.06
43
+ },
44
+ {
45
+ "pitch": 86,
46
+ "velocity": 45,
47
+ "start": 0.24000000000000002,
48
+ "duration": 0.060000000000000026
49
+ },
50
+ {
51
+ "pitch": 79,
52
+ "velocity": 45,
53
+ "start": 0.25,
54
+ "duration": 0.06000000000000005
55
+ },
56
+ {
57
+ "pitch": 91,
58
+ "velocity": 75,
59
+ "start": 0.26,
60
+ "duration": 0.06000000000000005
61
+ },
62
+ {
63
+ "pitch": 100,
64
+ "velocity": 45,
65
+ "start": 0.28,
66
+ "duration": 0.06000000000000005
67
+ },
68
+ {
69
+ "pitch": 101,
70
+ "velocity": 45,
71
+ "start": 0.29000000000000004,
72
+ "duration": 0.06000000000000005
73
+ },
74
+ {
75
+ "pitch": 98,
76
+ "velocity": 75,
77
+ "start": 0.31000000000000005,
78
+ "duration": 0.06000000000000005
79
+ },
80
+ {
81
+ "pitch": 66,
82
+ "velocity": 45,
83
+ "start": 0.3500000000000001,
84
+ "duration": 0.06000000000000005
85
+ },
86
+ {
87
+ "pitch": 65,
88
+ "velocity": 45,
89
+ "start": 0.3800000000000001,
90
+ "duration": 0.06000000000000005
91
+ },
92
+ {
93
+ "pitch": 67,
94
+ "velocity": 105,
95
+ "start": 0.2,
96
+ "duration": 0.24000000000000016
97
+ },
98
+ {
99
+ "pitch": 64,
100
+ "velocity": 75,
101
+ "start": 0.41000000000000014,
102
+ "duration": 0.06000000000000005
103
+ },
104
+ {
105
+ "pitch": 81,
106
+ "velocity": 45,
107
+ "start": 0.4900000000000002,
108
+ "duration": 0.06000000000000005
109
+ },
110
+ {
111
+ "pitch": 102,
112
+ "velocity": 45,
113
+ "start": 0.5000000000000002,
114
+ "duration": 0.06000000000000005
115
+ },
116
+ {
117
+ "pitch": 61,
118
+ "velocity": 45,
119
+ "start": 0.5100000000000002,
120
+ "duration": 0.06000000000000005
121
+ },
122
+ {
123
+ "pitch": 98,
124
+ "velocity": 45,
125
+ "start": 0.5100000000000002,
126
+ "duration": 0.06000000000000005
127
+ },
128
+ {
129
+ "pitch": 103,
130
+ "velocity": 45,
131
+ "start": 0.5200000000000002,
132
+ "duration": 0.06000000000000005
133
+ },
134
+ {
135
+ "pitch": 99,
136
+ "velocity": 45,
137
+ "start": 0.6400000000000003,
138
+ "duration": 0.06000000000000005
139
+ },
140
+ {
141
+ "pitch": 101,
142
+ "velocity": 45,
143
+ "start": 0.6400000000000003,
144
+ "duration": 0.06000000000000005
145
+ },
146
+ {
147
+ "pitch": 62,
148
+ "velocity": 105,
149
+ "start": 0.4800000000000002,
150
+ "duration": 0.2400000000000002
151
+ },
152
+ {
153
+ "pitch": 80,
154
+ "velocity": 75,
155
+ "start": 0.5300000000000002,
156
+ "duration": 0.2400000000000002
157
+ },
158
+ {
159
+ "pitch": 95,
160
+ "velocity": 45,
161
+ "start": 0.5300000000000002,
162
+ "duration": 0.2400000000000002
163
+ },
164
+ {
165
+ "pitch": 84,
166
+ "velocity": 45,
167
+ "start": 0.7400000000000004,
168
+ "duration": 0.06000000000000005
169
+ },
170
+ {
171
+ "pitch": 88,
172
+ "velocity": 45,
173
+ "start": 0.7400000000000004,
174
+ "duration": 0.06000000000000005
175
+ },
176
+ {
177
+ "pitch": 60,
178
+ "velocity": 105,
179
+ "start": 0.6900000000000004,
180
+ "duration": 0.1200000000000001
181
+ },
182
+ {
183
+ "pitch": 91,
184
+ "velocity": 45,
185
+ "start": 0.7700000000000005,
186
+ "duration": 0.06000000000000005
187
+ },
188
+ {
189
+ "pitch": 80,
190
+ "velocity": 45,
191
+ "start": 0.8000000000000005,
192
+ "duration": 0.06000000000000005
193
+ },
194
+ {
195
+ "pitch": 94,
196
+ "velocity": 45,
197
+ "start": 0.8200000000000005,
198
+ "duration": 0.06000000000000005
199
+ },
200
+ {
201
+ "pitch": 61,
202
+ "velocity": 45,
203
+ "start": 0.8400000000000005,
204
+ "duration": 0.06000000000000005
205
+ },
206
+ {
207
+ "pitch": 64,
208
+ "velocity": 45,
209
+ "start": 0.8900000000000006,
210
+ "duration": 0.06000000000000005
211
+ },
212
+ {
213
+ "pitch": 79,
214
+ "velocity": 45,
215
+ "start": 0.7600000000000005,
216
+ "duration": 0.2400000000000002
217
+ },
218
+ {
219
+ "pitch": 66,
220
+ "velocity": 45,
221
+ "start": 0.8900000000000006,
222
+ "duration": 0.1200000000000001
223
+ },
224
+ {
225
+ "pitch": 67,
226
+ "velocity": 45,
227
+ "start": 0.9500000000000006,
228
+ "duration": 0.06000000000000005
229
+ },
230
+ {
231
+ "pitch": 108,
232
+ "velocity": 75,
233
+ "start": 0.8200000000000005,
234
+ "duration": 0.2400000000000002
235
+ },
236
+ {
237
+ "pitch": 97,
238
+ "velocity": 45,
239
+ "start": 0.8600000000000005,
240
+ "duration": 0.2400000000000002
241
+ },
242
+ {
243
+ "pitch": 73,
244
+ "velocity": 45,
245
+ "start": 1.2700000000000007,
246
+ "duration": 0.06000000000000005
247
+ },
248
+ {
249
+ "pitch": 80,
250
+ "velocity": 45,
251
+ "start": 1.2800000000000007,
252
+ "duration": 0.06000000000000005
253
+ },
254
+ {
255
+ "pitch": 104,
256
+ "velocity": 45,
257
+ "start": 1.3000000000000007,
258
+ "duration": 0.06000000000000005
259
+ },
260
+ {
261
+ "pitch": 61,
262
+ "velocity": 45,
263
+ "start": 1.4200000000000008,
264
+ "duration": 0.06000000000000005
265
+ },
266
+ {
267
+ "pitch": 85,
268
+ "velocity": 45,
269
+ "start": 1.4300000000000008,
270
+ "duration": 0.06000000000000005
271
+ },
272
+ {
273
+ "pitch": 84,
274
+ "velocity": 75,
275
+ "start": 1.4500000000000008,
276
+ "duration": 0.06000000000000005
277
+ },
278
+ {
279
+ "pitch": 88,
280
+ "velocity": 45,
281
+ "start": 1.4600000000000009,
282
+ "duration": 0.06000000000000005
283
+ },
284
+ {
285
+ "pitch": 60,
286
+ "velocity": 75,
287
+ "start": 1.2900000000000007,
288
+ "duration": 0.2400000000000002
289
+ },
290
+ {
291
+ "pitch": 79,
292
+ "velocity": 45,
293
+ "start": 1.4100000000000008,
294
+ "duration": 0.1200000000000001
295
+ },
296
+ {
297
+ "pitch": 91,
298
+ "velocity": 45,
299
+ "start": 1.4800000000000009,
300
+ "duration": 0.06000000000000005
301
+ },
302
+ {
303
+ "pitch": 59,
304
+ "velocity": 75,
305
+ "start": 1.510000000000001,
306
+ "duration": 0.06000000000000005
307
+ },
308
+ {
309
+ "pitch": 93,
310
+ "velocity": 45,
311
+ "start": 1.520000000000001,
312
+ "duration": 0.06000000000000005
313
+ },
314
+ {
315
+ "pitch": 99,
316
+ "velocity": 45,
317
+ "start": 1.530000000000001,
318
+ "duration": 0.06000000000000005
319
+ },
320
+ {
321
+ "pitch": 64,
322
+ "velocity": 75,
323
+ "start": 1.7400000000000009,
324
+ "duration": 0.06000000000000005
325
+ },
326
+ {
327
+ "pitch": 83,
328
+ "velocity": 45,
329
+ "start": 1.770000000000001,
330
+ "duration": 0.06000000000000005
331
+ },
332
+ {
333
+ "pitch": 94,
334
+ "velocity": 45,
335
+ "start": 1.770000000000001,
336
+ "duration": 0.06000000000000005
337
+ },
338
+ {
339
+ "pitch": 90,
340
+ "velocity": 45,
341
+ "start": 1.910000000000001,
342
+ "duration": 0.06000000000000005
343
+ },
344
+ {
345
+ "pitch": 81,
346
+ "velocity": 75,
347
+ "start": 1.920000000000001,
348
+ "duration": 0.06000000000000005
349
+ },
350
+ {
351
+ "pitch": 61,
352
+ "velocity": 75,
353
+ "start": 1.940000000000001,
354
+ "duration": 0.05999999999999983
355
+ },
356
+ {
357
+ "pitch": 63,
358
+ "velocity": 105,
359
+ "start": 1.760000000000001,
360
+ "duration": 0.24
361
+ },
362
+ {
363
+ "pitch": 103,
364
+ "velocity": 45,
365
+ "start": 1.960000000000001,
366
+ "duration": 0.05999999999999983
367
+ },
368
+ {
369
+ "pitch": 59,
370
+ "velocity": 45,
371
+ "start": 1.990000000000001,
372
+ "duration": 0.11999999999999966
373
+ },
374
+ {
375
+ "pitch": 57,
376
+ "velocity": 45,
377
+ "start": 2.0300000000000007,
378
+ "duration": 0.1200000000000001
379
+ },
380
+ {
381
+ "pitch": 104,
382
+ "velocity": 45,
383
+ "start": 2.0900000000000007,
384
+ "duration": 0.06000000000000005
385
+ },
386
+ {
387
+ "pitch": 102,
388
+ "velocity": 45,
389
+ "start": 2.3400000000000007,
390
+ "duration": 0.05999999999999961
391
+ },
392
+ {
393
+ "pitch": 101,
394
+ "velocity": 45,
395
+ "start": 2.3500000000000005,
396
+ "duration": 0.05999999999999961
397
+ },
398
+ {
399
+ "pitch": 61,
400
+ "velocity": 45,
401
+ "start": 2.3700000000000006,
402
+ "duration": 0.05999999999999961
403
+ },
404
+ {
405
+ "pitch": 97,
406
+ "velocity": 45,
407
+ "start": 2.3800000000000003,
408
+ "duration": 0.05999999999999961
409
+ },
410
+ {
411
+ "pitch": 64,
412
+ "velocity": 105,
413
+ "start": 2.4699999999999998,
414
+ "duration": 0.05999999999999961
415
+ },
416
+ {
417
+ "pitch": 65,
418
+ "velocity": 45,
419
+ "start": 2.4999999999999996,
420
+ "duration": 0.05999999999999961
421
+ },
422
+ {
423
+ "pitch": 62,
424
+ "velocity": 45,
425
+ "start": 2.3800000000000003,
426
+ "duration": 0.23999999999999844
427
+ },
428
+ {
429
+ "pitch": 61,
430
+ "velocity": 45,
431
+ "start": 2.589999999999999,
432
+ "duration": 0.05999999999999961
433
+ },
434
+ {
435
+ "pitch": 103,
436
+ "velocity": 45,
437
+ "start": 2.5999999999999988,
438
+ "duration": 0.05999999999999961
439
+ },
440
+ {
441
+ "pitch": 59,
442
+ "velocity": 75,
443
+ "start": 2.6299999999999986,
444
+ "duration": 0.05999999999999961
445
+ },
446
+ {
447
+ "pitch": 57,
448
+ "velocity": 45,
449
+ "start": 2.689999999999998,
450
+ "duration": 0.23999999999999977
451
+ },
452
+ {
453
+ "pitch": 59,
454
+ "velocity": 45,
455
+ "start": 2.919999999999998,
456
+ "duration": 0.05999999999999961
457
+ },
458
+ {
459
+ "pitch": 103,
460
+ "velocity": 45,
461
+ "start": 2.999999999999998,
462
+ "duration": 0.05999999999999961
463
+ },
464
+ {
465
+ "pitch": 77,
466
+ "velocity": 45,
467
+ "start": 3.0099999999999976,
468
+ "duration": 0.05999999999999961
469
+ },
470
+ {
471
+ "pitch": 58,
472
+ "velocity": 75,
473
+ "start": 2.839999999999998,
474
+ "duration": 0.23999999999999888
475
+ },
476
+ {
477
+ "pitch": 104,
478
+ "velocity": 45,
479
+ "start": 3.0399999999999974,
480
+ "duration": 0.05999999999999961
481
+ },
482
+ {
483
+ "pitch": 70,
484
+ "velocity": 45,
485
+ "start": 2.969999999999998,
486
+ "duration": 0.23999999999999844
487
+ },
488
+ {
489
+ "pitch": 57,
490
+ "velocity": 45,
491
+ "start": 3.149999999999997,
492
+ "duration": 0.11999999999999922
493
+ },
494
+ {
495
+ "pitch": 59,
496
+ "velocity": 45,
497
+ "start": 3.1599999999999966,
498
+ "duration": 0.11999999999999922
499
+ },
500
+ {
501
+ "pitch": 61,
502
+ "velocity": 45,
503
+ "start": 3.2599999999999962,
504
+ "duration": 0.05999999999999961
505
+ },
506
+ {
507
+ "pitch": 64,
508
+ "velocity": 75,
509
+ "start": 3.299999999999996,
510
+ "duration": 0.05999999999999961
511
+ },
512
+ {
513
+ "pitch": 68,
514
+ "velocity": 45,
515
+ "start": 3.3799999999999955,
516
+ "duration": 0.06000000000000005
517
+ },
518
+ {
519
+ "pitch": 64,
520
+ "velocity": 45,
521
+ "start": 3.4499999999999953,
522
+ "duration": 0.05999999999999961
523
+ },
524
+ {
525
+ "pitch": 60,
526
+ "velocity": 45,
527
+ "start": 3.479999999999995,
528
+ "duration": 0.05999999999999961
529
+ },
530
+ {
531
+ "pitch": 66,
532
+ "velocity": 75,
533
+ "start": 3.3299999999999956,
534
+ "duration": 0.23999999999999888
535
+ },
536
+ {
537
+ "pitch": 98,
538
+ "velocity": 45,
539
+ "start": 3.5199999999999947,
540
+ "duration": 0.05999999999999961
541
+ },
542
+ {
543
+ "pitch": 54,
544
+ "velocity": 75,
545
+ "start": 3.5399999999999947,
546
+ "duration": 0.059999999999999165
547
+ },
548
+ {
549
+ "pitch": 81,
550
+ "velocity": 75,
551
+ "start": 3.5499999999999945,
552
+ "duration": 0.059999999999999165
553
+ },
554
+ {
555
+ "pitch": 80,
556
+ "velocity": 45,
557
+ "start": 3.5799999999999943,
558
+ "duration": 0.059999999999999165
559
+ },
560
+ {
561
+ "pitch": 104,
562
+ "velocity": 45,
563
+ "start": 3.5799999999999943,
564
+ "duration": 0.23999999999999932
565
+ },
566
+ {
567
+ "pitch": 107,
568
+ "velocity": 45,
569
+ "start": 3.589999999999994,
570
+ "duration": 0.23999999999999932
571
+ },
572
+ {
573
+ "pitch": 108,
574
+ "velocity": 45,
575
+ "start": 3.6399999999999935,
576
+ "duration": 0.23999999999999977
577
+ },
578
+ {
579
+ "pitch": 107,
580
+ "velocity": 45,
581
+ "start": 3.859999999999993,
582
+ "duration": 0.1200000000000001
583
+ },
584
+ {
585
+ "pitch": 61,
586
+ "velocity": 75,
587
+ "start": 4.369999999999993,
588
+ "duration": 0.05999999999999961
589
+ },
590
+ {
591
+ "pitch": 81,
592
+ "velocity": 45,
593
+ "start": 4.379999999999993,
594
+ "duration": 0.05999999999999961
595
+ },
596
+ {
597
+ "pitch": 97,
598
+ "velocity": 45,
599
+ "start": 4.399999999999992,
600
+ "duration": 0.05999999999999961
601
+ },
602
+ {
603
+ "pitch": 65,
604
+ "velocity": 105,
605
+ "start": 4.529999999999992,
606
+ "duration": 0.05999999999999872
607
+ },
608
+ {
609
+ "pitch": 64,
610
+ "velocity": 45,
611
+ "start": 4.549999999999992,
612
+ "duration": 0.05999999999999872
613
+ },
614
+ {
615
+ "pitch": 98,
616
+ "velocity": 45,
617
+ "start": 4.549999999999992,
618
+ "duration": 0.05999999999999872
619
+ },
620
+ {
621
+ "pitch": 63,
622
+ "velocity": 45,
623
+ "start": 4.569999999999991,
624
+ "duration": 0.05999999999999872
625
+ },
626
+ {
627
+ "pitch": 103,
628
+ "velocity": 45,
629
+ "start": 4.67999999999999,
630
+ "duration": 0.0600000000000005
631
+ },
632
+ {
633
+ "pitch": 102,
634
+ "velocity": 45,
635
+ "start": 4.70999999999999,
636
+ "duration": 0.0600000000000005
637
+ },
638
+ {
639
+ "pitch": 107,
640
+ "velocity": 75,
641
+ "start": 4.73999999999999,
642
+ "duration": 0.05999999999999961
643
+ },
644
+ {
645
+ "pitch": 64,
646
+ "velocity": 75,
647
+ "start": 4.7799999999999905,
648
+ "duration": 0.05999999999999872
649
+ },
650
+ {
651
+ "pitch": 101,
652
+ "velocity": 45,
653
+ "start": 4.78999999999999,
654
+ "duration": 0.05999999999999872
655
+ },
656
+ {
657
+ "pitch": 66,
658
+ "velocity": 105,
659
+ "start": 4.81999999999999,
660
+ "duration": 0.05999999999999872
661
+ },
662
+ {
663
+ "pitch": 84,
664
+ "velocity": 45,
665
+ "start": 4.81999999999999,
666
+ "duration": 0.05999999999999872
667
+ },
668
+ {
669
+ "pitch": 99,
670
+ "velocity": 45,
671
+ "start": 4.849999999999989,
672
+ "duration": 0.05999999999999961
673
+ },
674
+ {
675
+ "pitch": 79,
676
+ "velocity": 45,
677
+ "start": 4.859999999999989,
678
+ "duration": 0.05999999999999961
679
+ },
680
+ {
681
+ "pitch": 97,
682
+ "velocity": 45,
683
+ "start": 4.859999999999989,
684
+ "duration": 0.05999999999999961
685
+ },
686
+ {
687
+ "pitch": 63,
688
+ "velocity": 45,
689
+ "start": 4.9999999999999885,
690
+ "duration": 0.05999999999999961
691
+ },
692
+ {
693
+ "pitch": 61,
694
+ "velocity": 45,
695
+ "start": 5.019999999999988,
696
+ "duration": 0.05999999999999961
697
+ },
698
+ {
699
+ "pitch": 69,
700
+ "velocity": 45,
701
+ "start": 5.099999999999987,
702
+ "duration": 0.05999999999999961
703
+ },
704
+ {
705
+ "pitch": 55,
706
+ "velocity": 45,
707
+ "start": 5.139999999999987,
708
+ "duration": 0.11999999999999922
709
+ },
710
+ {
711
+ "pitch": 56,
712
+ "velocity": 75,
713
+ "start": 5.049999999999988,
714
+ "duration": 0.23999999999999844
715
+ },
716
+ {
717
+ "pitch": 107,
718
+ "velocity": 45,
719
+ "start": 5.239999999999987,
720
+ "duration": 0.05999999999999961
721
+ },
722
+ {
723
+ "pitch": 58,
724
+ "velocity": 45,
725
+ "start": 5.389999999999986,
726
+ "duration": 0.05999999999999961
727
+ },
728
+ {
729
+ "pitch": 104,
730
+ "velocity": 45,
731
+ "start": 5.399999999999986,
732
+ "duration": 0.05999999999999961
733
+ },
734
+ {
735
+ "pitch": 103,
736
+ "velocity": 45,
737
+ "start": 5.499999999999986,
738
+ "duration": 0.05999999999999961
739
+ },
740
+ {
741
+ "pitch": 60,
742
+ "velocity": 45,
743
+ "start": 5.559999999999985,
744
+ "duration": 0.05999999999999961
745
+ },
746
+ {
747
+ "pitch": 61,
748
+ "velocity": 75,
749
+ "start": 5.609999999999985,
750
+ "duration": 0.05999999999999872
751
+ },
752
+ {
753
+ "pitch": 80,
754
+ "velocity": 45,
755
+ "start": 5.629999999999985,
756
+ "duration": 0.05999999999999872
757
+ },
758
+ {
759
+ "pitch": 107,
760
+ "velocity": 75,
761
+ "start": 5.669999999999984,
762
+ "duration": 0.05999999999999872
763
+ },
764
+ {
765
+ "pitch": 64,
766
+ "velocity": 105,
767
+ "start": 5.6899999999999835,
768
+ "duration": 0.05999999999999872
769
+ },
770
+ {
771
+ "pitch": 97,
772
+ "velocity": 45,
773
+ "start": 5.699999999999983,
774
+ "duration": 0.05999999999999872
775
+ },
776
+ {
777
+ "pitch": 65,
778
+ "velocity": 75,
779
+ "start": 5.719999999999983,
780
+ "duration": 0.05999999999999872
781
+ },
782
+ {
783
+ "pitch": 62,
784
+ "velocity": 45,
785
+ "start": 5.799999999999981,
786
+ "duration": 0.05999999999999961
787
+ },
788
+ {
789
+ "pitch": 80,
790
+ "velocity": 45,
791
+ "start": 5.809999999999981,
792
+ "duration": 0.05999999999999961
793
+ },
794
+ {
795
+ "pitch": 104,
796
+ "velocity": 45,
797
+ "start": 5.809999999999981,
798
+ "duration": 0.05999999999999961
799
+ },
800
+ {
801
+ "pitch": 60,
802
+ "velocity": 45,
803
+ "start": 5.819999999999981,
804
+ "duration": 0.05999999999999961
805
+ },
806
+ {
807
+ "pitch": 81,
808
+ "velocity": 45,
809
+ "start": 5.649999999999984,
810
+ "duration": 0.23999999999999577
811
+ },
812
+ {
813
+ "pitch": 102,
814
+ "velocity": 45,
815
+ "start": 5.95999999999998,
816
+ "duration": 0.05999999999999961
817
+ },
818
+ {
819
+ "pitch": 97,
820
+ "velocity": 45,
821
+ "start": 5.96999999999998,
822
+ "duration": 0.05999999999999961
823
+ },
824
+ {
825
+ "pitch": 58,
826
+ "velocity": 75,
827
+ "start": 6.01999999999998,
828
+ "duration": 0.05999999999999872
829
+ },
830
+ {
831
+ "pitch": 81,
832
+ "velocity": 45,
833
+ "start": 6.049999999999979,
834
+ "duration": 0.05999999999999961
835
+ },
836
+ {
837
+ "pitch": 104,
838
+ "velocity": 45,
839
+ "start": 6.059999999999979,
840
+ "duration": 0.05999999999999961
841
+ },
842
+ {
843
+ "pitch": 108,
844
+ "velocity": 75,
845
+ "start": 6.219999999999978,
846
+ "duration": 0.0600000000000005
847
+ },
848
+ {
849
+ "pitch": 59,
850
+ "velocity": 75,
851
+ "start": 6.249999999999979,
852
+ "duration": 0.0600000000000005
853
+ },
854
+ {
855
+ "pitch": 99,
856
+ "velocity": 45,
857
+ "start": 6.429999999999979,
858
+ "duration": 0.05999999999999961
859
+ },
860
+ {
861
+ "pitch": 104,
862
+ "velocity": 45,
863
+ "start": 6.5099999999999785,
864
+ "duration": 0.05999999999999961
865
+ },
866
+ {
867
+ "pitch": 62,
868
+ "velocity": 45,
869
+ "start": 6.489999999999979,
870
+ "duration": 0.23999999999999932
871
+ },
872
+ {
873
+ "pitch": 61,
874
+ "velocity": 45,
875
+ "start": 6.689999999999978,
876
+ "duration": 0.05999999999999961
877
+ },
878
+ {
879
+ "pitch": 64,
880
+ "velocity": 45,
881
+ "start": 6.699999999999978,
882
+ "duration": 0.05999999999999961
883
+ },
884
+ {
885
+ "pitch": 108,
886
+ "velocity": 105,
887
+ "start": 6.829999999999978,
888
+ "duration": 0.05999999999999961
889
+ },
890
+ {
891
+ "pitch": 104,
892
+ "velocity": 45,
893
+ "start": 6.869999999999978,
894
+ "duration": 0.05999999999999961
895
+ },
896
+ {
897
+ "pitch": 61,
898
+ "velocity": 45,
899
+ "start": 6.989999999999977,
900
+ "duration": 0.05999999999999961
901
+ },
902
+ {
903
+ "pitch": 64,
904
+ "velocity": 45,
905
+ "start": 7.039999999999977,
906
+ "duration": 0.05999999999999961
907
+ },
908
+ {
909
+ "pitch": 62,
910
+ "velocity": 45,
911
+ "start": 6.979999999999977,
912
+ "duration": 0.23999999999999932
913
+ },
914
+ {
915
+ "pitch": 75,
916
+ "velocity": 45,
917
+ "start": 7.209999999999977,
918
+ "duration": 0.05999999999999961
919
+ },
920
+ {
921
+ "pitch": 64,
922
+ "velocity": 105,
923
+ "start": 7.239999999999976,
924
+ "duration": 0.0600000000000005
925
+ },
926
+ {
927
+ "pitch": 77,
928
+ "velocity": 45,
929
+ "start": 7.2699999999999765,
930
+ "duration": 0.05999999999999961
931
+ },
932
+ {
933
+ "pitch": 66,
934
+ "velocity": 75,
935
+ "start": 7.299999999999977,
936
+ "duration": 0.05999999999999961
937
+ },
938
+ {
939
+ "pitch": 93,
940
+ "velocity": 45,
941
+ "start": 7.299999999999977,
942
+ "duration": 0.05999999999999961
943
+ },
944
+ {
945
+ "pitch": 78,
946
+ "velocity": 45,
947
+ "start": 7.319999999999976,
948
+ "duration": 0.05999999999999961
949
+ },
950
+ {
951
+ "pitch": 61,
952
+ "velocity": 45,
953
+ "start": 7.409999999999976,
954
+ "duration": 0.05999999999999961
955
+ }
956
+ ]
examples/en/dictionary.mid ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e272c5714faf3f33700bf401f63f2749c58bdac4ad9a11ecd0c22c8a516f2348
3
+ size 1163
examples/en/dictionary.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:742f148aa275c6dddfcb6560cbd8ba030551529fde0229b447ef6ac8feaa32d0
3
+ size 800720
examples/en/metrics.json ADDED
@@ -0,0 +1,369 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "input": "examples/en/source.wav",
3
+ "seconds": 7.84,
4
+ "renderer": {
5
+ "soundfont_sha256": "5b85b6c2c61d10b2b91cddd41efcce7b25cd31c8271d511c73afafbef20b6fa3",
6
+ "sr": 24000,
7
+ "hop": 240,
8
+ "nfft": 2048,
9
+ "preset_name": "Grand Piano",
10
+ "renderer_library_sha256": "6ef97148241a3c529ad1a528631a3610aa5ec75f3846ba5534cb494ddbe6812c",
11
+ "pitches": [
12
+ 36,
13
+ 37,
14
+ 38,
15
+ 39,
16
+ 40,
17
+ 41,
18
+ 42,
19
+ 43,
20
+ 44,
21
+ 45,
22
+ 46,
23
+ 47,
24
+ 48,
25
+ 49,
26
+ 50,
27
+ 51,
28
+ 52,
29
+ 53,
30
+ 54,
31
+ 55,
32
+ 56,
33
+ 57,
34
+ 58,
35
+ 59,
36
+ 60,
37
+ 61,
38
+ 62,
39
+ 63,
40
+ 64,
41
+ 65,
42
+ 66,
43
+ 67,
44
+ 68,
45
+ 69,
46
+ 70,
47
+ 71,
48
+ 72,
49
+ 73,
50
+ 74,
51
+ 75,
52
+ 76,
53
+ 77,
54
+ 78,
55
+ 79,
56
+ 80,
57
+ 81,
58
+ 82,
59
+ 83,
60
+ 84,
61
+ 85,
62
+ 86,
63
+ 87,
64
+ 88,
65
+ 89,
66
+ 90,
67
+ 91,
68
+ 92,
69
+ 93,
70
+ 94,
71
+ 95,
72
+ 96,
73
+ 97,
74
+ 98,
75
+ 99,
76
+ 100,
77
+ 101,
78
+ 102,
79
+ 103,
80
+ 104,
81
+ 105,
82
+ 106,
83
+ 107,
84
+ 108
85
+ ],
86
+ "velocities": [
87
+ 45,
88
+ 75,
89
+ 105
90
+ ],
91
+ "durations": [
92
+ 0.06,
93
+ 0.12,
94
+ 0.24
95
+ ],
96
+ "tail": 0.3,
97
+ "gain": 0.8,
98
+ "bank": 0,
99
+ "program": 0,
100
+ "effects": false,
101
+ "renderer_revision": 3
102
+ },
103
+ "results": {
104
+ "baseline": {
105
+ "spectral_convergence": 0.8311071395874023,
106
+ "log_band_mae": 0.4577343463897705,
107
+ "waveform_rmse": 0.038239434361457825,
108
+ "peak": 0.08251953125,
109
+ "notes": 457
110
+ },
111
+ "dictionary": {
112
+ "spectral_convergence": 0.7595574259757996,
113
+ "log_band_mae": 0.41065511107444763,
114
+ "waveform_rmse": 0.04594961181282997,
115
+ "peak": 0.2164306640625,
116
+ "notes": 159
117
+ },
118
+ "refined": {
119
+ "spectral_convergence": 0.7606934309005737,
120
+ "log_band_mae": 0.3874739408493042,
121
+ "waveform_rmse": 0.04269171506166458,
122
+ "peak": 0.1861724853515625,
123
+ "notes": 148
124
+ }
125
+ },
126
+ "render_repeatability": {
127
+ "spectral_convergence": 0.00038946481072343886,
128
+ "log_band_loss_delta": 2.9802322387695312e-06
129
+ },
130
+ "pursuit": {
131
+ "accepted": 159,
132
+ "surrogate_improvements": [
133
+ 10558.4384765625,
134
+ 7962.7666015625,
135
+ 5715.4150390625,
136
+ 4834.4609375,
137
+ 4818.0126953125,
138
+ 4130.3291015625,
139
+ 3561.078369140625,
140
+ 3054.567626953125,
141
+ 2828.303955078125,
142
+ 2729.42138671875,
143
+ 2669.8310546875,
144
+ 2600.94384765625,
145
+ 2541.796630859375,
146
+ 2499.138671875,
147
+ 2358.1962890625,
148
+ 2025.1171875,
149
+ 1868.8902587890625,
150
+ 1587.477783203125,
151
+ 1505.8052978515625,
152
+ 1470.310302734375,
153
+ 1463.44091796875,
154
+ 1455.779296875,
155
+ 1395.0450439453125,
156
+ 1251.4173583984375,
157
+ 1196.8651123046875,
158
+ 1175.1383056640625,
159
+ 1097.8623046875,
160
+ 1049.9212646484375,
161
+ 1043.9747314453125,
162
+ 1032.818603515625,
163
+ 969.533935546875,
164
+ 900.7930908203125,
165
+ 889.942138671875,
166
+ 868.384521484375,
167
+ 818.9688720703125,
168
+ 804.3232421875,
169
+ 788.57861328125,
170
+ 767.5830078125,
171
+ 765.97119140625,
172
+ 764.38671875,
173
+ 726.8178100585938,
174
+ 705.6483154296875,
175
+ 681.6700439453125,
176
+ 655.1786499023438,
177
+ 632.2413940429688,
178
+ 607.3171997070312,
179
+ 597.638427734375,
180
+ 592.790283203125,
181
+ 566.4576416015625,
182
+ 550.314208984375,
183
+ 545.9325561523438,
184
+ 516.3138427734375,
185
+ 498.017333984375,
186
+ 496.83941650390625,
187
+ 475.308837890625,
188
+ 470.1158447265625,
189
+ 458.0395202636719,
190
+ 437.9156494140625,
191
+ 434.23394775390625,
192
+ 418.92169189453125,
193
+ 414.6388244628906,
194
+ 409.8388671875,
195
+ 406.0827331542969,
196
+ 397.35064697265625,
197
+ 361.15875244140625,
198
+ 351.2940979003906,
199
+ 350.638671875,
200
+ 348.0697021484375,
201
+ 344.16351318359375,
202
+ 320.3564758300781,
203
+ 312.5291442871094,
204
+ 304.381103515625,
205
+ 302.6427917480469,
206
+ 298.3839416503906,
207
+ 277.4814453125,
208
+ 258.9993896484375,
209
+ 258.8589172363281,
210
+ 257.4494934082031,
211
+ 256.14251708984375,
212
+ 251.90460205078125,
213
+ 247.6282958984375,
214
+ 237.59478759765625,
215
+ 218.486083984375,
216
+ 206.99249267578125,
217
+ 196.5882568359375,
218
+ 194.52203369140625,
219
+ 194.25827026367188,
220
+ 192.5644989013672,
221
+ 189.775390625,
222
+ 186.1031494140625,
223
+ 182.21157836914062,
224
+ 179.97972106933594,
225
+ 172.13833618164062,
226
+ 168.379150390625,
227
+ 163.37557983398438,
228
+ 162.050537109375,
229
+ 159.35293579101562,
230
+ 150.99884033203125,
231
+ 143.433349609375,
232
+ 142.3600311279297,
233
+ 133.32754516601562,
234
+ 131.35986328125,
235
+ 129.4129638671875,
236
+ 128.5037841796875,
237
+ 124.34005737304688,
238
+ 120.27095031738281,
239
+ 113.77438354492188,
240
+ 113.61799621582031,
241
+ 111.92544555664062,
242
+ 106.53375244140625,
243
+ 97.86294555664062,
244
+ 97.17410278320312,
245
+ 92.25390625,
246
+ 84.85130310058594,
247
+ 83.4329833984375,
248
+ 83.315673828125,
249
+ 79.22296142578125,
250
+ 71.72164916992188,
251
+ 67.56948852539062,
252
+ 63.90354919433594,
253
+ 63.26670837402344,
254
+ 62.13752746582031,
255
+ 61.413909912109375,
256
+ 59.041595458984375,
257
+ 58.68309020996094,
258
+ 53.02793884277344,
259
+ 51.157684326171875,
260
+ 50.46064758300781,
261
+ 49.80511474609375,
262
+ 49.77580261230469,
263
+ 48.7662353515625,
264
+ 46.16965103149414,
265
+ 44.27165222167969,
266
+ 40.14201354980469,
267
+ 39.092742919921875,
268
+ 38.146484375,
269
+ 36.064605712890625,
270
+ 33.02142333984375,
271
+ 30.11712646484375,
272
+ 29.4931640625,
273
+ 28.2784423828125,
274
+ 25.933815002441406,
275
+ 25.50750732421875,
276
+ 23.485584259033203,
277
+ 21.60456085205078,
278
+ 20.85321044921875,
279
+ 19.01141357421875,
280
+ 18.26642608642578,
281
+ 17.060089111328125,
282
+ 14.386226654052734,
283
+ 12.91082763671875,
284
+ 12.244163513183594,
285
+ 11.771728515625,
286
+ 10.889877319335938,
287
+ 6.941280364990234,
288
+ 6.2841339111328125,
289
+ 4.660541534423828,
290
+ 4.391815185546875,
291
+ 3.1736907958984375
292
+ ],
293
+ "device": "cuda"
294
+ },
295
+ "baseline_velocity_trials": [
296
+ {
297
+ "velocity_delta": -36,
298
+ "spectral_convergence": 0.8310962915420532,
299
+ "log_band_mae": 0.4577361047267914,
300
+ "waveform_rmse": 0.03823858126997948,
301
+ "peak": 0.082489013671875
302
+ },
303
+ {
304
+ "velocity_delta": -24,
305
+ "spectral_convergence": 0.81913161277771,
306
+ "log_band_mae": 0.45899340510368347,
307
+ "waveform_rmse": 0.04240952432155609,
308
+ "peak": 0.1371002197265625
309
+ },
310
+ {
311
+ "velocity_delta": -12,
312
+ "spectral_convergence": 0.9158480167388916,
313
+ "log_band_mae": 0.49990421533584595,
314
+ "waveform_rmse": 0.04917972907423973,
315
+ "peak": 0.1988067626953125
316
+ },
317
+ {
318
+ "velocity_delta": 0,
319
+ "spectral_convergence": 1.1701204776763916,
320
+ "log_band_mae": 0.5716279149055481,
321
+ "waveform_rmse": 0.06068168580532074,
322
+ "peak": 0.287872314453125
323
+ },
324
+ {
325
+ "velocity_delta": 12,
326
+ "spectral_convergence": 1.588895320892334,
327
+ "log_band_mae": 0.6667157411575317,
328
+ "waveform_rmse": 0.07582571357488632,
329
+ "peak": 0.3860015869140625
330
+ }
331
+ ],
332
+ "velocity_trials": [
333
+ {
334
+ "velocity_delta": -12,
335
+ "spectral_convergence": 0.7651746869087219,
336
+ "log_band_mae": 0.41147884726524353,
337
+ "waveform_rmse": 0.041835229843854904,
338
+ "peak": 0.16778564453125
339
+ },
340
+ {
341
+ "velocity_delta": -6,
342
+ "spectral_convergence": 0.7547203302383423,
343
+ "log_band_mae": 0.40575388073921204,
344
+ "waveform_rmse": 0.04339601844549179,
345
+ "peak": 0.1864776611328125
346
+ },
347
+ {
348
+ "velocity_delta": 6,
349
+ "spectral_convergence": 0.7828538417816162,
350
+ "log_band_mae": 0.41924867033958435,
351
+ "waveform_rmse": 0.0466630682349205,
352
+ "peak": 0.2800140380859375
353
+ },
354
+ {
355
+ "velocity_delta": 12,
356
+ "spectral_convergence": 0.8264999985694885,
357
+ "log_band_mae": 0.4333062171936035,
358
+ "waveform_rmse": 0.04959730803966522,
359
+ "peak": 0.3137359619140625
360
+ }
361
+ ],
362
+ "wall_seconds": 458.2200195789337,
363
+ "caveats": [
364
+ "These longer demo samples have no human intelligibility or ASR evaluation.",
365
+ "Magnitude addition is approximate; phase interactions evaluated only on re-render.",
366
+ "73 pitches, 3 velocities, 3 gate durations; short dictionary tails are truncated.",
367
+ "Baseline is heuristic and has a different note count."
368
+ ]
369
+ }
examples/en/piano-roll.png ADDED

Git LFS Details

  • SHA256: 18aec3f6fa07270348a4850c38f8ccf1527d8ea26add0b78a321596129da55cc
  • Pointer size: 130 Bytes
  • Size of remote file: 40.3 kB
examples/en/refined.json ADDED
@@ -0,0 +1,890 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "pitch": 104,
4
+ "velocity": 69,
5
+ "start": 0.07,
6
+ "duration": 0.04000000000000001
7
+ },
8
+ {
9
+ "pitch": 64,
10
+ "velocity": 99,
11
+ "start": 0.02,
12
+ "duration": 0.1
13
+ },
14
+ {
15
+ "pitch": 61,
16
+ "velocity": 29,
17
+ "start": 0.09000000000000001,
18
+ "duration": 0.06000000000000001
19
+ },
20
+ {
21
+ "pitch": 65,
22
+ "velocity": 29,
23
+ "start": 0.15000000000000002,
24
+ "duration": 0.06
25
+ },
26
+ {
27
+ "pitch": 66,
28
+ "velocity": 29,
29
+ "start": 0.0,
30
+ "duration": 0.24000000000000002
31
+ },
32
+ {
33
+ "pitch": 78,
34
+ "velocity": 69,
35
+ "start": 0.2,
36
+ "duration": 0.04000000000000001
37
+ },
38
+ {
39
+ "pitch": 85,
40
+ "velocity": 59,
41
+ "start": 0.2,
42
+ "duration": 0.06
43
+ },
44
+ {
45
+ "pitch": 86,
46
+ "velocity": 39,
47
+ "start": 0.23,
48
+ "duration": 0.060000000000000026
49
+ },
50
+ {
51
+ "pitch": 79,
52
+ "velocity": 29,
53
+ "start": 0.25,
54
+ "duration": 0.06000000000000005
55
+ },
56
+ {
57
+ "pitch": 100,
58
+ "velocity": 39,
59
+ "start": 0.27,
60
+ "duration": 0.06000000000000005
61
+ },
62
+ {
63
+ "pitch": 101,
64
+ "velocity": 49,
65
+ "start": 0.29000000000000004,
66
+ "duration": 0.06000000000000005
67
+ },
68
+ {
69
+ "pitch": 98,
70
+ "velocity": 69,
71
+ "start": 0.31000000000000005,
72
+ "duration": 0.06000000000000005
73
+ },
74
+ {
75
+ "pitch": 66,
76
+ "velocity": 49,
77
+ "start": 0.3500000000000001,
78
+ "duration": 0.06000000000000005
79
+ },
80
+ {
81
+ "pitch": 67,
82
+ "velocity": 99,
83
+ "start": 0.2,
84
+ "duration": 0.22000000000000014
85
+ },
86
+ {
87
+ "pitch": 65,
88
+ "velocity": 29,
89
+ "start": 0.3800000000000001,
90
+ "duration": 0.06000000000000005
91
+ },
92
+ {
93
+ "pitch": 81,
94
+ "velocity": 39,
95
+ "start": 0.5000000000000001,
96
+ "duration": 0.06000000000000005
97
+ },
98
+ {
99
+ "pitch": 102,
100
+ "velocity": 49,
101
+ "start": 0.5000000000000001,
102
+ "duration": 0.06000000000000005
103
+ },
104
+ {
105
+ "pitch": 61,
106
+ "velocity": 49,
107
+ "start": 0.5100000000000001,
108
+ "duration": 0.06000000000000005
109
+ },
110
+ {
111
+ "pitch": 98,
112
+ "velocity": 49,
113
+ "start": 0.5100000000000001,
114
+ "duration": 0.06000000000000005
115
+ },
116
+ {
117
+ "pitch": 103,
118
+ "velocity": 49,
119
+ "start": 0.5200000000000001,
120
+ "duration": 0.06000000000000005
121
+ },
122
+ {
123
+ "pitch": 99,
124
+ "velocity": 49,
125
+ "start": 0.6400000000000001,
126
+ "duration": 0.06000000000000005
127
+ },
128
+ {
129
+ "pitch": 101,
130
+ "velocity": 49,
131
+ "start": 0.6400000000000001,
132
+ "duration": 0.06000000000000005
133
+ },
134
+ {
135
+ "pitch": 62,
136
+ "velocity": 109,
137
+ "start": 0.48000000000000015,
138
+ "duration": 0.24000000000000005
139
+ },
140
+ {
141
+ "pitch": 80,
142
+ "velocity": 59,
143
+ "start": 0.5300000000000001,
144
+ "duration": 0.2400000000000001
145
+ },
146
+ {
147
+ "pitch": 95,
148
+ "velocity": 49,
149
+ "start": 0.5300000000000001,
150
+ "duration": 0.2400000000000001
151
+ },
152
+ {
153
+ "pitch": 84,
154
+ "velocity": 39,
155
+ "start": 0.7300000000000002,
156
+ "duration": 0.06000000000000005
157
+ },
158
+ {
159
+ "pitch": 60,
160
+ "velocity": 89,
161
+ "start": 0.6900000000000002,
162
+ "duration": 0.1200000000000001
163
+ },
164
+ {
165
+ "pitch": 88,
166
+ "velocity": 39,
167
+ "start": 0.7500000000000002,
168
+ "duration": 0.06000000000000005
169
+ },
170
+ {
171
+ "pitch": 80,
172
+ "velocity": 39,
173
+ "start": 0.8100000000000003,
174
+ "duration": 0.06000000000000005
175
+ },
176
+ {
177
+ "pitch": 94,
178
+ "velocity": 39,
179
+ "start": 0.8100000000000003,
180
+ "duration": 0.06000000000000005
181
+ },
182
+ {
183
+ "pitch": 61,
184
+ "velocity": 39,
185
+ "start": 0.8300000000000003,
186
+ "duration": 0.06000000000000005
187
+ },
188
+ {
189
+ "pitch": 64,
190
+ "velocity": 29,
191
+ "start": 0.8900000000000003,
192
+ "duration": 0.06000000000000005
193
+ },
194
+ {
195
+ "pitch": 67,
196
+ "velocity": 39,
197
+ "start": 0.9500000000000004,
198
+ "duration": 0.040000000000000036
199
+ },
200
+ {
201
+ "pitch": 79,
202
+ "velocity": 29,
203
+ "start": 0.7600000000000002,
204
+ "duration": 0.2400000000000002
205
+ },
206
+ {
207
+ "pitch": 66,
208
+ "velocity": 29,
209
+ "start": 0.8900000000000003,
210
+ "duration": 0.1200000000000001
211
+ },
212
+ {
213
+ "pitch": 108,
214
+ "velocity": 79,
215
+ "start": 0.8200000000000003,
216
+ "duration": 0.2400000000000002
217
+ },
218
+ {
219
+ "pitch": 97,
220
+ "velocity": 49,
221
+ "start": 0.8600000000000003,
222
+ "duration": 0.2400000000000002
223
+ },
224
+ {
225
+ "pitch": 80,
226
+ "velocity": 39,
227
+ "start": 1.2800000000000005,
228
+ "duration": 0.040000000000000036
229
+ },
230
+ {
231
+ "pitch": 73,
232
+ "velocity": 39,
233
+ "start": 1.2800000000000005,
234
+ "duration": 0.06000000000000005
235
+ },
236
+ {
237
+ "pitch": 104,
238
+ "velocity": 49,
239
+ "start": 1.3000000000000005,
240
+ "duration": 0.06000000000000005
241
+ },
242
+ {
243
+ "pitch": 61,
244
+ "velocity": 29,
245
+ "start": 1.4200000000000006,
246
+ "duration": 0.06000000000000005
247
+ },
248
+ {
249
+ "pitch": 85,
250
+ "velocity": 29,
251
+ "start": 1.4300000000000006,
252
+ "duration": 0.06000000000000005
253
+ },
254
+ {
255
+ "pitch": 60,
256
+ "velocity": 69,
257
+ "start": 1.2900000000000005,
258
+ "duration": 0.2200000000000002
259
+ },
260
+ {
261
+ "pitch": 84,
262
+ "velocity": 59,
263
+ "start": 1.4500000000000006,
264
+ "duration": 0.06000000000000005
265
+ },
266
+ {
267
+ "pitch": 79,
268
+ "velocity": 49,
269
+ "start": 1.4100000000000006,
270
+ "duration": 0.1200000000000001
271
+ },
272
+ {
273
+ "pitch": 91,
274
+ "velocity": 39,
275
+ "start": 1.4700000000000006,
276
+ "duration": 0.06000000000000005
277
+ },
278
+ {
279
+ "pitch": 59,
280
+ "velocity": 69,
281
+ "start": 1.5100000000000007,
282
+ "duration": 0.06000000000000005
283
+ },
284
+ {
285
+ "pitch": 93,
286
+ "velocity": 49,
287
+ "start": 1.5200000000000007,
288
+ "duration": 0.06000000000000005
289
+ },
290
+ {
291
+ "pitch": 99,
292
+ "velocity": 49,
293
+ "start": 1.5300000000000007,
294
+ "duration": 0.06000000000000005
295
+ },
296
+ {
297
+ "pitch": 64,
298
+ "velocity": 69,
299
+ "start": 1.7500000000000007,
300
+ "duration": 0.06000000000000005
301
+ },
302
+ {
303
+ "pitch": 83,
304
+ "velocity": 39,
305
+ "start": 1.7600000000000007,
306
+ "duration": 0.06000000000000005
307
+ },
308
+ {
309
+ "pitch": 94,
310
+ "velocity": 49,
311
+ "start": 1.7700000000000007,
312
+ "duration": 0.06000000000000005
313
+ },
314
+ {
315
+ "pitch": 90,
316
+ "velocity": 29,
317
+ "start": 1.9100000000000008,
318
+ "duration": 0.06000000000000005
319
+ },
320
+ {
321
+ "pitch": 81,
322
+ "velocity": 69,
323
+ "start": 1.9300000000000008,
324
+ "duration": 0.06000000000000005
325
+ },
326
+ {
327
+ "pitch": 61,
328
+ "velocity": 59,
329
+ "start": 1.9400000000000008,
330
+ "duration": 0.06000000000000005
331
+ },
332
+ {
333
+ "pitch": 63,
334
+ "velocity": 109,
335
+ "start": 1.7600000000000007,
336
+ "duration": 0.2400000000000002
337
+ },
338
+ {
339
+ "pitch": 103,
340
+ "velocity": 49,
341
+ "start": 1.9600000000000009,
342
+ "duration": 0.06000000000000005
343
+ },
344
+ {
345
+ "pitch": 59,
346
+ "velocity": 39,
347
+ "start": 1.9800000000000009,
348
+ "duration": 0.11999999999999966
349
+ },
350
+ {
351
+ "pitch": 57,
352
+ "velocity": 39,
353
+ "start": 2.0300000000000007,
354
+ "duration": 0.09999999999999964
355
+ },
356
+ {
357
+ "pitch": 104,
358
+ "velocity": 49,
359
+ "start": 2.0900000000000007,
360
+ "duration": 0.05999999999999961
361
+ },
362
+ {
363
+ "pitch": 102,
364
+ "velocity": 49,
365
+ "start": 2.3400000000000003,
366
+ "duration": 0.05999999999999961
367
+ },
368
+ {
369
+ "pitch": 101,
370
+ "velocity": 49,
371
+ "start": 2.35,
372
+ "duration": 0.05999999999999961
373
+ },
374
+ {
375
+ "pitch": 61,
376
+ "velocity": 39,
377
+ "start": 2.37,
378
+ "duration": 0.05999999999999961
379
+ },
380
+ {
381
+ "pitch": 97,
382
+ "velocity": 49,
383
+ "start": 2.38,
384
+ "duration": 0.05999999999999961
385
+ },
386
+ {
387
+ "pitch": 64,
388
+ "velocity": 99,
389
+ "start": 2.4699999999999993,
390
+ "duration": 0.03999999999999959
391
+ },
392
+ {
393
+ "pitch": 65,
394
+ "velocity": 29,
395
+ "start": 2.499999999999999,
396
+ "duration": 0.05999999999999961
397
+ },
398
+ {
399
+ "pitch": 61,
400
+ "velocity": 29,
401
+ "start": 2.5899999999999985,
402
+ "duration": 0.05999999999999961
403
+ },
404
+ {
405
+ "pitch": 103,
406
+ "velocity": 49,
407
+ "start": 2.5999999999999983,
408
+ "duration": 0.05999999999999961
409
+ },
410
+ {
411
+ "pitch": 59,
412
+ "velocity": 59,
413
+ "start": 2.629999999999998,
414
+ "duration": 0.05999999999999961
415
+ },
416
+ {
417
+ "pitch": 57,
418
+ "velocity": 29,
419
+ "start": 2.6899999999999977,
420
+ "duration": 0.23999999999999977
421
+ },
422
+ {
423
+ "pitch": 59,
424
+ "velocity": 39,
425
+ "start": 2.9199999999999977,
426
+ "duration": 0.07999999999999963
427
+ },
428
+ {
429
+ "pitch": 103,
430
+ "velocity": 49,
431
+ "start": 2.9999999999999973,
432
+ "duration": 0.05999999999999961
433
+ },
434
+ {
435
+ "pitch": 77,
436
+ "velocity": 49,
437
+ "start": 3.009999999999997,
438
+ "duration": 0.05999999999999961
439
+ },
440
+ {
441
+ "pitch": 58,
442
+ "velocity": 79,
443
+ "start": 2.8399999999999976,
444
+ "duration": 0.23999999999999888
445
+ },
446
+ {
447
+ "pitch": 104,
448
+ "velocity": 49,
449
+ "start": 3.039999999999997,
450
+ "duration": 0.05999999999999961
451
+ },
452
+ {
453
+ "pitch": 70,
454
+ "velocity": 39,
455
+ "start": 2.9699999999999975,
456
+ "duration": 0.21999999999999842
457
+ },
458
+ {
459
+ "pitch": 57,
460
+ "velocity": 49,
461
+ "start": 3.1499999999999964,
462
+ "duration": 0.11999999999999922
463
+ },
464
+ {
465
+ "pitch": 59,
466
+ "velocity": 49,
467
+ "start": 3.159999999999996,
468
+ "duration": 0.11999999999999922
469
+ },
470
+ {
471
+ "pitch": 61,
472
+ "velocity": 29,
473
+ "start": 3.259999999999996,
474
+ "duration": 0.05999999999999961
475
+ },
476
+ {
477
+ "pitch": 64,
478
+ "velocity": 69,
479
+ "start": 3.2999999999999954,
480
+ "duration": 0.040000000000000036
481
+ },
482
+ {
483
+ "pitch": 68,
484
+ "velocity": 29,
485
+ "start": 3.3799999999999955,
486
+ "duration": 0.06000000000000005
487
+ },
488
+ {
489
+ "pitch": 64,
490
+ "velocity": 39,
491
+ "start": 3.4599999999999955,
492
+ "duration": 0.05999999999999961
493
+ },
494
+ {
495
+ "pitch": 60,
496
+ "velocity": 39,
497
+ "start": 3.4899999999999953,
498
+ "duration": 0.059999999999999165
499
+ },
500
+ {
501
+ "pitch": 66,
502
+ "velocity": 69,
503
+ "start": 3.3399999999999954,
504
+ "duration": 0.23999999999999888
505
+ },
506
+ {
507
+ "pitch": 98,
508
+ "velocity": 49,
509
+ "start": 3.519999999999995,
510
+ "duration": 0.059999999999999165
511
+ },
512
+ {
513
+ "pitch": 54,
514
+ "velocity": 69,
515
+ "start": 3.529999999999995,
516
+ "duration": 0.059999999999999165
517
+ },
518
+ {
519
+ "pitch": 81,
520
+ "velocity": 69,
521
+ "start": 3.5399999999999947,
522
+ "duration": 0.059999999999999165
523
+ },
524
+ {
525
+ "pitch": 80,
526
+ "velocity": 49,
527
+ "start": 3.5799999999999943,
528
+ "duration": 0.05999999999999961
529
+ },
530
+ {
531
+ "pitch": 104,
532
+ "velocity": 49,
533
+ "start": 3.5799999999999943,
534
+ "duration": 0.23999999999999977
535
+ },
536
+ {
537
+ "pitch": 107,
538
+ "velocity": 49,
539
+ "start": 3.589999999999994,
540
+ "duration": 0.23999999999999977
541
+ },
542
+ {
543
+ "pitch": 108,
544
+ "velocity": 49,
545
+ "start": 3.639999999999994,
546
+ "duration": 0.23999999999999977
547
+ },
548
+ {
549
+ "pitch": 107,
550
+ "velocity": 49,
551
+ "start": 3.8599999999999937,
552
+ "duration": 0.1200000000000001
553
+ },
554
+ {
555
+ "pitch": 61,
556
+ "velocity": 69,
557
+ "start": 4.369999999999994,
558
+ "duration": 0.040000000000000036
559
+ },
560
+ {
561
+ "pitch": 81,
562
+ "velocity": 39,
563
+ "start": 4.369999999999994,
564
+ "duration": 0.05999999999999961
565
+ },
566
+ {
567
+ "pitch": 97,
568
+ "velocity": 49,
569
+ "start": 4.399999999999994,
570
+ "duration": 0.05999999999999961
571
+ },
572
+ {
573
+ "pitch": 65,
574
+ "velocity": 99,
575
+ "start": 4.529999999999994,
576
+ "duration": 0.03999999999999915
577
+ },
578
+ {
579
+ "pitch": 98,
580
+ "velocity": 39,
581
+ "start": 4.539999999999994,
582
+ "duration": 0.05999999999999961
583
+ },
584
+ {
585
+ "pitch": 64,
586
+ "velocity": 39,
587
+ "start": 4.559999999999993,
588
+ "duration": 0.05999999999999961
589
+ },
590
+ {
591
+ "pitch": 63,
592
+ "velocity": 29,
593
+ "start": 4.569999999999993,
594
+ "duration": 0.05999999999999961
595
+ },
596
+ {
597
+ "pitch": 103,
598
+ "velocity": 49,
599
+ "start": 4.679999999999993,
600
+ "duration": 0.0600000000000005
601
+ },
602
+ {
603
+ "pitch": 102,
604
+ "velocity": 49,
605
+ "start": 4.709999999999993,
606
+ "duration": 0.0600000000000005
607
+ },
608
+ {
609
+ "pitch": 107,
610
+ "velocity": 79,
611
+ "start": 4.739999999999993,
612
+ "duration": 0.05999999999999961
613
+ },
614
+ {
615
+ "pitch": 64,
616
+ "velocity": 69,
617
+ "start": 4.779999999999993,
618
+ "duration": 0.03999999999999915
619
+ },
620
+ {
621
+ "pitch": 101,
622
+ "velocity": 49,
623
+ "start": 4.789999999999993,
624
+ "duration": 0.05999999999999961
625
+ },
626
+ {
627
+ "pitch": 66,
628
+ "velocity": 99,
629
+ "start": 4.819999999999992,
630
+ "duration": 0.040000000000000036
631
+ },
632
+ {
633
+ "pitch": 84,
634
+ "velocity": 39,
635
+ "start": 4.819999999999992,
636
+ "duration": 0.040000000000000036
637
+ },
638
+ {
639
+ "pitch": 99,
640
+ "velocity": 49,
641
+ "start": 4.8499999999999925,
642
+ "duration": 0.05999999999999961
643
+ },
644
+ {
645
+ "pitch": 97,
646
+ "velocity": 49,
647
+ "start": 4.859999999999992,
648
+ "duration": 0.05999999999999961
649
+ },
650
+ {
651
+ "pitch": 79,
652
+ "velocity": 39,
653
+ "start": 4.869999999999992,
654
+ "duration": 0.05999999999999961
655
+ },
656
+ {
657
+ "pitch": 61,
658
+ "velocity": 39,
659
+ "start": 5.019999999999992,
660
+ "duration": 0.040000000000000036
661
+ },
662
+ {
663
+ "pitch": 63,
664
+ "velocity": 39,
665
+ "start": 5.009999999999992,
666
+ "duration": 0.05999999999999961
667
+ },
668
+ {
669
+ "pitch": 69,
670
+ "velocity": 39,
671
+ "start": 5.099999999999992,
672
+ "duration": 0.040000000000000036
673
+ },
674
+ {
675
+ "pitch": 55,
676
+ "velocity": 49,
677
+ "start": 5.139999999999992,
678
+ "duration": 0.11999999999999922
679
+ },
680
+ {
681
+ "pitch": 56,
682
+ "velocity": 59,
683
+ "start": 5.049999999999992,
684
+ "duration": 0.23999999999999932
685
+ },
686
+ {
687
+ "pitch": 107,
688
+ "velocity": 49,
689
+ "start": 5.239999999999991,
690
+ "duration": 0.05999999999999961
691
+ },
692
+ {
693
+ "pitch": 58,
694
+ "velocity": 39,
695
+ "start": 5.389999999999991,
696
+ "duration": 0.040000000000000036
697
+ },
698
+ {
699
+ "pitch": 104,
700
+ "velocity": 49,
701
+ "start": 5.399999999999991,
702
+ "duration": 0.0600000000000005
703
+ },
704
+ {
705
+ "pitch": 103,
706
+ "velocity": 49,
707
+ "start": 5.499999999999991,
708
+ "duration": 0.05999999999999961
709
+ },
710
+ {
711
+ "pitch": 60,
712
+ "velocity": 39,
713
+ "start": 5.5699999999999905,
714
+ "duration": 0.05999999999999961
715
+ },
716
+ {
717
+ "pitch": 61,
718
+ "velocity": 69,
719
+ "start": 5.61999999999999,
720
+ "duration": 0.05999999999999961
721
+ },
722
+ {
723
+ "pitch": 80,
724
+ "velocity": 49,
725
+ "start": 5.62999999999999,
726
+ "duration": 0.05999999999999961
727
+ },
728
+ {
729
+ "pitch": 64,
730
+ "velocity": 99,
731
+ "start": 5.68999999999999,
732
+ "duration": 0.03999999999999915
733
+ },
734
+ {
735
+ "pitch": 107,
736
+ "velocity": 79,
737
+ "start": 5.66999999999999,
738
+ "duration": 0.05999999999999872
739
+ },
740
+ {
741
+ "pitch": 97,
742
+ "velocity": 49,
743
+ "start": 5.6999999999999895,
744
+ "duration": 0.05999999999999961
745
+ },
746
+ {
747
+ "pitch": 65,
748
+ "velocity": 79,
749
+ "start": 5.719999999999989,
750
+ "duration": 0.05999999999999961
751
+ },
752
+ {
753
+ "pitch": 62,
754
+ "velocity": 39,
755
+ "start": 5.7899999999999885,
756
+ "duration": 0.05999999999999961
757
+ },
758
+ {
759
+ "pitch": 80,
760
+ "velocity": 39,
761
+ "start": 5.809999999999988,
762
+ "duration": 0.040000000000000036
763
+ },
764
+ {
765
+ "pitch": 60,
766
+ "velocity": 39,
767
+ "start": 5.809999999999988,
768
+ "duration": 0.05999999999999961
769
+ },
770
+ {
771
+ "pitch": 104,
772
+ "velocity": 49,
773
+ "start": 5.809999999999988,
774
+ "duration": 0.05999999999999961
775
+ },
776
+ {
777
+ "pitch": 102,
778
+ "velocity": 49,
779
+ "start": 5.9599999999999875,
780
+ "duration": 0.05999999999999961
781
+ },
782
+ {
783
+ "pitch": 97,
784
+ "velocity": 49,
785
+ "start": 5.969999999999987,
786
+ "duration": 0.05999999999999961
787
+ },
788
+ {
789
+ "pitch": 58,
790
+ "velocity": 69,
791
+ "start": 6.019999999999987,
792
+ "duration": 0.03999999999999915
793
+ },
794
+ {
795
+ "pitch": 81,
796
+ "velocity": 39,
797
+ "start": 6.039999999999987,
798
+ "duration": 0.05999999999999961
799
+ },
800
+ {
801
+ "pitch": 104,
802
+ "velocity": 49,
803
+ "start": 6.059999999999986,
804
+ "duration": 0.05999999999999961
805
+ },
806
+ {
807
+ "pitch": 108,
808
+ "velocity": 69,
809
+ "start": 6.229999999999986,
810
+ "duration": 0.05999999999999961
811
+ },
812
+ {
813
+ "pitch": 59,
814
+ "velocity": 69,
815
+ "start": 6.249999999999986,
816
+ "duration": 0.05999999999999961
817
+ },
818
+ {
819
+ "pitch": 99,
820
+ "velocity": 39,
821
+ "start": 6.4299999999999855,
822
+ "duration": 0.040000000000000036
823
+ },
824
+ {
825
+ "pitch": 61,
826
+ "velocity": 39,
827
+ "start": 6.689999999999985,
828
+ "duration": 0.040000000000000036
829
+ },
830
+ {
831
+ "pitch": 108,
832
+ "velocity": 99,
833
+ "start": 6.839999999999986,
834
+ "duration": 0.0600000000000005
835
+ },
836
+ {
837
+ "pitch": 104,
838
+ "velocity": 49,
839
+ "start": 6.869999999999986,
840
+ "duration": 0.0600000000000005
841
+ },
842
+ {
843
+ "pitch": 62,
844
+ "velocity": 39,
845
+ "start": 6.979999999999986,
846
+ "duration": 0.21999999999999975
847
+ },
848
+ {
849
+ "pitch": 75,
850
+ "velocity": 29,
851
+ "start": 7.209999999999986,
852
+ "duration": 0.0600000000000005
853
+ },
854
+ {
855
+ "pitch": 64,
856
+ "velocity": 89,
857
+ "start": 7.239999999999986,
858
+ "duration": 0.0600000000000005
859
+ },
860
+ {
861
+ "pitch": 77,
862
+ "velocity": 39,
863
+ "start": 7.269999999999986,
864
+ "duration": 0.040000000000000036
865
+ },
866
+ {
867
+ "pitch": 66,
868
+ "velocity": 69,
869
+ "start": 7.2999999999999865,
870
+ "duration": 0.05999999999999961
871
+ },
872
+ {
873
+ "pitch": 93,
874
+ "velocity": 29,
875
+ "start": 7.2999999999999865,
876
+ "duration": 0.05999999999999961
877
+ },
878
+ {
879
+ "pitch": 78,
880
+ "velocity": 39,
881
+ "start": 7.319999999999986,
882
+ "duration": 0.05999999999999961
883
+ },
884
+ {
885
+ "pitch": 61,
886
+ "velocity": 39,
887
+ "start": 7.409999999999986,
888
+ "duration": 0.040000000000000036
889
+ }
890
+ ]
examples/en/refined.mid ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8aadea10b007d9cbfda5b857b7006b3df1740bfd6a1dd3ca500d0fa01c3e1e41
3
+ size 1086
examples/en/refined.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:172bd6bf885f644f9a19709808789eddf4ccaa10dcafa4f3e14db5ed2c609d1d
3
+ size 800720
examples/en/source.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e42e173487b2580d83642c0be5d8a3b0208fe8458bd912df8c5176b8c3fd107d
3
+ size 752720
examples/en/spectrogram.png ADDED

Git LFS Details

  • SHA256: 3d35889bddc5e29fdc6b7e30366db2ef80dbd7732e2576565bae0552aa834ac9
  • Pointer size: 132 Bytes
  • Size of remote file: 1.33 MB
examples/en/target.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7c7d9b4552ffe187ee05629102a8fd056b583265f8126f2750160c99bf31b57f
3
+ size 752720
examples/index.html ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <meta charset="utf-8">
4
+ <meta name="viewport" content="width=device-width,initial-scale=1">
5
+ <title>Speaking MIDI · Audio demos</title>
6
+ <style>
7
+ body{font:16px/1.6 system-ui,sans-serif;color:#203040;background:#f5f7fa;max-width:1120px;margin:auto;padding:24px}
8
+ h1,h2,h3{line-height:1.2}h1{font-size:2.5rem}section{background:white;border:1px solid #d9e1ea;border-radius:16px;padding:24px;margin:28px 0}a{color:#075eb0}img,canvas{width:100%;height:auto}canvas{height:320px;cursor:crosshair;border:1px solid #d9e1ea}audio{display:block;width:100%;margin:8px 0}.players{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}details{margin:18px 0}label{font-weight:600}footer{font-size:.9rem;color:#536273}.velocity-key{display:flex;align-items:center;gap:8px;font-size:.85rem}.velocity-key span{display:inline-block;width:140px;height:10px;background:linear-gradient(to right,hsl(240 72% 46%),hsl(191 72% 46%),hsl(142 72% 46%),hsl(94 72% 46%),hsl(45 72% 46%));border-radius:4px}
9
+ </style>
10
+ <h1>Speaking MIDI</h1>
11
+ <p>Two approximately eight-second Qwen3-TTS recordings, fitted using only the Grand Piano preset in <code>gm.sf3</code>. Both use Qwen3-TTS 1.7B VoiceDesign with the same recorded voice-design instruction. Compare the speech with its piano reconstruction, then inspect the exported MIDI.</p>
12
+ <p>Listen before revealing the transcript. Lower spectral error does not establish speech intelligibility. These longer examples have not received ASR or human listening evaluation. Playback uses saved audio; no model download or external service is required.</p>
13
+ <details><summary>Voice description used for both languages</summary><p lang="zh">一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。</p><p>This exact instruction was supplied to VoiceDesign for both recordings.</p></details>
14
+ <section>
15
+ <h2>English · 7.84 s</h2>
16
+ <p>148 MIDI notes · log-band error 0.4577 → 0.3875 (15.3% reduction).</p>
17
+ <div class="players"><label>Target speech (common RMS)<audio controls preload="metadata" src="en/target.wav"></audio></label><label>Spectral baseline<audio controls preload="metadata" src="en/baseline.wav"></audio></label><label>Fitted piano<audio controls preload="metadata" src="en/refined.wav" data-piano=en></audio></label></div>
18
+ <details><summary>Reveal transcript</summary><p lang="en">Good morning, everyone. The warm sunlight is streaming through the open window. Listen carefully as the piano tries to repeat each of these words.</p></details>
19
+ <p><a href="en/refined.mid">Download MIDI</a> · <a href="en/source.wav">Original Qwen output</a> · <a href="en/metrics.json">Metrics</a></p>
20
+ <h3>MIDI piano roll</h3><p>Play the fitted piano to follow the cursor. Click the roll to seek. Colors show velocity; rectangles show key-hold duration, not release tails.</p>
21
+ <p class="velocity-key">Velocity: 1 <span aria-hidden="true"></span> 127</p>
22
+ <canvas data-roll="en" role="img" aria-label="English MIDI piano roll"></canvas>
23
+ <noscript><img src="en/piano-roll.png" alt="English piano roll"></noscript>
24
+ <script type="application/json" id="notes-en">{"seconds": 8.34, "notes": [{"pitch": 104, "velocity": 69, "start": 0.07, "duration": 0.04000000000000001}, {"pitch": 64, "velocity": 99, "start": 0.02, "duration": 0.1}, {"pitch": 61, "velocity": 29, "start": 0.09000000000000001, "duration": 0.06000000000000001}, {"pitch": 65, "velocity": 29, "start": 0.15000000000000002, "duration": 0.06}, {"pitch": 66, "velocity": 29, "start": 0.0, "duration": 0.24000000000000002}, {"pitch": 78, "velocity": 69, "start": 0.2, "duration": 0.04000000000000001}, {"pitch": 85, "velocity": 59, "start": 0.2, "duration": 0.06}, {"pitch": 86, "velocity": 39, "start": 0.23, "duration": 0.060000000000000026}, {"pitch": 79, "velocity": 29, "start": 0.25, "duration": 0.06000000000000005}, {"pitch": 100, "velocity": 39, "start": 0.27, "duration": 0.06000000000000005}, {"pitch": 101, "velocity": 49, "start": 0.29000000000000004, "duration": 0.06000000000000005}, {"pitch": 98, "velocity": 69, "start": 0.31000000000000005, "duration": 0.06000000000000005}, {"pitch": 66, "velocity": 49, "start": 0.3500000000000001, "duration": 0.06000000000000005}, {"pitch": 67, "velocity": 99, "start": 0.2, "duration": 0.22000000000000014}, {"pitch": 65, "velocity": 29, "start": 0.3800000000000001, "duration": 0.06000000000000005}, {"pitch": 81, "velocity": 39, "start": 0.5000000000000001, "duration": 0.06000000000000005}, {"pitch": 102, "velocity": 49, "start": 0.5000000000000001, "duration": 0.06000000000000005}, {"pitch": 61, "velocity": 49, "start": 0.5100000000000001, "duration": 0.06000000000000005}, {"pitch": 98, "velocity": 49, "start": 0.5100000000000001, "duration": 0.06000000000000005}, {"pitch": 103, "velocity": 49, "start": 0.5200000000000001, "duration": 0.06000000000000005}, {"pitch": 99, "velocity": 49, "start": 0.6400000000000001, "duration": 0.06000000000000005}, {"pitch": 101, "velocity": 49, "start": 0.6400000000000001, "duration": 0.06000000000000005}, {"pitch": 62, "velocity": 109, "start": 0.48000000000000015, "duration": 0.24000000000000005}, {"pitch": 80, "velocity": 59, "start": 0.5300000000000001, "duration": 0.2400000000000001}, {"pitch": 95, "velocity": 49, "start": 0.5300000000000001, "duration": 0.2400000000000001}, {"pitch": 84, "velocity": 39, "start": 0.7300000000000002, "duration": 0.06000000000000005}, {"pitch": 60, "velocity": 89, "start": 0.6900000000000002, "duration": 0.1200000000000001}, {"pitch": 88, "velocity": 39, "start": 0.7500000000000002, "duration": 0.06000000000000005}, {"pitch": 80, "velocity": 39, "start": 0.8100000000000003, "duration": 0.06000000000000005}, {"pitch": 94, "velocity": 39, "start": 0.8100000000000003, "duration": 0.06000000000000005}, {"pitch": 61, "velocity": 39, "start": 0.8300000000000003, "duration": 0.06000000000000005}, {"pitch": 64, "velocity": 29, "start": 0.8900000000000003, "duration": 0.06000000000000005}, {"pitch": 67, "velocity": 39, "start": 0.9500000000000004, "duration": 0.040000000000000036}, {"pitch": 79, "velocity": 29, "start": 0.7600000000000002, "duration": 0.2400000000000002}, {"pitch": 66, "velocity": 29, "start": 0.8900000000000003, "duration": 0.1200000000000001}, {"pitch": 108, "velocity": 79, "start": 0.8200000000000003, "duration": 0.2400000000000002}, {"pitch": 97, "velocity": 49, "start": 0.8600000000000003, "duration": 0.2400000000000002}, {"pitch": 80, "velocity": 39, "start": 1.2800000000000005, "duration": 0.040000000000000036}, {"pitch": 73, "velocity": 39, "start": 1.2800000000000005, "duration": 0.06000000000000005}, {"pitch": 104, "velocity": 49, "start": 1.3000000000000005, "duration": 0.06000000000000005}, {"pitch": 61, "velocity": 29, "start": 1.4200000000000006, "duration": 0.06000000000000005}, {"pitch": 85, "velocity": 29, "start": 1.4300000000000006, "duration": 0.06000000000000005}, {"pitch": 60, "velocity": 69, "start": 1.2900000000000005, "duration": 0.2200000000000002}, {"pitch": 84, "velocity": 59, "start": 1.4500000000000006, "duration": 0.06000000000000005}, {"pitch": 79, "velocity": 49, "start": 1.4100000000000006, "duration": 0.1200000000000001}, {"pitch": 91, "velocity": 39, "start": 1.4700000000000006, "duration": 0.06000000000000005}, {"pitch": 59, "velocity": 69, "start": 1.5100000000000007, "duration": 0.06000000000000005}, {"pitch": 93, "velocity": 49, "start": 1.5200000000000007, "duration": 0.06000000000000005}, {"pitch": 99, "velocity": 49, "start": 1.5300000000000007, "duration": 0.06000000000000005}, {"pitch": 64, "velocity": 69, "start": 1.7500000000000007, "duration": 0.06000000000000005}, {"pitch": 83, "velocity": 39, "start": 1.7600000000000007, "duration": 0.06000000000000005}, {"pitch": 94, "velocity": 49, "start": 1.7700000000000007, "duration": 0.06000000000000005}, {"pitch": 90, "velocity": 29, "start": 1.9100000000000008, "duration": 0.06000000000000005}, {"pitch": 81, "velocity": 69, "start": 1.9300000000000008, "duration": 0.06000000000000005}, {"pitch": 61, "velocity": 59, "start": 1.9400000000000008, "duration": 0.06000000000000005}, {"pitch": 63, "velocity": 109, "start": 1.7600000000000007, "duration": 0.2400000000000002}, {"pitch": 103, "velocity": 49, "start": 1.9600000000000009, "duration": 0.06000000000000005}, {"pitch": 59, "velocity": 39, "start": 1.9800000000000009, "duration": 0.11999999999999966}, {"pitch": 57, "velocity": 39, "start": 2.0300000000000007, "duration": 0.09999999999999964}, {"pitch": 104, "velocity": 49, "start": 2.0900000000000007, "duration": 0.05999999999999961}, {"pitch": 102, "velocity": 49, "start": 2.3400000000000003, "duration": 0.05999999999999961}, {"pitch": 101, "velocity": 49, "start": 2.35, "duration": 0.05999999999999961}, {"pitch": 61, "velocity": 39, "start": 2.37, "duration": 0.05999999999999961}, {"pitch": 97, "velocity": 49, "start": 2.38, "duration": 0.05999999999999961}, {"pitch": 64, "velocity": 99, "start": 2.4699999999999993, "duration": 0.03999999999999959}, {"pitch": 65, "velocity": 29, "start": 2.499999999999999, "duration": 0.05999999999999961}, {"pitch": 61, "velocity": 29, "start": 2.5899999999999985, "duration": 0.05999999999999961}, {"pitch": 103, "velocity": 49, "start": 2.5999999999999983, "duration": 0.05999999999999961}, {"pitch": 59, "velocity": 59, "start": 2.629999999999998, "duration": 0.05999999999999961}, {"pitch": 57, "velocity": 29, "start": 2.6899999999999977, "duration": 0.23999999999999977}, {"pitch": 59, "velocity": 39, "start": 2.9199999999999977, "duration": 0.07999999999999963}, {"pitch": 103, "velocity": 49, "start": 2.9999999999999973, "duration": 0.05999999999999961}, {"pitch": 77, "velocity": 49, "start": 3.009999999999997, "duration": 0.05999999999999961}, {"pitch": 58, "velocity": 79, "start": 2.8399999999999976, "duration": 0.23999999999999888}, {"pitch": 104, "velocity": 49, "start": 3.039999999999997, "duration": 0.05999999999999961}, {"pitch": 70, "velocity": 39, "start": 2.9699999999999975, "duration": 0.21999999999999842}, {"pitch": 57, "velocity": 49, "start": 3.1499999999999964, "duration": 0.11999999999999922}, {"pitch": 59, "velocity": 49, "start": 3.159999999999996, "duration": 0.11999999999999922}, {"pitch": 61, "velocity": 29, "start": 3.259999999999996, "duration": 0.05999999999999961}, {"pitch": 64, "velocity": 69, "start": 3.2999999999999954, "duration": 0.040000000000000036}, {"pitch": 68, "velocity": 29, "start": 3.3799999999999955, "duration": 0.06000000000000005}, {"pitch": 64, "velocity": 39, "start": 3.4599999999999955, "duration": 0.05999999999999961}, {"pitch": 60, "velocity": 39, "start": 3.4899999999999953, "duration": 0.059999999999999165}, {"pitch": 66, "velocity": 69, "start": 3.3399999999999954, "duration": 0.23999999999999888}, {"pitch": 98, "velocity": 49, "start": 3.519999999999995, "duration": 0.059999999999999165}, {"pitch": 54, "velocity": 69, "start": 3.529999999999995, "duration": 0.059999999999999165}, {"pitch": 81, "velocity": 69, "start": 3.5399999999999947, "duration": 0.059999999999999165}, {"pitch": 80, "velocity": 49, "start": 3.5799999999999943, "duration": 0.05999999999999961}, {"pitch": 104, "velocity": 49, "start": 3.5799999999999943, "duration": 0.23999999999999977}, {"pitch": 107, "velocity": 49, "start": 3.589999999999994, "duration": 0.23999999999999977}, {"pitch": 108, "velocity": 49, "start": 3.639999999999994, "duration": 0.23999999999999977}, {"pitch": 107, "velocity": 49, "start": 3.8599999999999937, "duration": 0.1200000000000001}, {"pitch": 61, "velocity": 69, "start": 4.369999999999994, "duration": 0.040000000000000036}, {"pitch": 81, "velocity": 39, "start": 4.369999999999994, "duration": 0.05999999999999961}, {"pitch": 97, "velocity": 49, "start": 4.399999999999994, "duration": 0.05999999999999961}, {"pitch": 65, "velocity": 99, "start": 4.529999999999994, "duration": 0.03999999999999915}, {"pitch": 98, "velocity": 39, "start": 4.539999999999994, "duration": 0.05999999999999961}, {"pitch": 64, "velocity": 39, "start": 4.559999999999993, "duration": 0.05999999999999961}, {"pitch": 63, "velocity": 29, "start": 4.569999999999993, "duration": 0.05999999999999961}, {"pitch": 103, "velocity": 49, "start": 4.679999999999993, "duration": 0.0600000000000005}, {"pitch": 102, "velocity": 49, "start": 4.709999999999993, "duration": 0.0600000000000005}, {"pitch": 107, "velocity": 79, "start": 4.739999999999993, "duration": 0.05999999999999961}, {"pitch": 64, "velocity": 69, "start": 4.779999999999993, "duration": 0.03999999999999915}, {"pitch": 101, "velocity": 49, "start": 4.789999999999993, "duration": 0.05999999999999961}, {"pitch": 66, "velocity": 99, "start": 4.819999999999992, "duration": 0.040000000000000036}, {"pitch": 84, "velocity": 39, "start": 4.819999999999992, "duration": 0.040000000000000036}, {"pitch": 99, "velocity": 49, "start": 4.8499999999999925, "duration": 0.05999999999999961}, {"pitch": 97, "velocity": 49, "start": 4.859999999999992, "duration": 0.05999999999999961}, {"pitch": 79, "velocity": 39, "start": 4.869999999999992, "duration": 0.05999999999999961}, {"pitch": 61, "velocity": 39, "start": 5.019999999999992, "duration": 0.040000000000000036}, {"pitch": 63, "velocity": 39, "start": 5.009999999999992, "duration": 0.05999999999999961}, {"pitch": 69, "velocity": 39, "start": 5.099999999999992, "duration": 0.040000000000000036}, {"pitch": 55, "velocity": 49, "start": 5.139999999999992, "duration": 0.11999999999999922}, {"pitch": 56, "velocity": 59, "start": 5.049999999999992, "duration": 0.23999999999999932}, {"pitch": 107, "velocity": 49, "start": 5.239999999999991, "duration": 0.05999999999999961}, {"pitch": 58, "velocity": 39, "start": 5.389999999999991, "duration": 0.040000000000000036}, {"pitch": 104, "velocity": 49, "start": 5.399999999999991, "duration": 0.0600000000000005}, {"pitch": 103, "velocity": 49, "start": 5.499999999999991, "duration": 0.05999999999999961}, {"pitch": 60, "velocity": 39, "start": 5.5699999999999905, "duration": 0.05999999999999961}, {"pitch": 61, "velocity": 69, "start": 5.61999999999999, "duration": 0.05999999999999961}, {"pitch": 80, "velocity": 49, "start": 5.62999999999999, "duration": 0.05999999999999961}, {"pitch": 64, "velocity": 99, "start": 5.68999999999999, "duration": 0.03999999999999915}, {"pitch": 107, "velocity": 79, "start": 5.66999999999999, "duration": 0.05999999999999872}, {"pitch": 97, "velocity": 49, "start": 5.6999999999999895, "duration": 0.05999999999999961}, {"pitch": 65, "velocity": 79, "start": 5.719999999999989, "duration": 0.05999999999999961}, {"pitch": 62, "velocity": 39, "start": 5.7899999999999885, "duration": 0.05999999999999961}, {"pitch": 80, "velocity": 39, "start": 5.809999999999988, "duration": 0.040000000000000036}, {"pitch": 60, "velocity": 39, "start": 5.809999999999988, "duration": 0.05999999999999961}, {"pitch": 104, "velocity": 49, "start": 5.809999999999988, "duration": 0.05999999999999961}, {"pitch": 102, "velocity": 49, "start": 5.9599999999999875, "duration": 0.05999999999999961}, {"pitch": 97, "velocity": 49, "start": 5.969999999999987, "duration": 0.05999999999999961}, {"pitch": 58, "velocity": 69, "start": 6.019999999999987, "duration": 0.03999999999999915}, {"pitch": 81, "velocity": 39, "start": 6.039999999999987, "duration": 0.05999999999999961}, {"pitch": 104, "velocity": 49, "start": 6.059999999999986, "duration": 0.05999999999999961}, {"pitch": 108, "velocity": 69, "start": 6.229999999999986, "duration": 0.05999999999999961}, {"pitch": 59, "velocity": 69, "start": 6.249999999999986, "duration": 0.05999999999999961}, {"pitch": 99, "velocity": 39, "start": 6.4299999999999855, "duration": 0.040000000000000036}, {"pitch": 61, "velocity": 39, "start": 6.689999999999985, "duration": 0.040000000000000036}, {"pitch": 108, "velocity": 99, "start": 6.839999999999986, "duration": 0.0600000000000005}, {"pitch": 104, "velocity": 49, "start": 6.869999999999986, "duration": 0.0600000000000005}, {"pitch": 62, "velocity": 39, "start": 6.979999999999986, "duration": 0.21999999999999975}, {"pitch": 75, "velocity": 29, "start": 7.209999999999986, "duration": 0.0600000000000005}, {"pitch": 64, "velocity": 89, "start": 7.239999999999986, "duration": 0.0600000000000005}, {"pitch": 77, "velocity": 39, "start": 7.269999999999986, "duration": 0.040000000000000036}, {"pitch": 66, "velocity": 69, "start": 7.2999999999999865, "duration": 0.05999999999999961}, {"pitch": 93, "velocity": 29, "start": 7.2999999999999865, "duration": 0.05999999999999961}, {"pitch": 78, "velocity": 39, "start": 7.319999999999986, "duration": 0.05999999999999961}, {"pitch": 61, "velocity": 39, "start": 7.409999999999986, "duration": 0.040000000000000036}]}</script>
25
+ <h3>Shared-scale spectrogram comparison</h3><img src="en/spectrogram.png" alt="English: target, baseline, dictionary and refined spectrograms">
26
+ </section>
27
+ <section>
28
+ <h2>Chinese · 7.60 s</h2>
29
+ <p>117 MIDI notes · log-band error 0.4480 → 0.3923 (12.4% reduction).</p>
30
+ <div class="players"><label>Target speech (common RMS)<audio controls preload="metadata" src="zh/target.wav"></audio></label><label>Spectral baseline<audio controls preload="metadata" src="zh/baseline.wav"></audio></label><label>Fitted piano<audio controls preload="metadata" src="zh/refined.wav" data-piano=zh></audio></label></div>
31
+ <details><summary>Reveal transcript</summary><p lang="zh">清晨的阳光照进窗户,微风轻轻吹过。请仔细听,钢琴正在模仿我说话。</p></details>
32
+ <p><a href="zh/refined.mid">Download MIDI</a> · <a href="zh/source.wav">Original Qwen output</a> · <a href="zh/metrics.json">Metrics</a></p>
33
+ <h3>MIDI piano roll</h3><p>Play the fitted piano to follow the cursor. Click the roll to seek. Colors show velocity; rectangles show key-hold duration, not release tails.</p>
34
+ <p class="velocity-key">Velocity: 1 <span aria-hidden="true"></span> 127</p>
35
+ <canvas data-roll="zh" role="img" aria-label="Chinese MIDI piano roll"></canvas>
36
+ <noscript><img src="zh/piano-roll.png" alt="Chinese piano roll"></noscript>
37
+ <script type="application/json" id="notes-zh">{"seconds": 8.1, "notes": [{"pitch": 62, "velocity": 39, "start": 0.12000000000000001, "duration": 0.04000000000000002}, {"pitch": 101, "velocity": 49, "start": 0.1, "duration": 0.060000000000000026}, {"pitch": 61, "velocity": 39, "start": 0.15000000000000002, "duration": 0.06}, {"pitch": 104, "velocity": 49, "start": 0.15000000000000002, "duration": 0.06}, {"pitch": 103, "velocity": 69, "start": 0.25, "duration": 0.06}, {"pitch": 98, "velocity": 49, "start": 0.27, "duration": 0.06}, {"pitch": 59, "velocity": 109, "start": 0.26, "duration": 0.24}, {"pitch": 97, "velocity": 49, "start": 0.41000000000000003, "duration": 0.12}, {"pitch": 58, "velocity": 49, "start": 0.33, "duration": 0.24000000000000005}, {"pitch": 75, "velocity": 39, "start": 0.52, "duration": 0.06000000000000005}, {"pitch": 80, "velocity": 69, "start": 0.53, "duration": 0.06000000000000005}, {"pitch": 56, "velocity": 109, "start": 0.51, "duration": 0.1200000000000001}, {"pitch": 81, "velocity": 39, "start": 0.5700000000000001, "duration": 0.06000000000000005}, {"pitch": 104, "velocity": 49, "start": 0.5700000000000001, "duration": 0.06000000000000005}, {"pitch": 83, "velocity": 29, "start": 0.7000000000000002, "duration": 0.06000000000000005}, {"pitch": 87, "velocity": 49, "start": 0.7400000000000002, "duration": 0.1200000000000001}, {"pitch": 78, "velocity": 69, "start": 0.7900000000000003, "duration": 0.08000000000000007}, {"pitch": 83, "velocity": 39, "start": 0.7600000000000002, "duration": 0.14000000000000012}, {"pitch": 103, "velocity": 39, "start": 0.8500000000000003, "duration": 0.06000000000000005}, {"pitch": 59, "velocity": 99, "start": 0.7300000000000002, "duration": 0.2200000000000002}, {"pitch": 102, "velocity": 39, "start": 1.0000000000000004, "duration": 0.06000000000000005}, {"pitch": 59, "velocity": 69, "start": 1.0500000000000005, "duration": 0.040000000000000036}, {"pitch": 78, "velocity": 39, "start": 1.0600000000000005, "duration": 0.040000000000000036}, {"pitch": 83, "velocity": 39, "start": 1.0400000000000005, "duration": 0.06000000000000005}, {"pitch": 82, "velocity": 49, "start": 1.0700000000000005, "duration": 0.06000000000000005}, {"pitch": 92, "velocity": 29, "start": 1.0800000000000005, "duration": 0.06000000000000005}, {"pitch": 55, "velocity": 39, "start": 1.2200000000000006, "duration": 0.040000000000000036}, {"pitch": 107, "velocity": 99, "start": 1.0200000000000005, "duration": 0.2400000000000002}, {"pitch": 103, "velocity": 49, "start": 1.2200000000000006, "duration": 0.06000000000000005}, {"pitch": 57, "velocity": 39, "start": 1.1100000000000005, "duration": 0.2400000000000002}, {"pitch": 97, "velocity": 39, "start": 1.3000000000000007, "duration": 0.06000000000000005}, {"pitch": 98, "velocity": 39, "start": 1.3400000000000007, "duration": 0.06000000000000005}, {"pitch": 104, "velocity": 49, "start": 1.3500000000000008, "duration": 0.06000000000000005}, {"pitch": 83, "velocity": 39, "start": 1.3800000000000008, "duration": 0.06000000000000005}, {"pitch": 87, "velocity": 39, "start": 1.4100000000000008, "duration": 0.040000000000000036}, {"pitch": 59, "velocity": 59, "start": 1.3800000000000008, "duration": 0.1200000000000001}, {"pitch": 61, "velocity": 39, "start": 1.4800000000000009, "duration": 0.06000000000000005}, {"pitch": 108, "velocity": 79, "start": 1.3100000000000007, "duration": 0.2400000000000002}, {"pitch": 79, "velocity": 39, "start": 1.4100000000000008, "duration": 0.2400000000000002}, {"pitch": 68, "velocity": 39, "start": 1.630000000000001, "duration": 0.040000000000000036}, {"pitch": 81, "velocity": 39, "start": 1.550000000000001, "duration": 0.1200000000000001}, {"pitch": 54, "velocity": 59, "start": 1.620000000000001, "duration": 0.06000000000000005}, {"pitch": 52, "velocity": 39, "start": 1.650000000000001, "duration": 0.040000000000000036}, {"pitch": 104, "velocity": 49, "start": 2.490000000000001, "duration": 0.06000000000000005}, {"pitch": 60, "velocity": 59, "start": 2.4400000000000013, "duration": 0.11999999999999966}, {"pitch": 59, "velocity": 29, "start": 2.530000000000001, "duration": 0.05999999999999961}, {"pitch": 103, "velocity": 49, "start": 2.530000000000001, "duration": 0.05999999999999961}, {"pitch": 107, "velocity": 49, "start": 2.6000000000000005, "duration": 0.06000000000000005}, {"pitch": 80, "velocity": 29, "start": 2.6700000000000004, "duration": 0.05999999999999961}, {"pitch": 60, "velocity": 99, "start": 2.7, "duration": 0.03999999999999959}, {"pitch": 79, "velocity": 49, "start": 2.71, "duration": 0.05999999999999961}, {"pitch": 59, "velocity": 29, "start": 2.8099999999999996, "duration": 0.06000000000000005}, {"pitch": 61, "velocity": 39, "start": 2.9999999999999996, "duration": 0.040000000000000036}, {"pitch": 107, "velocity": 79, "start": 2.9499999999999997, "duration": 0.23999999999999977}, {"pitch": 102, "velocity": 49, "start": 3.1399999999999997, "duration": 0.05999999999999961}, {"pitch": 105, "velocity": 49, "start": 3.1399999999999997, "duration": 0.05999999999999961}, {"pitch": 96, "velocity": 29, "start": 3.269999999999999, "duration": 0.05999999999999961}, {"pitch": 95, "velocity": 39, "start": 3.279999999999999, "duration": 0.05999999999999961}, {"pitch": 62, "velocity": 39, "start": 3.3499999999999983, "duration": 0.05999999999999961}, {"pitch": 107, "velocity": 79, "start": 3.2899999999999987, "duration": 0.11999999999999922}, {"pitch": 80, "velocity": 39, "start": 3.3499999999999983, "duration": 0.07999999999999963}, {"pitch": 61, "velocity": 39, "start": 3.1899999999999995, "duration": 0.25999999999999845}, {"pitch": 99, "velocity": 39, "start": 3.399999999999998, "duration": 0.05999999999999961}, {"pitch": 59, "velocity": 59, "start": 3.519999999999998, "duration": 0.05999999999999961}, {"pitch": 69, "velocity": 39, "start": 3.5599999999999974, "duration": 0.040000000000000036}, {"pitch": 54, "velocity": 39, "start": 3.5499999999999976, "duration": 0.05999999999999961}, {"pitch": 108, "velocity": 49, "start": 4.069999999999998, "duration": 0.05999999999999961}, {"pitch": 104, "velocity": 49, "start": 4.579999999999997, "duration": 0.05999999999999872}, {"pitch": 61, "velocity": 29, "start": 4.599999999999997, "duration": 0.05999999999999872}, {"pitch": 81, "velocity": 39, "start": 4.6199999999999966, "duration": 0.05999999999999872}, {"pitch": 63, "velocity": 39, "start": 4.589999999999997, "duration": 0.09999999999999787}, {"pitch": 55, "velocity": 29, "start": 4.769999999999995, "duration": 0.05999999999999872}, {"pitch": 56, "velocity": 39, "start": 4.789999999999995, "duration": 0.05999999999999872}, {"pitch": 100, "velocity": 49, "start": 4.809999999999994, "duration": 0.05999999999999872}, {"pitch": 107, "velocity": 79, "start": 5.049999999999993, "duration": 0.05999999999999961}, {"pitch": 59, "velocity": 59, "start": 4.919999999999993, "duration": 0.23999999999999932}, {"pitch": 103, "velocity": 39, "start": 5.119999999999992, "duration": 0.040000000000000036}, {"pitch": 104, "velocity": 39, "start": 5.119999999999992, "duration": 0.05999999999999961}, {"pitch": 102, "velocity": 49, "start": 4.949999999999993, "duration": 0.23999999999999844}, {"pitch": 61, "velocity": 29, "start": 5.109999999999992, "duration": 0.11999999999999922}, {"pitch": 59, "velocity": 99, "start": 5.919999999999991, "duration": 0.03999999999999915}, {"pitch": 83, "velocity": 39, "start": 5.919999999999991, "duration": 0.03999999999999915}, {"pitch": 78, "velocity": 69, "start": 5.929999999999991, "duration": 0.03999999999999915}, {"pitch": 95, "velocity": 39, "start": 5.909999999999991, "duration": 0.05999999999999872}, {"pitch": 93, "velocity": 39, "start": 5.95999999999999, "duration": 0.040000000000000036}, {"pitch": 80, "velocity": 49, "start": 5.94999999999999, "duration": 0.05999999999999961}, {"pitch": 61, "velocity": 39, "start": 5.99999999999999, "duration": 0.040000000000000036}, {"pitch": 56, "velocity": 59, "start": 6.20999999999999, "duration": 0.1200000000000001}, {"pitch": 108, "velocity": 109, "start": 6.41999999999999, "duration": 0.05999999999999961}, {"pitch": 60, "velocity": 69, "start": 6.4499999999999895, "duration": 0.040000000000000036}, {"pitch": 61, "velocity": 49, "start": 6.42999999999999, "duration": 0.05999999999999961}, {"pitch": 77, "velocity": 39, "start": 6.55999999999999, "duration": 0.03999999999999915}, {"pitch": 80, "velocity": 49, "start": 6.589999999999989, "duration": 0.1200000000000001}, {"pitch": 79, "velocity": 39, "start": 6.679999999999989, "duration": 0.040000000000000036}, {"pitch": 55, "velocity": 49, "start": 6.609999999999989, "duration": 0.1200000000000001}, {"pitch": 86, "velocity": 39, "start": 6.729999999999989, "duration": 0.05999999999999961}, {"pitch": 57, "velocity": 109, "start": 6.56999999999999, "duration": 0.23999999999999844}, {"pitch": 60, "velocity": 109, "start": 6.849999999999988, "duration": 0.05999999999999961}, {"pitch": 108, "velocity": 49, "start": 6.869999999999988, "duration": 0.05999999999999961}, {"pitch": 84, "velocity": 39, "start": 6.709999999999989, "duration": 0.23999999999999755}, {"pitch": 80, "velocity": 29, "start": 6.719999999999989, "duration": 0.23999999999999755}, {"pitch": 79, "velocity": 69, "start": 6.849999999999988, "duration": 0.11999999999999833}, {"pitch": 55, "velocity": 39, "start": 6.979999999999986, "duration": 0.0600000000000005}, {"pitch": 51, "velocity": 59, "start": 7.0099999999999865, "duration": 0.0600000000000005}, {"pitch": 81, "velocity": 29, "start": 6.849999999999988, "duration": 0.23999999999999844}, {"pitch": 94, "velocity": 49, "start": 7.079999999999987, "duration": 0.05999999999999961}, {"pitch": 107, "velocity": 79, "start": 7.099999999999986, "duration": 0.05999999999999961}, {"pitch": 108, "velocity": 79, "start": 7.139999999999986, "duration": 0.05999999999999872}, {"pitch": 81, "velocity": 39, "start": 7.209999999999985, "duration": 0.05999999999999961}, {"pitch": 61, "velocity": 39, "start": 7.349999999999984, "duration": 0.03999999999999915}, {"pitch": 80, "velocity": 49, "start": 7.329999999999984, "duration": 0.05999999999999872}, {"pitch": 79, "velocity": 39, "start": 7.369999999999983, "duration": 0.03999999999999915}, {"pitch": 85, "velocity": 39, "start": 7.349999999999984, "duration": 0.05999999999999872}, {"pitch": 58, "velocity": 59, "start": 7.1799999999999855, "duration": 0.23999999999999666}, {"pitch": 84, "velocity": 69, "start": 7.379999999999983, "duration": 0.03999999999999915}, {"pitch": 87, "velocity": 39, "start": 7.399999999999983, "duration": 0.03999999999999915}, {"pitch": 93, "velocity": 49, "start": 7.419999999999982, "duration": 0.05999999999999961}]}</script>
38
+ <h3>Shared-scale spectrogram comparison</h3><img src="zh/spectrogram.png" alt="Chinese: target, baseline, dictionary and refined spectrograms">
39
+ </section>
40
+ <footer>All players share the target amplitude calibration. Piano WAVs include 0.5 seconds of release tail beyond the speech duration; that extra tail is excluded from spectral metrics.</footer>
41
+ <script>
42
+ const players = Array.from(document.querySelectorAll('audio'));
43
+ for (const audio of players) audio.addEventListener('play', () => {
44
+ for (const other of players) if (other !== audio) other.pause();
45
+ });
46
+ for (const canvas of document.querySelectorAll('canvas[data-roll]')) {
47
+ const name = canvas.dataset.roll;
48
+ const {seconds, notes} = JSON.parse(document.getElementById('notes-' + name).textContent);
49
+ const audio = document.querySelector('audio[data-piano="' + name + '"]');
50
+ const low = Math.min(...notes.map(n => n.pitch)) - 2;
51
+ const high = Math.max(...notes.map(n => n.pitch)) + 2;
52
+ const left = 48, top = 14, bottom = 30, right = 14;
53
+ let frame = null;
54
+ function draw() {
55
+ const w = canvas.clientWidth, h = canvas.clientHeight;
56
+ const scale = window.devicePixelRatio || 1;
57
+ canvas.width = Math.round(w * scale); canvas.height = Math.round(h * scale);
58
+ const c = canvas.getContext('2d'); c.scale(scale, scale);
59
+ const pw = w - left - right, ph = h - top - bottom;
60
+ const x = time => left + time / seconds * pw;
61
+ const y = pitch => top + (high - pitch) / (high - low) * ph;
62
+ c.fillStyle = '#fff'; c.fillRect(0, 0, w, h);
63
+ c.font = '12px system-ui'; c.textAlign = 'right';
64
+ for (let pitch = Math.ceil(low); pitch <= high; pitch++) {
65
+ if ([1,3,6,8,10].includes(pitch % 12)) {
66
+ c.fillStyle = '#f2f5f8'; c.fillRect(left, y(pitch + .5), pw, ph / (high - low));
67
+ }
68
+ if (pitch % 12 === 0) {
69
+ c.fillStyle = '#475569'; c.fillText('C' + (pitch / 12 - 1), left - 6, y(pitch) + 4);
70
+ }
71
+ }
72
+ c.textAlign = 'center';
73
+ for (let t = 0; t <= seconds; t++) {
74
+ c.strokeStyle = '#dae2ec'; c.beginPath(); c.moveTo(x(t), top); c.lineTo(x(t), h-bottom); c.stroke();
75
+ c.fillStyle = '#475569'; c.fillText(t + 's', x(t), h - 9);
76
+ }
77
+ for (const n of notes) {
78
+ c.fillStyle = `hsl(${240 - n.velocity / 127 * 195} 72% 46%)`;
79
+ c.fillRect(x(n.start), y(n.pitch + .4), Math.max(1, n.duration / seconds * pw), .8 * ph / (high-low));
80
+ }
81
+ c.strokeStyle = '#e11d48'; c.lineWidth = 2; c.beginPath();
82
+ c.moveTo(x(audio.currentTime), top); c.lineTo(x(audio.currentTime), h-bottom); c.stroke();
83
+ }
84
+ function animate() { draw(); frame = audio.paused ? null : requestAnimationFrame(animate); }
85
+ audio.addEventListener('play', () => { if (frame === null) animate(); });
86
+ for (const event of ['timeupdate', 'seeked', 'loadedmetadata', 'ended']) audio.addEventListener(event, draw);
87
+ canvas.addEventListener('click', event => {
88
+ if (!Number.isFinite(audio.duration)) return;
89
+ const bounds = canvas.getBoundingClientRect();
90
+ audio.currentTime = Math.max(0, Math.min(audio.duration,
91
+ (event.clientX - bounds.left - left) / (bounds.width - left - right) * seconds));
92
+ draw();
93
+ });
94
+ new ResizeObserver(draw).observe(canvas);
95
+ draw();
96
+ }
97
+ </script>
98
+ </html>
examples/manifest.json ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
3
+ "source": {
4
+ "repo": "Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
5
+ "revision": "5ecdb67327fd37bb2e042aab12ff7391903235d3"
6
+ },
7
+ "mode": "voice_design",
8
+ "seed": 42,
9
+ "seed_policy": "Reset RNG before each sample",
10
+ "dtype": "bfloat16",
11
+ "attention": "sdpa",
12
+ "max_new_tokens": 512,
13
+ "samples": [
14
+ {
15
+ "name": "en",
16
+ "text": "Good morning, everyone. The warm sunlight is streaming through the open window. Listen carefully as the piano tries to repeat each of these words.",
17
+ "language": "English",
18
+ "instruct": "一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。",
19
+ "seed": 42,
20
+ "sample_rate": 24000,
21
+ "seconds": 7.84,
22
+ "wall_seconds": 22.045827865600586
23
+ },
24
+ {
25
+ "name": "zh",
26
+ "text": "清晨的阳光照进窗户,微风轻轻吹过。请仔细听,钢琴正在模仿我说话。",
27
+ "language": "Chinese",
28
+ "instruct": "一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。",
29
+ "seed": 42,
30
+ "sample_rate": 24000,
31
+ "seconds": 7.6,
32
+ "wall_seconds": 21.006908416748047
33
+ }
34
+ ],
35
+ "fitting": {
36
+ "max_notes": 240,
37
+ "renderer": "FluidSynth / bank 0 / program 0",
38
+ "soundfont": "gm.sf3 / Grand Piano"
39
+ },
40
+ "assets": {
41
+ "en": {
42
+ "baseline.json": {
43
+ "bytes": 50852,
44
+ "sha256": "3d210d64f43b59e990a545f5d2359d8f1713c70821bba6f1ca3feac71d08a53d"
45
+ },
46
+ "baseline.mid": {
47
+ "bytes": 2989,
48
+ "sha256": "1cc22cd12d8bbfe89bef508059f93b2a70c0bd19f3aa7d362ddf8291b640ef6b"
49
+ },
50
+ "baseline.wav": {
51
+ "bytes": 800720,
52
+ "sha256": "f6873a0a2e7b3c501dd968f4b0617fc5cc09d2c57b5b39935cde3cf6834e1a35"
53
+ },
54
+ "dictionary.json": {
55
+ "bytes": 18032,
56
+ "sha256": "21ca1dcd114fac170bae1090406ec53cfe37bccfa70bb43118b632a3abc2d3ed"
57
+ },
58
+ "dictionary.mid": {
59
+ "bytes": 1163,
60
+ "sha256": "e272c5714faf3f33700bf401f63f2749c58bdac4ad9a11ecd0c22c8a516f2348"
61
+ },
62
+ "dictionary.wav": {
63
+ "bytes": 800720,
64
+ "sha256": "742f148aa275c6dddfcb6560cbd8ba030551529fde0229b447ef6ac8feaa32d0"
65
+ },
66
+ "metrics.json": {
67
+ "bytes": 8495,
68
+ "sha256": "784dae0430c67d30787d3e75d4b54db753251967d615ee316890ea9d612495b0"
69
+ },
70
+ "piano-roll.png": {
71
+ "bytes": 40302,
72
+ "sha256": "18aec3f6fa07270348a4850c38f8ccf1527d8ea26add0b78a321596129da55cc"
73
+ },
74
+ "refined.json": {
75
+ "bytes": 16783,
76
+ "sha256": "6b6f5be56ddf2054f7916341505d2fc78ee564432d6acea18e07cd94ac29ba01"
77
+ },
78
+ "refined.mid": {
79
+ "bytes": 1086,
80
+ "sha256": "8aadea10b007d9cbfda5b857b7006b3df1740bfd6a1dd3ca500d0fa01c3e1e41"
81
+ },
82
+ "refined.wav": {
83
+ "bytes": 800720,
84
+ "sha256": "172bd6bf885f644f9a19709808789eddf4ccaa10dcafa4f3e14db5ed2c609d1d"
85
+ },
86
+ "source.wav": {
87
+ "bytes": 752720,
88
+ "sha256": "e42e173487b2580d83642c0be5d8a3b0208fe8458bd912df8c5176b8c3fd107d"
89
+ },
90
+ "spectrogram.png": {
91
+ "bytes": 1325745,
92
+ "sha256": "3d35889bddc5e29fdc6b7e30366db2ef80dbd7732e2576565bae0552aa834ac9"
93
+ },
94
+ "target.wav": {
95
+ "bytes": 752720,
96
+ "sha256": "7c7d9b4552ffe187ee05629102a8fd056b583265f8126f2750160c99bf31b57f"
97
+ }
98
+ },
99
+ "zh": {
100
+ "baseline.json": {
101
+ "bytes": 49646,
102
+ "sha256": "e4e95244fc2cbe99283e3f79d24ddbf78a3ee5859d119d862776f93415216661"
103
+ },
104
+ "baseline.mid": {
105
+ "bytes": 2884,
106
+ "sha256": "68bdd5fb7ac113d0bb98162e1b9e81fff2da4e878eb575814746caf7d56478f2"
107
+ },
108
+ "baseline.wav": {
109
+ "bytes": 777680,
110
+ "sha256": "a1b0aaa621365a5c584e3db944faa19534ce05d7cc989f29d72f46b285133a8c"
111
+ },
112
+ "dictionary.json": {
113
+ "bytes": 13985,
114
+ "sha256": "7c65f5e04e84a9c0af7cf68204150688e52228e5bcab2d3bfc9d37569b598a6a"
115
+ },
116
+ "dictionary.mid": {
117
+ "bytes": 898,
118
+ "sha256": "680f52b1fcc2162f8a5c48f62ed2e0b6c5f7f144d5c01c39b8223428998f062e"
119
+ },
120
+ "dictionary.wav": {
121
+ "bytes": 777680,
122
+ "sha256": "2ede3a5f1b26c8ae602da5c2b80e6de747021a2b00b4fbc7c50c9d4498467de2"
123
+ },
124
+ "metrics.json": {
125
+ "bytes": 7625,
126
+ "sha256": "adb3ac282760ebc04248d106d170a2e47d2b8bb75e72e51890150641e23d9b0f"
127
+ },
128
+ "piano-roll.png": {
129
+ "bytes": 40623,
130
+ "sha256": "c6c26a6e4abf3dd318d5ba2495edc27a890baaf84457f4db9e4275457d72b51b"
131
+ },
132
+ "refined.json": {
133
+ "bytes": 13196,
134
+ "sha256": "0fd2c9594cfda44e0a85e768de4725eae6b3a929510453b91dde465c20959379"
135
+ },
136
+ "refined.mid": {
137
+ "bytes": 866,
138
+ "sha256": "81dc4ddc02681026ebb2b13ba82a85dbf9a600aa8b6a4aae39500b17b6315cc4"
139
+ },
140
+ "refined.wav": {
141
+ "bytes": 777680,
142
+ "sha256": "558805b121cbf61fbe5034a7d4c144f013d0933eb95984174afb87787308101c"
143
+ },
144
+ "source.wav": {
145
+ "bytes": 729680,
146
+ "sha256": "a5df11b09e3005ed91d214164f4a14fc542b4ba5310285485ca913b64ce8566a"
147
+ },
148
+ "spectrogram.png": {
149
+ "bytes": 1141491,
150
+ "sha256": "477c2e0c97fe876df8c4e468257b605e10e35d6b02dd841bbe0e4e211242c705"
151
+ },
152
+ "target.wav": {
153
+ "bytes": 729680,
154
+ "sha256": "aaed6dd1bf76925b5ac4f7fcfc5c5abbe3274c4d8ffd73fa9d76e8d3221735c9"
155
+ }
156
+ }
157
+ }
158
+ }
examples/prompts.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "en",
4
+ "text": "Good morning, everyone. The warm sunlight is streaming through the open window. Listen carefully as the piano tries to repeat each of these words.",
5
+ "language": "English",
6
+ "instruct": "一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。"
7
+ },
8
+ {
9
+ "name": "zh",
10
+ "text": "清晨的阳光照进窗户,微风轻轻吹过。请仔细听,钢琴正在模仿我说话。",
11
+ "language": "Chinese",
12
+ "instruct": "一位温柔自信的年轻女性,声音清晰,语气亲切,表达轻快而富有感染力。"
13
+ }
14
+ ]
examples/zh/baseline.json ADDED
@@ -0,0 +1,2672 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "pitch": 62,
4
+ "velocity": 48,
5
+ "start": 0.12,
6
+ "duration": 0.06
7
+ },
8
+ {
9
+ "pitch": 66,
10
+ "velocity": 12,
11
+ "start": 0.12,
12
+ "duration": 0.06
13
+ },
14
+ {
15
+ "pitch": 74,
16
+ "velocity": 13,
17
+ "start": 0.12,
18
+ "duration": 0.06
19
+ },
20
+ {
21
+ "pitch": 81,
22
+ "velocity": 17,
23
+ "start": 0.12,
24
+ "duration": 0.06
25
+ },
26
+ {
27
+ "pitch": 61,
28
+ "velocity": 51,
29
+ "start": 0.18,
30
+ "duration": 0.06
31
+ },
32
+ {
33
+ "pitch": 73,
34
+ "velocity": 10,
35
+ "start": 0.18,
36
+ "duration": 0.06
37
+ },
38
+ {
39
+ "pitch": 80,
40
+ "velocity": 19,
41
+ "start": 0.18,
42
+ "duration": 0.06
43
+ },
44
+ {
45
+ "pitch": 85,
46
+ "velocity": 12,
47
+ "start": 0.18,
48
+ "duration": 0.06
49
+ },
50
+ {
51
+ "pitch": 61,
52
+ "velocity": 31,
53
+ "start": 0.24,
54
+ "duration": 0.06
55
+ },
56
+ {
57
+ "pitch": 98,
58
+ "velocity": 15,
59
+ "start": 0.24,
60
+ "duration": 0.06
61
+ },
62
+ {
63
+ "pitch": 99,
64
+ "velocity": 13,
65
+ "start": 0.24,
66
+ "duration": 0.06
67
+ },
68
+ {
69
+ "pitch": 102,
70
+ "velocity": 14,
71
+ "start": 0.24,
72
+ "duration": 0.06
73
+ },
74
+ {
75
+ "pitch": 103,
76
+ "velocity": 14,
77
+ "start": 0.24,
78
+ "duration": 0.06
79
+ },
80
+ {
81
+ "pitch": 104,
82
+ "velocity": 15,
83
+ "start": 0.24,
84
+ "duration": 0.06
85
+ },
86
+ {
87
+ "pitch": 58,
88
+ "velocity": 43,
89
+ "start": 0.3,
90
+ "duration": 0.06
91
+ },
92
+ {
93
+ "pitch": 71,
94
+ "velocity": 24,
95
+ "start": 0.3,
96
+ "duration": 0.06
97
+ },
98
+ {
99
+ "pitch": 77,
100
+ "velocity": 25,
101
+ "start": 0.3,
102
+ "duration": 0.06
103
+ },
104
+ {
105
+ "pitch": 82,
106
+ "velocity": 18,
107
+ "start": 0.3,
108
+ "duration": 0.06
109
+ },
110
+ {
111
+ "pitch": 96,
112
+ "velocity": 9,
113
+ "start": 0.3,
114
+ "duration": 0.06
115
+ },
116
+ {
117
+ "pitch": 97,
118
+ "velocity": 9,
119
+ "start": 0.3,
120
+ "duration": 0.06
121
+ },
122
+ {
123
+ "pitch": 98,
124
+ "velocity": 9,
125
+ "start": 0.3,
126
+ "duration": 0.06
127
+ },
128
+ {
129
+ "pitch": 58,
130
+ "velocity": 47,
131
+ "start": 0.36,
132
+ "duration": 0.06
133
+ },
134
+ {
135
+ "pitch": 70,
136
+ "velocity": 29,
137
+ "start": 0.36,
138
+ "duration": 0.06
139
+ },
140
+ {
141
+ "pitch": 71,
142
+ "velocity": 28,
143
+ "start": 0.36,
144
+ "duration": 0.06
145
+ },
146
+ {
147
+ "pitch": 77,
148
+ "velocity": 23,
149
+ "start": 0.36,
150
+ "duration": 0.06
151
+ },
152
+ {
153
+ "pitch": 82,
154
+ "velocity": 17,
155
+ "start": 0.36,
156
+ "duration": 0.06
157
+ },
158
+ {
159
+ "pitch": 83,
160
+ "velocity": 18,
161
+ "start": 0.36,
162
+ "duration": 0.06
163
+ },
164
+ {
165
+ "pitch": 95,
166
+ "velocity": 9,
167
+ "start": 0.36,
168
+ "duration": 0.06
169
+ },
170
+ {
171
+ "pitch": 59,
172
+ "velocity": 48,
173
+ "start": 0.42,
174
+ "duration": 0.06
175
+ },
176
+ {
177
+ "pitch": 71,
178
+ "velocity": 38,
179
+ "start": 0.42,
180
+ "duration": 0.06
181
+ },
182
+ {
183
+ "pitch": 78,
184
+ "velocity": 30,
185
+ "start": 0.42,
186
+ "duration": 0.06
187
+ },
188
+ {
189
+ "pitch": 83,
190
+ "velocity": 27,
191
+ "start": 0.42,
192
+ "duration": 0.06
193
+ },
194
+ {
195
+ "pitch": 95,
196
+ "velocity": 12,
197
+ "start": 0.42,
198
+ "duration": 0.06
199
+ },
200
+ {
201
+ "pitch": 97,
202
+ "velocity": 14,
203
+ "start": 0.42,
204
+ "duration": 0.06
205
+ },
206
+ {
207
+ "pitch": 99,
208
+ "velocity": 14,
209
+ "start": 0.42,
210
+ "duration": 0.06
211
+ },
212
+ {
213
+ "pitch": 106,
214
+ "velocity": 10,
215
+ "start": 0.42,
216
+ "duration": 0.06
217
+ },
218
+ {
219
+ "pitch": 58,
220
+ "velocity": 44,
221
+ "start": 0.48,
222
+ "duration": 0.06000000000000005
223
+ },
224
+ {
225
+ "pitch": 70,
226
+ "velocity": 35,
227
+ "start": 0.48,
228
+ "duration": 0.06000000000000005
229
+ },
230
+ {
231
+ "pitch": 76,
232
+ "velocity": 25,
233
+ "start": 0.48,
234
+ "duration": 0.06000000000000005
235
+ },
236
+ {
237
+ "pitch": 80,
238
+ "velocity": 24,
239
+ "start": 0.48,
240
+ "duration": 0.06000000000000005
241
+ },
242
+ {
243
+ "pitch": 84,
244
+ "velocity": 13,
245
+ "start": 0.48,
246
+ "duration": 0.06000000000000005
247
+ },
248
+ {
249
+ "pitch": 99,
250
+ "velocity": 9,
251
+ "start": 0.48,
252
+ "duration": 0.06000000000000005
253
+ },
254
+ {
255
+ "pitch": 56,
256
+ "velocity": 41,
257
+ "start": 0.54,
258
+ "duration": 0.06000000000000005
259
+ },
260
+ {
261
+ "pitch": 68,
262
+ "velocity": 35,
263
+ "start": 0.54,
264
+ "duration": 0.06000000000000005
265
+ },
266
+ {
267
+ "pitch": 75,
268
+ "velocity": 36,
269
+ "start": 0.54,
270
+ "duration": 0.06000000000000005
271
+ },
272
+ {
273
+ "pitch": 80,
274
+ "velocity": 46,
275
+ "start": 0.54,
276
+ "duration": 0.06000000000000005
277
+ },
278
+ {
279
+ "pitch": 84,
280
+ "velocity": 37,
281
+ "start": 0.54,
282
+ "duration": 0.06000000000000005
283
+ },
284
+ {
285
+ "pitch": 87,
286
+ "velocity": 27,
287
+ "start": 0.54,
288
+ "duration": 0.06000000000000005
289
+ },
290
+ {
291
+ "pitch": 92,
292
+ "velocity": 26,
293
+ "start": 0.54,
294
+ "duration": 0.06000000000000005
295
+ },
296
+ {
297
+ "pitch": 94,
298
+ "velocity": 27,
299
+ "start": 0.54,
300
+ "duration": 0.06000000000000005
301
+ },
302
+ {
303
+ "pitch": 56,
304
+ "velocity": 45,
305
+ "start": 0.6000000000000001,
306
+ "duration": 0.06000000000000005
307
+ },
308
+ {
309
+ "pitch": 68,
310
+ "velocity": 28,
311
+ "start": 0.6000000000000001,
312
+ "duration": 0.06000000000000005
313
+ },
314
+ {
315
+ "pitch": 75,
316
+ "velocity": 26,
317
+ "start": 0.6000000000000001,
318
+ "duration": 0.06000000000000005
319
+ },
320
+ {
321
+ "pitch": 80,
322
+ "velocity": 33,
323
+ "start": 0.6000000000000001,
324
+ "duration": 0.06000000000000005
325
+ },
326
+ {
327
+ "pitch": 84,
328
+ "velocity": 22,
329
+ "start": 0.6000000000000001,
330
+ "duration": 0.06000000000000005
331
+ },
332
+ {
333
+ "pitch": 87,
334
+ "velocity": 11,
335
+ "start": 0.6000000000000001,
336
+ "duration": 0.06000000000000005
337
+ },
338
+ {
339
+ "pitch": 90,
340
+ "velocity": 14,
341
+ "start": 0.6000000000000001,
342
+ "duration": 0.06000000000000005
343
+ },
344
+ {
345
+ "pitch": 92,
346
+ "velocity": 21,
347
+ "start": 0.6000000000000001,
348
+ "duration": 0.06000000000000005
349
+ },
350
+ {
351
+ "pitch": 57,
352
+ "velocity": 46,
353
+ "start": 0.6600000000000001,
354
+ "duration": 0.06000000000000005
355
+ },
356
+ {
357
+ "pitch": 69,
358
+ "velocity": 20,
359
+ "start": 0.6600000000000001,
360
+ "duration": 0.06000000000000005
361
+ },
362
+ {
363
+ "pitch": 81,
364
+ "velocity": 15,
365
+ "start": 0.6600000000000001,
366
+ "duration": 0.06000000000000005
367
+ },
368
+ {
369
+ "pitch": 85,
370
+ "velocity": 12,
371
+ "start": 0.6600000000000001,
372
+ "duration": 0.06000000000000005
373
+ },
374
+ {
375
+ "pitch": 56,
376
+ "velocity": 20,
377
+ "start": 0.7200000000000002,
378
+ "duration": 0.06000000000000005
379
+ },
380
+ {
381
+ "pitch": 59,
382
+ "velocity": 38,
383
+ "start": 0.7200000000000002,
384
+ "duration": 0.06000000000000005
385
+ },
386
+ {
387
+ "pitch": 71,
388
+ "velocity": 32,
389
+ "start": 0.7200000000000002,
390
+ "duration": 0.06000000000000005
391
+ },
392
+ {
393
+ "pitch": 78,
394
+ "velocity": 28,
395
+ "start": 0.7200000000000002,
396
+ "duration": 0.06000000000000005
397
+ },
398
+ {
399
+ "pitch": 83,
400
+ "velocity": 29,
401
+ "start": 0.7200000000000002,
402
+ "duration": 0.06000000000000005
403
+ },
404
+ {
405
+ "pitch": 84,
406
+ "velocity": 19,
407
+ "start": 0.7200000000000002,
408
+ "duration": 0.06000000000000005
409
+ },
410
+ {
411
+ "pitch": 85,
412
+ "velocity": 23,
413
+ "start": 0.7200000000000002,
414
+ "duration": 0.06000000000000005
415
+ },
416
+ {
417
+ "pitch": 87,
418
+ "velocity": 26,
419
+ "start": 0.7200000000000002,
420
+ "duration": 0.06000000000000005
421
+ },
422
+ {
423
+ "pitch": 59,
424
+ "velocity": 45,
425
+ "start": 0.7800000000000002,
426
+ "duration": 0.06000000000000005
427
+ },
428
+ {
429
+ "pitch": 71,
430
+ "velocity": 39,
431
+ "start": 0.7800000000000002,
432
+ "duration": 0.06000000000000005
433
+ },
434
+ {
435
+ "pitch": 78,
436
+ "velocity": 44,
437
+ "start": 0.7800000000000002,
438
+ "duration": 0.06000000000000005
439
+ },
440
+ {
441
+ "pitch": 83,
442
+ "velocity": 44,
443
+ "start": 0.7800000000000002,
444
+ "duration": 0.06000000000000005
445
+ },
446
+ {
447
+ "pitch": 87,
448
+ "velocity": 38,
449
+ "start": 0.7800000000000002,
450
+ "duration": 0.06000000000000005
451
+ },
452
+ {
453
+ "pitch": 90,
454
+ "velocity": 25,
455
+ "start": 0.7800000000000002,
456
+ "duration": 0.06000000000000005
457
+ },
458
+ {
459
+ "pitch": 93,
460
+ "velocity": 12,
461
+ "start": 0.7800000000000002,
462
+ "duration": 0.06000000000000005
463
+ },
464
+ {
465
+ "pitch": 107,
466
+ "velocity": 8,
467
+ "start": 0.7800000000000002,
468
+ "duration": 0.06000000000000005
469
+ },
470
+ {
471
+ "pitch": 59,
472
+ "velocity": 46,
473
+ "start": 0.8400000000000003,
474
+ "duration": 0.06000000000000005
475
+ },
476
+ {
477
+ "pitch": 71,
478
+ "velocity": 33,
479
+ "start": 0.8400000000000003,
480
+ "duration": 0.06000000000000005
481
+ },
482
+ {
483
+ "pitch": 78,
484
+ "velocity": 43,
485
+ "start": 0.8400000000000003,
486
+ "duration": 0.06000000000000005
487
+ },
488
+ {
489
+ "pitch": 83,
490
+ "velocity": 40,
491
+ "start": 0.8400000000000003,
492
+ "duration": 0.06000000000000005
493
+ },
494
+ {
495
+ "pitch": 87,
496
+ "velocity": 30,
497
+ "start": 0.8400000000000003,
498
+ "duration": 0.06000000000000005
499
+ },
500
+ {
501
+ "pitch": 90,
502
+ "velocity": 32,
503
+ "start": 0.8400000000000003,
504
+ "duration": 0.06000000000000005
505
+ },
506
+ {
507
+ "pitch": 93,
508
+ "velocity": 14,
509
+ "start": 0.8400000000000003,
510
+ "duration": 0.06000000000000005
511
+ },
512
+ {
513
+ "pitch": 59,
514
+ "velocity": 49,
515
+ "start": 0.9000000000000004,
516
+ "duration": 0.06000000000000005
517
+ },
518
+ {
519
+ "pitch": 71,
520
+ "velocity": 22,
521
+ "start": 0.9000000000000004,
522
+ "duration": 0.06000000000000005
523
+ },
524
+ {
525
+ "pitch": 78,
526
+ "velocity": 29,
527
+ "start": 0.9000000000000004,
528
+ "duration": 0.06000000000000005
529
+ },
530
+ {
531
+ "pitch": 83,
532
+ "velocity": 26,
533
+ "start": 0.9000000000000004,
534
+ "duration": 0.06000000000000005
535
+ },
536
+ {
537
+ "pitch": 87,
538
+ "velocity": 11,
539
+ "start": 0.9000000000000004,
540
+ "duration": 0.06000000000000005
541
+ },
542
+ {
543
+ "pitch": 90,
544
+ "velocity": 16,
545
+ "start": 0.9000000000000004,
546
+ "duration": 0.06000000000000005
547
+ },
548
+ {
549
+ "pitch": 59,
550
+ "velocity": 44,
551
+ "start": 0.9600000000000004,
552
+ "duration": 0.06000000000000005
553
+ },
554
+ {
555
+ "pitch": 60,
556
+ "velocity": 39,
557
+ "start": 1.0200000000000005,
558
+ "duration": 0.06000000000000005
559
+ },
560
+ {
561
+ "pitch": 72,
562
+ "velocity": 23,
563
+ "start": 1.0200000000000005,
564
+ "duration": 0.06000000000000005
565
+ },
566
+ {
567
+ "pitch": 79,
568
+ "velocity": 26,
569
+ "start": 1.0200000000000005,
570
+ "duration": 0.06000000000000005
571
+ },
572
+ {
573
+ "pitch": 84,
574
+ "velocity": 19,
575
+ "start": 1.0200000000000005,
576
+ "duration": 0.06000000000000005
577
+ },
578
+ {
579
+ "pitch": 98,
580
+ "velocity": 12,
581
+ "start": 1.0200000000000005,
582
+ "duration": 0.06000000000000005
583
+ },
584
+ {
585
+ "pitch": 101,
586
+ "velocity": 11,
587
+ "start": 1.0200000000000005,
588
+ "duration": 0.06000000000000005
589
+ },
590
+ {
591
+ "pitch": 102,
592
+ "velocity": 15,
593
+ "start": 1.0200000000000005,
594
+ "duration": 0.06000000000000005
595
+ },
596
+ {
597
+ "pitch": 103,
598
+ "velocity": 13,
599
+ "start": 1.0200000000000005,
600
+ "duration": 0.06000000000000005
601
+ },
602
+ {
603
+ "pitch": 58,
604
+ "velocity": 42,
605
+ "start": 1.0800000000000005,
606
+ "duration": 0.06000000000000005
607
+ },
608
+ {
609
+ "pitch": 70,
610
+ "velocity": 26,
611
+ "start": 1.0800000000000005,
612
+ "duration": 0.06000000000000005
613
+ },
614
+ {
615
+ "pitch": 77,
616
+ "velocity": 29,
617
+ "start": 1.0800000000000005,
618
+ "duration": 0.06000000000000005
619
+ },
620
+ {
621
+ "pitch": 82,
622
+ "velocity": 31,
623
+ "start": 1.0800000000000005,
624
+ "duration": 0.06000000000000005
625
+ },
626
+ {
627
+ "pitch": 92,
628
+ "velocity": 17,
629
+ "start": 1.0800000000000005,
630
+ "duration": 0.06000000000000005
631
+ },
632
+ {
633
+ "pitch": 93,
634
+ "velocity": 15,
635
+ "start": 1.0800000000000005,
636
+ "duration": 0.06000000000000005
637
+ },
638
+ {
639
+ "pitch": 94,
640
+ "velocity": 12,
641
+ "start": 1.0800000000000005,
642
+ "duration": 0.06000000000000005
643
+ },
644
+ {
645
+ "pitch": 57,
646
+ "velocity": 31,
647
+ "start": 1.1400000000000006,
648
+ "duration": 0.06000000000000005
649
+ },
650
+ {
651
+ "pitch": 69,
652
+ "velocity": 15,
653
+ "start": 1.1400000000000006,
654
+ "duration": 0.06000000000000005
655
+ },
656
+ {
657
+ "pitch": 77,
658
+ "velocity": 12,
659
+ "start": 1.1400000000000006,
660
+ "duration": 0.06000000000000005
661
+ },
662
+ {
663
+ "pitch": 82,
664
+ "velocity": 14,
665
+ "start": 1.1400000000000006,
666
+ "duration": 0.06000000000000005
667
+ },
668
+ {
669
+ "pitch": 57,
670
+ "velocity": 42,
671
+ "start": 1.2000000000000006,
672
+ "duration": 0.06000000000000005
673
+ },
674
+ {
675
+ "pitch": 69,
676
+ "velocity": 25,
677
+ "start": 1.2000000000000006,
678
+ "duration": 0.06000000000000005
679
+ },
680
+ {
681
+ "pitch": 81,
682
+ "velocity": 12,
683
+ "start": 1.2000000000000006,
684
+ "duration": 0.06000000000000005
685
+ },
686
+ {
687
+ "pitch": 55,
688
+ "velocity": 43,
689
+ "start": 1.2600000000000007,
690
+ "duration": 0.06000000000000005
691
+ },
692
+ {
693
+ "pitch": 67,
694
+ "velocity": 26,
695
+ "start": 1.2600000000000007,
696
+ "duration": 0.06000000000000005
697
+ },
698
+ {
699
+ "pitch": 83,
700
+ "velocity": 9,
701
+ "start": 1.2600000000000007,
702
+ "duration": 0.06000000000000005
703
+ },
704
+ {
705
+ "pitch": 96,
706
+ "velocity": 10,
707
+ "start": 1.2600000000000007,
708
+ "duration": 0.06000000000000005
709
+ },
710
+ {
711
+ "pitch": 98,
712
+ "velocity": 9,
713
+ "start": 1.2600000000000007,
714
+ "duration": 0.06000000000000005
715
+ },
716
+ {
717
+ "pitch": 90,
718
+ "velocity": 12,
719
+ "start": 1.3200000000000007,
720
+ "duration": 0.06000000000000005
721
+ },
722
+ {
723
+ "pitch": 92,
724
+ "velocity": 13,
725
+ "start": 1.3200000000000007,
726
+ "duration": 0.06000000000000005
727
+ },
728
+ {
729
+ "pitch": 93,
730
+ "velocity": 12,
731
+ "start": 1.3200000000000007,
732
+ "duration": 0.06000000000000005
733
+ },
734
+ {
735
+ "pitch": 94,
736
+ "velocity": 11,
737
+ "start": 1.3200000000000007,
738
+ "duration": 0.06000000000000005
739
+ },
740
+ {
741
+ "pitch": 96,
742
+ "velocity": 11,
743
+ "start": 1.3200000000000007,
744
+ "duration": 0.06000000000000005
745
+ },
746
+ {
747
+ "pitch": 98,
748
+ "velocity": 13,
749
+ "start": 1.3200000000000007,
750
+ "duration": 0.06000000000000005
751
+ },
752
+ {
753
+ "pitch": 59,
754
+ "velocity": 43,
755
+ "start": 1.3800000000000008,
756
+ "duration": 0.06000000000000005
757
+ },
758
+ {
759
+ "pitch": 71,
760
+ "velocity": 27,
761
+ "start": 1.3800000000000008,
762
+ "duration": 0.06000000000000005
763
+ },
764
+ {
765
+ "pitch": 78,
766
+ "velocity": 32,
767
+ "start": 1.3800000000000008,
768
+ "duration": 0.06000000000000005
769
+ },
770
+ {
771
+ "pitch": 81,
772
+ "velocity": 11,
773
+ "start": 1.3800000000000008,
774
+ "duration": 0.06000000000000005
775
+ },
776
+ {
777
+ "pitch": 83,
778
+ "velocity": 32,
779
+ "start": 1.3800000000000008,
780
+ "duration": 0.06000000000000005
781
+ },
782
+ {
783
+ "pitch": 87,
784
+ "velocity": 19,
785
+ "start": 1.3800000000000008,
786
+ "duration": 0.06000000000000005
787
+ },
788
+ {
789
+ "pitch": 90,
790
+ "velocity": 13,
791
+ "start": 1.3800000000000008,
792
+ "duration": 0.06000000000000005
793
+ },
794
+ {
795
+ "pitch": 60,
796
+ "velocity": 47,
797
+ "start": 1.4400000000000008,
798
+ "duration": 0.06000000000000005
799
+ },
800
+ {
801
+ "pitch": 71,
802
+ "velocity": 24,
803
+ "start": 1.4400000000000008,
804
+ "duration": 0.06000000000000005
805
+ },
806
+ {
807
+ "pitch": 78,
808
+ "velocity": 33,
809
+ "start": 1.4400000000000008,
810
+ "duration": 0.06000000000000005
811
+ },
812
+ {
813
+ "pitch": 83,
814
+ "velocity": 32,
815
+ "start": 1.4400000000000008,
816
+ "duration": 0.06000000000000005
817
+ },
818
+ {
819
+ "pitch": 87,
820
+ "velocity": 28,
821
+ "start": 1.4400000000000008,
822
+ "duration": 0.06000000000000005
823
+ },
824
+ {
825
+ "pitch": 61,
826
+ "velocity": 47,
827
+ "start": 1.5000000000000009,
828
+ "duration": 0.06000000000000005
829
+ },
830
+ {
831
+ "pitch": 72,
832
+ "velocity": 13,
833
+ "start": 1.5000000000000009,
834
+ "duration": 0.06000000000000005
835
+ },
836
+ {
837
+ "pitch": 79,
838
+ "velocity": 28,
839
+ "start": 1.5000000000000009,
840
+ "duration": 0.06000000000000005
841
+ },
842
+ {
843
+ "pitch": 84,
844
+ "velocity": 20,
845
+ "start": 1.5000000000000009,
846
+ "duration": 0.06000000000000005
847
+ },
848
+ {
849
+ "pitch": 61,
850
+ "velocity": 23,
851
+ "start": 1.560000000000001,
852
+ "duration": 0.06000000000000005
853
+ },
854
+ {
855
+ "pitch": 73,
856
+ "velocity": 14,
857
+ "start": 1.560000000000001,
858
+ "duration": 0.06000000000000005
859
+ },
860
+ {
861
+ "pitch": 80,
862
+ "velocity": 17,
863
+ "start": 1.560000000000001,
864
+ "duration": 0.06000000000000005
865
+ },
866
+ {
867
+ "pitch": 81,
868
+ "velocity": 17,
869
+ "start": 1.560000000000001,
870
+ "duration": 0.06000000000000005
871
+ },
872
+ {
873
+ "pitch": 82,
874
+ "velocity": 19,
875
+ "start": 1.560000000000001,
876
+ "duration": 0.06000000000000005
877
+ },
878
+ {
879
+ "pitch": 83,
880
+ "velocity": 17,
881
+ "start": 1.560000000000001,
882
+ "duration": 0.06000000000000005
883
+ },
884
+ {
885
+ "pitch": 55,
886
+ "velocity": 36,
887
+ "start": 1.620000000000001,
888
+ "duration": 0.06000000000000005
889
+ },
890
+ {
891
+ "pitch": 68,
892
+ "velocity": 29,
893
+ "start": 1.620000000000001,
894
+ "duration": 0.06000000000000005
895
+ },
896
+ {
897
+ "pitch": 79,
898
+ "velocity": 19,
899
+ "start": 1.620000000000001,
900
+ "duration": 0.06000000000000005
901
+ },
902
+ {
903
+ "pitch": 80,
904
+ "velocity": 26,
905
+ "start": 1.620000000000001,
906
+ "duration": 0.06000000000000005
907
+ },
908
+ {
909
+ "pitch": 81,
910
+ "velocity": 23,
911
+ "start": 1.620000000000001,
912
+ "duration": 0.06000000000000005
913
+ },
914
+ {
915
+ "pitch": 82,
916
+ "velocity": 19,
917
+ "start": 1.620000000000001,
918
+ "duration": 0.06000000000000005
919
+ },
920
+ {
921
+ "pitch": 83,
922
+ "velocity": 19,
923
+ "start": 1.620000000000001,
924
+ "duration": 0.06000000000000005
925
+ },
926
+ {
927
+ "pitch": 52,
928
+ "velocity": 37,
929
+ "start": 1.680000000000001,
930
+ "duration": 0.06000000000000005
931
+ },
932
+ {
933
+ "pitch": 65,
934
+ "velocity": 28,
935
+ "start": 1.680000000000001,
936
+ "duration": 0.06000000000000005
937
+ },
938
+ {
939
+ "pitch": 72,
940
+ "velocity": 24,
941
+ "start": 1.680000000000001,
942
+ "duration": 0.06000000000000005
943
+ },
944
+ {
945
+ "pitch": 80,
946
+ "velocity": 17,
947
+ "start": 1.680000000000001,
948
+ "duration": 0.06000000000000005
949
+ },
950
+ {
951
+ "pitch": 81,
952
+ "velocity": 19,
953
+ "start": 1.680000000000001,
954
+ "duration": 0.06000000000000005
955
+ },
956
+ {
957
+ "pitch": 83,
958
+ "velocity": 19,
959
+ "start": 1.680000000000001,
960
+ "duration": 0.06000000000000005
961
+ },
962
+ {
963
+ "pitch": 84,
964
+ "velocity": 19,
965
+ "start": 1.680000000000001,
966
+ "duration": 0.06000000000000005
967
+ },
968
+ {
969
+ "pitch": 52,
970
+ "velocity": 24,
971
+ "start": 1.740000000000001,
972
+ "duration": 0.06000000000000005
973
+ },
974
+ {
975
+ "pitch": 61,
976
+ "velocity": 31,
977
+ "start": 2.4000000000000012,
978
+ "duration": 0.06000000000000005
979
+ },
980
+ {
981
+ "pitch": 72,
982
+ "velocity": 12,
983
+ "start": 2.4000000000000012,
984
+ "duration": 0.06000000000000005
985
+ },
986
+ {
987
+ "pitch": 60,
988
+ "velocity": 49,
989
+ "start": 2.4600000000000013,
990
+ "duration": 0.06000000000000005
991
+ },
992
+ {
993
+ "pitch": 72,
994
+ "velocity": 32,
995
+ "start": 2.4600000000000013,
996
+ "duration": 0.06000000000000005
997
+ },
998
+ {
999
+ "pitch": 79,
1000
+ "velocity": 26,
1001
+ "start": 2.4600000000000013,
1002
+ "duration": 0.06000000000000005
1003
+ },
1004
+ {
1005
+ "pitch": 84,
1006
+ "velocity": 15,
1007
+ "start": 2.4600000000000013,
1008
+ "duration": 0.06000000000000005
1009
+ },
1010
+ {
1011
+ "pitch": 94,
1012
+ "velocity": 11,
1013
+ "start": 2.4600000000000013,
1014
+ "duration": 0.06000000000000005
1015
+ },
1016
+ {
1017
+ "pitch": 103,
1018
+ "velocity": 10,
1019
+ "start": 2.4600000000000013,
1020
+ "duration": 0.06000000000000005
1021
+ },
1022
+ {
1023
+ "pitch": 105,
1024
+ "velocity": 13,
1025
+ "start": 2.4600000000000013,
1026
+ "duration": 0.06000000000000005
1027
+ },
1028
+ {
1029
+ "pitch": 60,
1030
+ "velocity": 51,
1031
+ "start": 2.5200000000000014,
1032
+ "duration": 0.06000000000000005
1033
+ },
1034
+ {
1035
+ "pitch": 72,
1036
+ "velocity": 32,
1037
+ "start": 2.5200000000000014,
1038
+ "duration": 0.06000000000000005
1039
+ },
1040
+ {
1041
+ "pitch": 79,
1042
+ "velocity": 26,
1043
+ "start": 2.5200000000000014,
1044
+ "duration": 0.06000000000000005
1045
+ },
1046
+ {
1047
+ "pitch": 84,
1048
+ "velocity": 10,
1049
+ "start": 2.5200000000000014,
1050
+ "duration": 0.06000000000000005
1051
+ },
1052
+ {
1053
+ "pitch": 101,
1054
+ "velocity": 14,
1055
+ "start": 2.5200000000000014,
1056
+ "duration": 0.06000000000000005
1057
+ },
1058
+ {
1059
+ "pitch": 102,
1060
+ "velocity": 15,
1061
+ "start": 2.5200000000000014,
1062
+ "duration": 0.06000000000000005
1063
+ },
1064
+ {
1065
+ "pitch": 103,
1066
+ "velocity": 14,
1067
+ "start": 2.5200000000000014,
1068
+ "duration": 0.06000000000000005
1069
+ },
1070
+ {
1071
+ "pitch": 105,
1072
+ "velocity": 14,
1073
+ "start": 2.5200000000000014,
1074
+ "duration": 0.06000000000000005
1075
+ },
1076
+ {
1077
+ "pitch": 60,
1078
+ "velocity": 41,
1079
+ "start": 2.5800000000000014,
1080
+ "duration": 0.06000000000000005
1081
+ },
1082
+ {
1083
+ "pitch": 72,
1084
+ "velocity": 20,
1085
+ "start": 2.5800000000000014,
1086
+ "duration": 0.06000000000000005
1087
+ },
1088
+ {
1089
+ "pitch": 79,
1090
+ "velocity": 8,
1091
+ "start": 2.5800000000000014,
1092
+ "duration": 0.06000000000000005
1093
+ },
1094
+ {
1095
+ "pitch": 59,
1096
+ "velocity": 13,
1097
+ "start": 2.6400000000000015,
1098
+ "duration": 0.06000000000000005
1099
+ },
1100
+ {
1101
+ "pitch": 61,
1102
+ "velocity": 12,
1103
+ "start": 2.6400000000000015,
1104
+ "duration": 0.06000000000000005
1105
+ },
1106
+ {
1107
+ "pitch": 60,
1108
+ "velocity": 45,
1109
+ "start": 2.7000000000000015,
1110
+ "duration": 0.06000000000000005
1111
+ },
1112
+ {
1113
+ "pitch": 72,
1114
+ "velocity": 40,
1115
+ "start": 2.7000000000000015,
1116
+ "duration": 0.06000000000000005
1117
+ },
1118
+ {
1119
+ "pitch": 79,
1120
+ "velocity": 35,
1121
+ "start": 2.7000000000000015,
1122
+ "duration": 0.06000000000000005
1123
+ },
1124
+ {
1125
+ "pitch": 84,
1126
+ "velocity": 23,
1127
+ "start": 2.7000000000000015,
1128
+ "duration": 0.06000000000000005
1129
+ },
1130
+ {
1131
+ "pitch": 88,
1132
+ "velocity": 24,
1133
+ "start": 2.7000000000000015,
1134
+ "duration": 0.06000000000000005
1135
+ },
1136
+ {
1137
+ "pitch": 91,
1138
+ "velocity": 11,
1139
+ "start": 2.7000000000000015,
1140
+ "duration": 0.06000000000000005
1141
+ },
1142
+ {
1143
+ "pitch": 60,
1144
+ "velocity": 51,
1145
+ "start": 2.7600000000000016,
1146
+ "duration": 0.06000000000000005
1147
+ },
1148
+ {
1149
+ "pitch": 72,
1150
+ "velocity": 32,
1151
+ "start": 2.7600000000000016,
1152
+ "duration": 0.06000000000000005
1153
+ },
1154
+ {
1155
+ "pitch": 79,
1156
+ "velocity": 34,
1157
+ "start": 2.7600000000000016,
1158
+ "duration": 0.06000000000000005
1159
+ },
1160
+ {
1161
+ "pitch": 84,
1162
+ "velocity": 21,
1163
+ "start": 2.7600000000000016,
1164
+ "duration": 0.06000000000000005
1165
+ },
1166
+ {
1167
+ "pitch": 88,
1168
+ "velocity": 22,
1169
+ "start": 2.7600000000000016,
1170
+ "duration": 0.06000000000000005
1171
+ },
1172
+ {
1173
+ "pitch": 91,
1174
+ "velocity": 11,
1175
+ "start": 2.7600000000000016,
1176
+ "duration": 0.06000000000000005
1177
+ },
1178
+ {
1179
+ "pitch": 60,
1180
+ "velocity": 50,
1181
+ "start": 2.8200000000000016,
1182
+ "duration": 0.06000000000000005
1183
+ },
1184
+ {
1185
+ "pitch": 72,
1186
+ "velocity": 13,
1187
+ "start": 2.8200000000000016,
1188
+ "duration": 0.06000000000000005
1189
+ },
1190
+ {
1191
+ "pitch": 79,
1192
+ "velocity": 24,
1193
+ "start": 2.8200000000000016,
1194
+ "duration": 0.06000000000000005
1195
+ },
1196
+ {
1197
+ "pitch": 84,
1198
+ "velocity": 13,
1199
+ "start": 2.8200000000000016,
1200
+ "duration": 0.06000000000000005
1201
+ },
1202
+ {
1203
+ "pitch": 61,
1204
+ "velocity": 35,
1205
+ "start": 2.8800000000000017,
1206
+ "duration": 0.06000000000000005
1207
+ },
1208
+ {
1209
+ "pitch": 62,
1210
+ "velocity": 16,
1211
+ "start": 2.9400000000000017,
1212
+ "duration": 0.06000000000000005
1213
+ },
1214
+ {
1215
+ "pitch": 102,
1216
+ "velocity": 8,
1217
+ "start": 2.9400000000000017,
1218
+ "duration": 0.06000000000000005
1219
+ },
1220
+ {
1221
+ "pitch": 103,
1222
+ "velocity": 9,
1223
+ "start": 2.9400000000000017,
1224
+ "duration": 0.06000000000000005
1225
+ },
1226
+ {
1227
+ "pitch": 105,
1228
+ "velocity": 10,
1229
+ "start": 2.9400000000000017,
1230
+ "duration": 0.06000000000000005
1231
+ },
1232
+ {
1233
+ "pitch": 106,
1234
+ "velocity": 11,
1235
+ "start": 2.9400000000000017,
1236
+ "duration": 0.06000000000000005
1237
+ },
1238
+ {
1239
+ "pitch": 61,
1240
+ "velocity": 48,
1241
+ "start": 3.0000000000000018,
1242
+ "duration": 0.06000000000000005
1243
+ },
1244
+ {
1245
+ "pitch": 81,
1246
+ "velocity": 21,
1247
+ "start": 3.0000000000000018,
1248
+ "duration": 0.06000000000000005
1249
+ },
1250
+ {
1251
+ "pitch": 61,
1252
+ "velocity": 45,
1253
+ "start": 3.060000000000002,
1254
+ "duration": 0.06000000000000005
1255
+ },
1256
+ {
1257
+ "pitch": 80,
1258
+ "velocity": 15,
1259
+ "start": 3.060000000000002,
1260
+ "duration": 0.06000000000000005
1261
+ },
1262
+ {
1263
+ "pitch": 61,
1264
+ "velocity": 15,
1265
+ "start": 3.120000000000002,
1266
+ "duration": 0.06000000000000005
1267
+ },
1268
+ {
1269
+ "pitch": 102,
1270
+ "velocity": 10,
1271
+ "start": 3.120000000000002,
1272
+ "duration": 0.06000000000000005
1273
+ },
1274
+ {
1275
+ "pitch": 106,
1276
+ "velocity": 8,
1277
+ "start": 3.120000000000002,
1278
+ "duration": 0.06000000000000005
1279
+ },
1280
+ {
1281
+ "pitch": 61,
1282
+ "velocity": 48,
1283
+ "start": 3.180000000000002,
1284
+ "duration": 0.06000000000000005
1285
+ },
1286
+ {
1287
+ "pitch": 80,
1288
+ "velocity": 21,
1289
+ "start": 3.180000000000002,
1290
+ "duration": 0.06000000000000005
1291
+ },
1292
+ {
1293
+ "pitch": 61,
1294
+ "velocity": 45,
1295
+ "start": 3.240000000000002,
1296
+ "duration": 0.06000000000000005
1297
+ },
1298
+ {
1299
+ "pitch": 80,
1300
+ "velocity": 17,
1301
+ "start": 3.240000000000002,
1302
+ "duration": 0.06000000000000005
1303
+ },
1304
+ {
1305
+ "pitch": 96,
1306
+ "velocity": 12,
1307
+ "start": 3.240000000000002,
1308
+ "duration": 0.06000000000000005
1309
+ },
1310
+ {
1311
+ "pitch": 61,
1312
+ "velocity": 22,
1313
+ "start": 3.300000000000002,
1314
+ "duration": 0.06000000000000005
1315
+ },
1316
+ {
1317
+ "pitch": 93,
1318
+ "velocity": 14,
1319
+ "start": 3.300000000000002,
1320
+ "duration": 0.06000000000000005
1321
+ },
1322
+ {
1323
+ "pitch": 95,
1324
+ "velocity": 13,
1325
+ "start": 3.300000000000002,
1326
+ "duration": 0.06000000000000005
1327
+ },
1328
+ {
1329
+ "pitch": 96,
1330
+ "velocity": 14,
1331
+ "start": 3.300000000000002,
1332
+ "duration": 0.06000000000000005
1333
+ },
1334
+ {
1335
+ "pitch": 97,
1336
+ "velocity": 14,
1337
+ "start": 3.300000000000002,
1338
+ "duration": 0.06000000000000005
1339
+ },
1340
+ {
1341
+ "pitch": 61,
1342
+ "velocity": 46,
1343
+ "start": 3.360000000000002,
1344
+ "duration": 0.06000000000000005
1345
+ },
1346
+ {
1347
+ "pitch": 73,
1348
+ "velocity": 25,
1349
+ "start": 3.360000000000002,
1350
+ "duration": 0.06000000000000005
1351
+ },
1352
+ {
1353
+ "pitch": 81,
1354
+ "velocity": 27,
1355
+ "start": 3.360000000000002,
1356
+ "duration": 0.06000000000000005
1357
+ },
1358
+ {
1359
+ "pitch": 85,
1360
+ "velocity": 8,
1361
+ "start": 3.360000000000002,
1362
+ "duration": 0.06000000000000005
1363
+ },
1364
+ {
1365
+ "pitch": 97,
1366
+ "velocity": 8,
1367
+ "start": 3.360000000000002,
1368
+ "duration": 0.06000000000000005
1369
+ },
1370
+ {
1371
+ "pitch": 99,
1372
+ "velocity": 14,
1373
+ "start": 3.360000000000002,
1374
+ "duration": 0.06000000000000005
1375
+ },
1376
+ {
1377
+ "pitch": 103,
1378
+ "velocity": 8,
1379
+ "start": 3.360000000000002,
1380
+ "duration": 0.06000000000000005
1381
+ },
1382
+ {
1383
+ "pitch": 104,
1384
+ "velocity": 15,
1385
+ "start": 3.360000000000002,
1386
+ "duration": 0.06000000000000005
1387
+ },
1388
+ {
1389
+ "pitch": 61,
1390
+ "velocity": 43,
1391
+ "start": 3.420000000000002,
1392
+ "duration": 0.06000000000000005
1393
+ },
1394
+ {
1395
+ "pitch": 73,
1396
+ "velocity": 18,
1397
+ "start": 3.420000000000002,
1398
+ "duration": 0.06000000000000005
1399
+ },
1400
+ {
1401
+ "pitch": 80,
1402
+ "velocity": 22,
1403
+ "start": 3.420000000000002,
1404
+ "duration": 0.06000000000000005
1405
+ },
1406
+ {
1407
+ "pitch": 99,
1408
+ "velocity": 11,
1409
+ "start": 3.420000000000002,
1410
+ "duration": 0.06000000000000005
1411
+ },
1412
+ {
1413
+ "pitch": 104,
1414
+ "velocity": 11,
1415
+ "start": 3.420000000000002,
1416
+ "duration": 0.06000000000000005
1417
+ },
1418
+ {
1419
+ "pitch": 60,
1420
+ "velocity": 19,
1421
+ "start": 3.480000000000002,
1422
+ "duration": 0.06000000000000005
1423
+ },
1424
+ {
1425
+ "pitch": 79,
1426
+ "velocity": 8,
1427
+ "start": 3.480000000000002,
1428
+ "duration": 0.06000000000000005
1429
+ },
1430
+ {
1431
+ "pitch": 82,
1432
+ "velocity": 14,
1433
+ "start": 3.480000000000002,
1434
+ "duration": 0.06000000000000005
1435
+ },
1436
+ {
1437
+ "pitch": 83,
1438
+ "velocity": 14,
1439
+ "start": 3.480000000000002,
1440
+ "duration": 0.06000000000000005
1441
+ },
1442
+ {
1443
+ "pitch": 85,
1444
+ "velocity": 12,
1445
+ "start": 3.480000000000002,
1446
+ "duration": 0.06000000000000005
1447
+ },
1448
+ {
1449
+ "pitch": 59,
1450
+ "velocity": 41,
1451
+ "start": 3.5400000000000023,
1452
+ "duration": 0.06000000000000005
1453
+ },
1454
+ {
1455
+ "pitch": 71,
1456
+ "velocity": 35,
1457
+ "start": 3.5400000000000023,
1458
+ "duration": 0.06000000000000005
1459
+ },
1460
+ {
1461
+ "pitch": 78,
1462
+ "velocity": 19,
1463
+ "start": 3.5400000000000023,
1464
+ "duration": 0.06000000000000005
1465
+ },
1466
+ {
1467
+ "pitch": 81,
1468
+ "velocity": 14,
1469
+ "start": 3.5400000000000023,
1470
+ "duration": 0.06000000000000005
1471
+ },
1472
+ {
1473
+ "pitch": 83,
1474
+ "velocity": 14,
1475
+ "start": 3.5400000000000023,
1476
+ "duration": 0.06000000000000005
1477
+ },
1478
+ {
1479
+ "pitch": 84,
1480
+ "velocity": 15,
1481
+ "start": 3.5400000000000023,
1482
+ "duration": 0.06000000000000005
1483
+ },
1484
+ {
1485
+ "pitch": 85,
1486
+ "velocity": 16,
1487
+ "start": 3.5400000000000023,
1488
+ "duration": 0.06000000000000005
1489
+ },
1490
+ {
1491
+ "pitch": 53,
1492
+ "velocity": 30,
1493
+ "start": 3.6000000000000023,
1494
+ "duration": 0.06000000000000005
1495
+ },
1496
+ {
1497
+ "pitch": 67,
1498
+ "velocity": 17,
1499
+ "start": 3.6000000000000023,
1500
+ "duration": 0.06000000000000005
1501
+ },
1502
+ {
1503
+ "pitch": 69,
1504
+ "velocity": 16,
1505
+ "start": 3.6000000000000023,
1506
+ "duration": 0.06000000000000005
1507
+ },
1508
+ {
1509
+ "pitch": 80,
1510
+ "velocity": 14,
1511
+ "start": 3.6000000000000023,
1512
+ "duration": 0.06000000000000005
1513
+ },
1514
+ {
1515
+ "pitch": 81,
1516
+ "velocity": 15,
1517
+ "start": 3.6000000000000023,
1518
+ "duration": 0.06000000000000005
1519
+ },
1520
+ {
1521
+ "pitch": 82,
1522
+ "velocity": 17,
1523
+ "start": 3.6000000000000023,
1524
+ "duration": 0.06000000000000005
1525
+ },
1526
+ {
1527
+ "pitch": 84,
1528
+ "velocity": 14,
1529
+ "start": 3.6000000000000023,
1530
+ "duration": 0.06000000000000005
1531
+ },
1532
+ {
1533
+ "pitch": 85,
1534
+ "velocity": 16,
1535
+ "start": 3.6000000000000023,
1536
+ "duration": 0.06000000000000005
1537
+ },
1538
+ {
1539
+ "pitch": 61,
1540
+ "velocity": 34,
1541
+ "start": 4.560000000000002,
1542
+ "duration": 0.05999999999999961
1543
+ },
1544
+ {
1545
+ "pitch": 80,
1546
+ "velocity": 9,
1547
+ "start": 4.560000000000002,
1548
+ "duration": 0.05999999999999961
1549
+ },
1550
+ {
1551
+ "pitch": 62,
1552
+ "velocity": 51,
1553
+ "start": 4.620000000000002,
1554
+ "duration": 0.05999999999999961
1555
+ },
1556
+ {
1557
+ "pitch": 81,
1558
+ "velocity": 22,
1559
+ "start": 4.620000000000002,
1560
+ "duration": 0.05999999999999961
1561
+ },
1562
+ {
1563
+ "pitch": 63,
1564
+ "velocity": 42,
1565
+ "start": 4.6800000000000015,
1566
+ "duration": 0.05999999999999961
1567
+ },
1568
+ {
1569
+ "pitch": 82,
1570
+ "velocity": 16,
1571
+ "start": 4.6800000000000015,
1572
+ "duration": 0.05999999999999961
1573
+ },
1574
+ {
1575
+ "pitch": 57,
1576
+ "velocity": 30,
1577
+ "start": 4.740000000000001,
1578
+ "duration": 0.05999999999999961
1579
+ },
1580
+ {
1581
+ "pitch": 68,
1582
+ "velocity": 16,
1583
+ "start": 4.740000000000001,
1584
+ "duration": 0.05999999999999961
1585
+ },
1586
+ {
1587
+ "pitch": 55,
1588
+ "velocity": 37,
1589
+ "start": 4.800000000000001,
1590
+ "duration": 0.05999999999999961
1591
+ },
1592
+ {
1593
+ "pitch": 67,
1594
+ "velocity": 26,
1595
+ "start": 4.800000000000001,
1596
+ "duration": 0.05999999999999961
1597
+ },
1598
+ {
1599
+ "pitch": 59,
1600
+ "velocity": 45,
1601
+ "start": 4.92,
1602
+ "duration": 0.05999999999999961
1603
+ },
1604
+ {
1605
+ "pitch": 71,
1606
+ "velocity": 24,
1607
+ "start": 4.92,
1608
+ "duration": 0.05999999999999961
1609
+ },
1610
+ {
1611
+ "pitch": 78,
1612
+ "velocity": 15,
1613
+ "start": 4.92,
1614
+ "duration": 0.05999999999999961
1615
+ },
1616
+ {
1617
+ "pitch": 102,
1618
+ "velocity": 8,
1619
+ "start": 4.92,
1620
+ "duration": 0.05999999999999961
1621
+ },
1622
+ {
1623
+ "pitch": 106,
1624
+ "velocity": 10,
1625
+ "start": 4.92,
1626
+ "duration": 0.05999999999999961
1627
+ },
1628
+ {
1629
+ "pitch": 58,
1630
+ "velocity": 35,
1631
+ "start": 4.9799999999999995,
1632
+ "duration": 0.05999999999999961
1633
+ },
1634
+ {
1635
+ "pitch": 71,
1636
+ "velocity": 17,
1637
+ "start": 4.9799999999999995,
1638
+ "duration": 0.05999999999999961
1639
+ },
1640
+ {
1641
+ "pitch": 102,
1642
+ "velocity": 8,
1643
+ "start": 5.039999999999999,
1644
+ "duration": 0.05999999999999961
1645
+ },
1646
+ {
1647
+ "pitch": 103,
1648
+ "velocity": 14,
1649
+ "start": 5.039999999999999,
1650
+ "duration": 0.05999999999999961
1651
+ },
1652
+ {
1653
+ "pitch": 106,
1654
+ "velocity": 10,
1655
+ "start": 5.039999999999999,
1656
+ "duration": 0.05999999999999961
1657
+ },
1658
+ {
1659
+ "pitch": 107,
1660
+ "velocity": 9,
1661
+ "start": 5.039999999999999,
1662
+ "duration": 0.05999999999999961
1663
+ },
1664
+ {
1665
+ "pitch": 61,
1666
+ "velocity": 48,
1667
+ "start": 5.099999999999999,
1668
+ "duration": 0.05999999999999961
1669
+ },
1670
+ {
1671
+ "pitch": 73,
1672
+ "velocity": 17,
1673
+ "start": 5.099999999999999,
1674
+ "duration": 0.05999999999999961
1675
+ },
1676
+ {
1677
+ "pitch": 80,
1678
+ "velocity": 19,
1679
+ "start": 5.099999999999999,
1680
+ "duration": 0.05999999999999961
1681
+ },
1682
+ {
1683
+ "pitch": 103,
1684
+ "velocity": 11,
1685
+ "start": 5.099999999999999,
1686
+ "duration": 0.05999999999999961
1687
+ },
1688
+ {
1689
+ "pitch": 104,
1690
+ "velocity": 20,
1691
+ "start": 5.099999999999999,
1692
+ "duration": 0.05999999999999961
1693
+ },
1694
+ {
1695
+ "pitch": 105,
1696
+ "velocity": 13,
1697
+ "start": 5.099999999999999,
1698
+ "duration": 0.05999999999999961
1699
+ },
1700
+ {
1701
+ "pitch": 106,
1702
+ "velocity": 10,
1703
+ "start": 5.099999999999999,
1704
+ "duration": 0.05999999999999961
1705
+ },
1706
+ {
1707
+ "pitch": 61,
1708
+ "velocity": 52,
1709
+ "start": 5.159999999999998,
1710
+ "duration": 0.05999999999999961
1711
+ },
1712
+ {
1713
+ "pitch": 73,
1714
+ "velocity": 16,
1715
+ "start": 5.159999999999998,
1716
+ "duration": 0.05999999999999961
1717
+ },
1718
+ {
1719
+ "pitch": 80,
1720
+ "velocity": 24,
1721
+ "start": 5.159999999999998,
1722
+ "duration": 0.05999999999999961
1723
+ },
1724
+ {
1725
+ "pitch": 85,
1726
+ "velocity": 13,
1727
+ "start": 5.159999999999998,
1728
+ "duration": 0.05999999999999961
1729
+ },
1730
+ {
1731
+ "pitch": 104,
1732
+ "velocity": 17,
1733
+ "start": 5.159999999999998,
1734
+ "duration": 0.05999999999999961
1735
+ },
1736
+ {
1737
+ "pitch": 105,
1738
+ "velocity": 14,
1739
+ "start": 5.159999999999998,
1740
+ "duration": 0.05999999999999961
1741
+ },
1742
+ {
1743
+ "pitch": 61,
1744
+ "velocity": 43,
1745
+ "start": 5.219999999999998,
1746
+ "duration": 0.05999999999999961
1747
+ },
1748
+ {
1749
+ "pitch": 80,
1750
+ "velocity": 8,
1751
+ "start": 5.219999999999998,
1752
+ "duration": 0.05999999999999961
1753
+ },
1754
+ {
1755
+ "pitch": 61,
1756
+ "velocity": 9,
1757
+ "start": 5.279999999999998,
1758
+ "duration": 0.05999999999999961
1759
+ },
1760
+ {
1761
+ "pitch": 59,
1762
+ "velocity": 24,
1763
+ "start": 5.879999999999997,
1764
+ "duration": 0.05999999999999961
1765
+ },
1766
+ {
1767
+ "pitch": 72,
1768
+ "velocity": 15,
1769
+ "start": 5.879999999999997,
1770
+ "duration": 0.05999999999999961
1771
+ },
1772
+ {
1773
+ "pitch": 78,
1774
+ "velocity": 17,
1775
+ "start": 5.879999999999997,
1776
+ "duration": 0.05999999999999961
1777
+ },
1778
+ {
1779
+ "pitch": 83,
1780
+ "velocity": 9,
1781
+ "start": 5.879999999999997,
1782
+ "duration": 0.05999999999999961
1783
+ },
1784
+ {
1785
+ "pitch": 94,
1786
+ "velocity": 10,
1787
+ "start": 5.879999999999997,
1788
+ "duration": 0.05999999999999961
1789
+ },
1790
+ {
1791
+ "pitch": 95,
1792
+ "velocity": 16,
1793
+ "start": 5.879999999999997,
1794
+ "duration": 0.05999999999999961
1795
+ },
1796
+ {
1797
+ "pitch": 97,
1798
+ "velocity": 9,
1799
+ "start": 5.879999999999997,
1800
+ "duration": 0.05999999999999961
1801
+ },
1802
+ {
1803
+ "pitch": 59,
1804
+ "velocity": 45,
1805
+ "start": 5.939999999999997,
1806
+ "duration": 0.05999999999999961
1807
+ },
1808
+ {
1809
+ "pitch": 71,
1810
+ "velocity": 34,
1811
+ "start": 5.939999999999997,
1812
+ "duration": 0.05999999999999961
1813
+ },
1814
+ {
1815
+ "pitch": 78,
1816
+ "velocity": 42,
1817
+ "start": 5.939999999999997,
1818
+ "duration": 0.05999999999999961
1819
+ },
1820
+ {
1821
+ "pitch": 83,
1822
+ "velocity": 34,
1823
+ "start": 5.939999999999997,
1824
+ "duration": 0.05999999999999961
1825
+ },
1826
+ {
1827
+ "pitch": 87,
1828
+ "velocity": 21,
1829
+ "start": 5.939999999999997,
1830
+ "duration": 0.05999999999999961
1831
+ },
1832
+ {
1833
+ "pitch": 90,
1834
+ "velocity": 13,
1835
+ "start": 5.939999999999997,
1836
+ "duration": 0.05999999999999961
1837
+ },
1838
+ {
1839
+ "pitch": 93,
1840
+ "velocity": 28,
1841
+ "start": 5.939999999999997,
1842
+ "duration": 0.05999999999999961
1843
+ },
1844
+ {
1845
+ "pitch": 95,
1846
+ "velocity": 19,
1847
+ "start": 5.939999999999997,
1848
+ "duration": 0.05999999999999961
1849
+ },
1850
+ {
1851
+ "pitch": 61,
1852
+ "velocity": 50,
1853
+ "start": 5.9999999999999964,
1854
+ "duration": 0.05999999999999961
1855
+ },
1856
+ {
1857
+ "pitch": 72,
1858
+ "velocity": 21,
1859
+ "start": 5.9999999999999964,
1860
+ "duration": 0.05999999999999961
1861
+ },
1862
+ {
1863
+ "pitch": 79,
1864
+ "velocity": 27,
1865
+ "start": 5.9999999999999964,
1866
+ "duration": 0.05999999999999961
1867
+ },
1868
+ {
1869
+ "pitch": 84,
1870
+ "velocity": 19,
1871
+ "start": 5.9999999999999964,
1872
+ "duration": 0.05999999999999961
1873
+ },
1874
+ {
1875
+ "pitch": 85,
1876
+ "velocity": 17,
1877
+ "start": 5.9999999999999964,
1878
+ "duration": 0.05999999999999961
1879
+ },
1880
+ {
1881
+ "pitch": 91,
1882
+ "velocity": 13,
1883
+ "start": 5.9999999999999964,
1884
+ "duration": 0.05999999999999961
1885
+ },
1886
+ {
1887
+ "pitch": 61,
1888
+ "velocity": 46,
1889
+ "start": 6.059999999999996,
1890
+ "duration": 0.05999999999999961
1891
+ },
1892
+ {
1893
+ "pitch": 80,
1894
+ "velocity": 14,
1895
+ "start": 6.059999999999996,
1896
+ "duration": 0.05999999999999961
1897
+ },
1898
+ {
1899
+ "pitch": 56,
1900
+ "velocity": 38,
1901
+ "start": 6.179999999999995,
1902
+ "duration": 0.05999999999999961
1903
+ },
1904
+ {
1905
+ "pitch": 68,
1906
+ "velocity": 14,
1907
+ "start": 6.179999999999995,
1908
+ "duration": 0.05999999999999961
1909
+ },
1910
+ {
1911
+ "pitch": 55,
1912
+ "velocity": 49,
1913
+ "start": 6.239999999999995,
1914
+ "duration": 0.05999999999999961
1915
+ },
1916
+ {
1917
+ "pitch": 67,
1918
+ "velocity": 31,
1919
+ "start": 6.239999999999995,
1920
+ "duration": 0.05999999999999961
1921
+ },
1922
+ {
1923
+ "pitch": 79,
1924
+ "velocity": 18,
1925
+ "start": 6.239999999999995,
1926
+ "duration": 0.05999999999999961
1927
+ },
1928
+ {
1929
+ "pitch": 86,
1930
+ "velocity": 9,
1931
+ "start": 6.239999999999995,
1932
+ "duration": 0.05999999999999961
1933
+ },
1934
+ {
1935
+ "pitch": 56,
1936
+ "velocity": 50,
1937
+ "start": 6.2999999999999945,
1938
+ "duration": 0.05999999999999961
1939
+ },
1940
+ {
1941
+ "pitch": 68,
1942
+ "velocity": 25,
1943
+ "start": 6.2999999999999945,
1944
+ "duration": 0.05999999999999961
1945
+ },
1946
+ {
1947
+ "pitch": 80,
1948
+ "velocity": 11,
1949
+ "start": 6.2999999999999945,
1950
+ "duration": 0.05999999999999961
1951
+ },
1952
+ {
1953
+ "pitch": 57,
1954
+ "velocity": 42,
1955
+ "start": 6.359999999999994,
1956
+ "duration": 0.05999999999999961
1957
+ },
1958
+ {
1959
+ "pitch": 68,
1960
+ "velocity": 11,
1961
+ "start": 6.359999999999994,
1962
+ "duration": 0.05999999999999961
1963
+ },
1964
+ {
1965
+ "pitch": 61,
1966
+ "velocity": 41,
1967
+ "start": 6.419999999999994,
1968
+ "duration": 0.05999999999999961
1969
+ },
1970
+ {
1971
+ "pitch": 66,
1972
+ "velocity": 13,
1973
+ "start": 6.419999999999994,
1974
+ "duration": 0.05999999999999961
1975
+ },
1976
+ {
1977
+ "pitch": 73,
1978
+ "velocity": 28,
1979
+ "start": 6.419999999999994,
1980
+ "duration": 0.05999999999999961
1981
+ },
1982
+ {
1983
+ "pitch": 80,
1984
+ "velocity": 23,
1985
+ "start": 6.419999999999994,
1986
+ "duration": 0.05999999999999961
1987
+ },
1988
+ {
1989
+ "pitch": 97,
1990
+ "velocity": 13,
1991
+ "start": 6.419999999999994,
1992
+ "duration": 0.05999999999999961
1993
+ },
1994
+ {
1995
+ "pitch": 98,
1996
+ "velocity": 14,
1997
+ "start": 6.419999999999994,
1998
+ "duration": 0.05999999999999961
1999
+ },
2000
+ {
2001
+ "pitch": 102,
2002
+ "velocity": 12,
2003
+ "start": 6.419999999999994,
2004
+ "duration": 0.05999999999999961
2005
+ },
2006
+ {
2007
+ "pitch": 60,
2008
+ "velocity": 44,
2009
+ "start": 6.479999999999993,
2010
+ "duration": 0.05999999999999961
2011
+ },
2012
+ {
2013
+ "pitch": 73,
2014
+ "velocity": 28,
2015
+ "start": 6.479999999999993,
2016
+ "duration": 0.05999999999999961
2017
+ },
2018
+ {
2019
+ "pitch": 80,
2020
+ "velocity": 23,
2021
+ "start": 6.479999999999993,
2022
+ "duration": 0.05999999999999961
2023
+ },
2024
+ {
2025
+ "pitch": 84,
2026
+ "velocity": 9,
2027
+ "start": 6.479999999999993,
2028
+ "duration": 0.05999999999999961
2029
+ },
2030
+ {
2031
+ "pitch": 58,
2032
+ "velocity": 39,
2033
+ "start": 6.539999999999993,
2034
+ "duration": 0.05999999999999961
2035
+ },
2036
+ {
2037
+ "pitch": 70,
2038
+ "velocity": 25,
2039
+ "start": 6.539999999999993,
2040
+ "duration": 0.05999999999999961
2041
+ },
2042
+ {
2043
+ "pitch": 77,
2044
+ "velocity": 27,
2045
+ "start": 6.539999999999993,
2046
+ "duration": 0.05999999999999961
2047
+ },
2048
+ {
2049
+ "pitch": 82,
2050
+ "velocity": 20,
2051
+ "start": 6.539999999999993,
2052
+ "duration": 0.05999999999999961
2053
+ },
2054
+ {
2055
+ "pitch": 95,
2056
+ "velocity": 8,
2057
+ "start": 6.539999999999993,
2058
+ "duration": 0.05999999999999961
2059
+ },
2060
+ {
2061
+ "pitch": 56,
2062
+ "velocity": 45,
2063
+ "start": 6.5999999999999925,
2064
+ "duration": 0.05999999999999961
2065
+ },
2066
+ {
2067
+ "pitch": 68,
2068
+ "velocity": 25,
2069
+ "start": 6.5999999999999925,
2070
+ "duration": 0.05999999999999961
2071
+ },
2072
+ {
2073
+ "pitch": 69,
2074
+ "velocity": 28,
2075
+ "start": 6.5999999999999925,
2076
+ "duration": 0.05999999999999961
2077
+ },
2078
+ {
2079
+ "pitch": 76,
2080
+ "velocity": 31,
2081
+ "start": 6.5999999999999925,
2082
+ "duration": 0.05999999999999961
2083
+ },
2084
+ {
2085
+ "pitch": 81,
2086
+ "velocity": 29,
2087
+ "start": 6.5999999999999925,
2088
+ "duration": 0.05999999999999961
2089
+ },
2090
+ {
2091
+ "pitch": 85,
2092
+ "velocity": 16,
2093
+ "start": 6.5999999999999925,
2094
+ "duration": 0.05999999999999961
2095
+ },
2096
+ {
2097
+ "pitch": 93,
2098
+ "velocity": 13,
2099
+ "start": 6.5999999999999925,
2100
+ "duration": 0.05999999999999961
2101
+ },
2102
+ {
2103
+ "pitch": 55,
2104
+ "velocity": 50,
2105
+ "start": 6.659999999999992,
2106
+ "duration": 0.05999999999999961
2107
+ },
2108
+ {
2109
+ "pitch": 67,
2110
+ "velocity": 32,
2111
+ "start": 6.659999999999992,
2112
+ "duration": 0.05999999999999961
2113
+ },
2114
+ {
2115
+ "pitch": 74,
2116
+ "velocity": 19,
2117
+ "start": 6.659999999999992,
2118
+ "duration": 0.05999999999999961
2119
+ },
2120
+ {
2121
+ "pitch": 79,
2122
+ "velocity": 29,
2123
+ "start": 6.659999999999992,
2124
+ "duration": 0.05999999999999961
2125
+ },
2126
+ {
2127
+ "pitch": 83,
2128
+ "velocity": 14,
2129
+ "start": 6.659999999999992,
2130
+ "duration": 0.05999999999999961
2131
+ },
2132
+ {
2133
+ "pitch": 84,
2134
+ "velocity": 14,
2135
+ "start": 6.659999999999992,
2136
+ "duration": 0.05999999999999961
2137
+ },
2138
+ {
2139
+ "pitch": 56,
2140
+ "velocity": 41,
2141
+ "start": 6.719999999999992,
2142
+ "duration": 0.05999999999999961
2143
+ },
2144
+ {
2145
+ "pitch": 68,
2146
+ "velocity": 27,
2147
+ "start": 6.719999999999992,
2148
+ "duration": 0.05999999999999961
2149
+ },
2150
+ {
2151
+ "pitch": 69,
2152
+ "velocity": 28,
2153
+ "start": 6.719999999999992,
2154
+ "duration": 0.05999999999999961
2155
+ },
2156
+ {
2157
+ "pitch": 76,
2158
+ "velocity": 29,
2159
+ "start": 6.719999999999992,
2160
+ "duration": 0.05999999999999961
2161
+ },
2162
+ {
2163
+ "pitch": 80,
2164
+ "velocity": 30,
2165
+ "start": 6.719999999999992,
2166
+ "duration": 0.05999999999999961
2167
+ },
2168
+ {
2169
+ "pitch": 82,
2170
+ "velocity": 17,
2171
+ "start": 6.719999999999992,
2172
+ "duration": 0.05999999999999961
2173
+ },
2174
+ {
2175
+ "pitch": 84,
2176
+ "velocity": 30,
2177
+ "start": 6.719999999999992,
2178
+ "duration": 0.05999999999999961
2179
+ },
2180
+ {
2181
+ "pitch": 59,
2182
+ "velocity": 32,
2183
+ "start": 6.779999999999991,
2184
+ "duration": 0.05999999999999961
2185
+ },
2186
+ {
2187
+ "pitch": 71,
2188
+ "velocity": 17,
2189
+ "start": 6.779999999999991,
2190
+ "duration": 0.05999999999999961
2191
+ },
2192
+ {
2193
+ "pitch": 78,
2194
+ "velocity": 15,
2195
+ "start": 6.779999999999991,
2196
+ "duration": 0.05999999999999961
2197
+ },
2198
+ {
2199
+ "pitch": 83,
2200
+ "velocity": 10,
2201
+ "start": 6.779999999999991,
2202
+ "duration": 0.05999999999999961
2203
+ },
2204
+ {
2205
+ "pitch": 86,
2206
+ "velocity": 8,
2207
+ "start": 6.779999999999991,
2208
+ "duration": 0.05999999999999961
2209
+ },
2210
+ {
2211
+ "pitch": 61,
2212
+ "velocity": 40,
2213
+ "start": 6.839999999999991,
2214
+ "duration": 0.05999999999999961
2215
+ },
2216
+ {
2217
+ "pitch": 73,
2218
+ "velocity": 31,
2219
+ "start": 6.839999999999991,
2220
+ "duration": 0.05999999999999961
2221
+ },
2222
+ {
2223
+ "pitch": 76,
2224
+ "velocity": 18,
2225
+ "start": 6.839999999999991,
2226
+ "duration": 0.05999999999999961
2227
+ },
2228
+ {
2229
+ "pitch": 79,
2230
+ "velocity": 41,
2231
+ "start": 6.839999999999991,
2232
+ "duration": 0.05999999999999961
2233
+ },
2234
+ {
2235
+ "pitch": 84,
2236
+ "velocity": 30,
2237
+ "start": 6.839999999999991,
2238
+ "duration": 0.05999999999999961
2239
+ },
2240
+ {
2241
+ "pitch": 88,
2242
+ "velocity": 26,
2243
+ "start": 6.839999999999991,
2244
+ "duration": 0.05999999999999961
2245
+ },
2246
+ {
2247
+ "pitch": 89,
2248
+ "velocity": 14,
2249
+ "start": 6.839999999999991,
2250
+ "duration": 0.05999999999999961
2251
+ },
2252
+ {
2253
+ "pitch": 91,
2254
+ "velocity": 22,
2255
+ "start": 6.839999999999991,
2256
+ "duration": 0.05999999999999961
2257
+ },
2258
+ {
2259
+ "pitch": 61,
2260
+ "velocity": 49,
2261
+ "start": 6.899999999999991,
2262
+ "duration": 0.05999999999999961
2263
+ },
2264
+ {
2265
+ "pitch": 72,
2266
+ "velocity": 32,
2267
+ "start": 6.899999999999991,
2268
+ "duration": 0.05999999999999961
2269
+ },
2270
+ {
2271
+ "pitch": 79,
2272
+ "velocity": 45,
2273
+ "start": 6.899999999999991,
2274
+ "duration": 0.05999999999999961
2275
+ },
2276
+ {
2277
+ "pitch": 84,
2278
+ "velocity": 36,
2279
+ "start": 6.899999999999991,
2280
+ "duration": 0.05999999999999961
2281
+ },
2282
+ {
2283
+ "pitch": 88,
2284
+ "velocity": 30,
2285
+ "start": 6.899999999999991,
2286
+ "duration": 0.05999999999999961
2287
+ },
2288
+ {
2289
+ "pitch": 91,
2290
+ "velocity": 16,
2291
+ "start": 6.899999999999991,
2292
+ "duration": 0.05999999999999961
2293
+ },
2294
+ {
2295
+ "pitch": 60,
2296
+ "velocity": 45,
2297
+ "start": 6.95999999999999,
2298
+ "duration": 0.05999999999999961
2299
+ },
2300
+ {
2301
+ "pitch": 70,
2302
+ "velocity": 19,
2303
+ "start": 6.95999999999999,
2304
+ "duration": 0.05999999999999961
2305
+ },
2306
+ {
2307
+ "pitch": 71,
2308
+ "velocity": 20,
2309
+ "start": 6.95999999999999,
2310
+ "duration": 0.05999999999999961
2311
+ },
2312
+ {
2313
+ "pitch": 72,
2314
+ "velocity": 21,
2315
+ "start": 6.95999999999999,
2316
+ "duration": 0.05999999999999961
2317
+ },
2318
+ {
2319
+ "pitch": 79,
2320
+ "velocity": 32,
2321
+ "start": 6.95999999999999,
2322
+ "duration": 0.05999999999999961
2323
+ },
2324
+ {
2325
+ "pitch": 81,
2326
+ "velocity": 16,
2327
+ "start": 6.95999999999999,
2328
+ "duration": 0.05999999999999961
2329
+ },
2330
+ {
2331
+ "pitch": 84,
2332
+ "velocity": 13,
2333
+ "start": 6.95999999999999,
2334
+ "duration": 0.05999999999999961
2335
+ },
2336
+ {
2337
+ "pitch": 51,
2338
+ "velocity": 34,
2339
+ "start": 7.01999999999999,
2340
+ "duration": 0.05999999999999961
2341
+ },
2342
+ {
2343
+ "pitch": 53,
2344
+ "velocity": 32,
2345
+ "start": 7.01999999999999,
2346
+ "duration": 0.05999999999999961
2347
+ },
2348
+ {
2349
+ "pitch": 62,
2350
+ "velocity": 30,
2351
+ "start": 7.01999999999999,
2352
+ "duration": 0.05999999999999961
2353
+ },
2354
+ {
2355
+ "pitch": 65,
2356
+ "velocity": 21,
2357
+ "start": 7.01999999999999,
2358
+ "duration": 0.05999999999999961
2359
+ },
2360
+ {
2361
+ "pitch": 69,
2362
+ "velocity": 21,
2363
+ "start": 7.01999999999999,
2364
+ "duration": 0.05999999999999961
2365
+ },
2366
+ {
2367
+ "pitch": 70,
2368
+ "velocity": 21,
2369
+ "start": 7.01999999999999,
2370
+ "duration": 0.05999999999999961
2371
+ },
2372
+ {
2373
+ "pitch": 80,
2374
+ "velocity": 18,
2375
+ "start": 7.01999999999999,
2376
+ "duration": 0.05999999999999961
2377
+ },
2378
+ {
2379
+ "pitch": 81,
2380
+ "velocity": 19,
2381
+ "start": 7.01999999999999,
2382
+ "duration": 0.05999999999999961
2383
+ },
2384
+ {
2385
+ "pitch": 51,
2386
+ "velocity": 20,
2387
+ "start": 7.079999999999989,
2388
+ "duration": 0.05999999999999961
2389
+ },
2390
+ {
2391
+ "pitch": 94,
2392
+ "velocity": 14,
2393
+ "start": 7.079999999999989,
2394
+ "duration": 0.05999999999999961
2395
+ },
2396
+ {
2397
+ "pitch": 96,
2398
+ "velocity": 13,
2399
+ "start": 7.079999999999989,
2400
+ "duration": 0.05999999999999961
2401
+ },
2402
+ {
2403
+ "pitch": 106,
2404
+ "velocity": 12,
2405
+ "start": 7.079999999999989,
2406
+ "duration": 0.05999999999999961
2407
+ },
2408
+ {
2409
+ "pitch": 107,
2410
+ "velocity": 15,
2411
+ "start": 7.079999999999989,
2412
+ "duration": 0.05999999999999961
2413
+ },
2414
+ {
2415
+ "pitch": 57,
2416
+ "velocity": 24,
2417
+ "start": 7.139999999999989,
2418
+ "duration": 0.05999999999999961
2419
+ },
2420
+ {
2421
+ "pitch": 92,
2422
+ "velocity": 17,
2423
+ "start": 7.139999999999989,
2424
+ "duration": 0.05999999999999961
2425
+ },
2426
+ {
2427
+ "pitch": 93,
2428
+ "velocity": 14,
2429
+ "start": 7.139999999999989,
2430
+ "duration": 0.05999999999999961
2431
+ },
2432
+ {
2433
+ "pitch": 94,
2434
+ "velocity": 14,
2435
+ "start": 7.139999999999989,
2436
+ "duration": 0.05999999999999961
2437
+ },
2438
+ {
2439
+ "pitch": 95,
2440
+ "velocity": 14,
2441
+ "start": 7.139999999999989,
2442
+ "duration": 0.05999999999999961
2443
+ },
2444
+ {
2445
+ "pitch": 106,
2446
+ "velocity": 14,
2447
+ "start": 7.139999999999989,
2448
+ "duration": 0.05999999999999961
2449
+ },
2450
+ {
2451
+ "pitch": 57,
2452
+ "velocity": 45,
2453
+ "start": 7.199999999999989,
2454
+ "duration": 0.05999999999999961
2455
+ },
2456
+ {
2457
+ "pitch": 61,
2458
+ "velocity": 10,
2459
+ "start": 7.199999999999989,
2460
+ "duration": 0.05999999999999961
2461
+ },
2462
+ {
2463
+ "pitch": 70,
2464
+ "velocity": 36,
2465
+ "start": 7.199999999999989,
2466
+ "duration": 0.05999999999999961
2467
+ },
2468
+ {
2469
+ "pitch": 77,
2470
+ "velocity": 27,
2471
+ "start": 7.199999999999989,
2472
+ "duration": 0.05999999999999961
2473
+ },
2474
+ {
2475
+ "pitch": 82,
2476
+ "velocity": 27,
2477
+ "start": 7.199999999999989,
2478
+ "duration": 0.05999999999999961
2479
+ },
2480
+ {
2481
+ "pitch": 85,
2482
+ "velocity": 23,
2483
+ "start": 7.199999999999989,
2484
+ "duration": 0.05999999999999961
2485
+ },
2486
+ {
2487
+ "pitch": 88,
2488
+ "velocity": 12,
2489
+ "start": 7.199999999999989,
2490
+ "duration": 0.05999999999999961
2491
+ },
2492
+ {
2493
+ "pitch": 57,
2494
+ "velocity": 33,
2495
+ "start": 7.259999999999988,
2496
+ "duration": 0.05999999999999961
2497
+ },
2498
+ {
2499
+ "pitch": 70,
2500
+ "velocity": 18,
2501
+ "start": 7.259999999999988,
2502
+ "duration": 0.05999999999999961
2503
+ },
2504
+ {
2505
+ "pitch": 77,
2506
+ "velocity": 13,
2507
+ "start": 7.259999999999988,
2508
+ "duration": 0.05999999999999961
2509
+ },
2510
+ {
2511
+ "pitch": 81,
2512
+ "velocity": 14,
2513
+ "start": 7.259999999999988,
2514
+ "duration": 0.05999999999999961
2515
+ },
2516
+ {
2517
+ "pitch": 82,
2518
+ "velocity": 21,
2519
+ "start": 7.259999999999988,
2520
+ "duration": 0.05999999999999961
2521
+ },
2522
+ {
2523
+ "pitch": 83,
2524
+ "velocity": 18,
2525
+ "start": 7.259999999999988,
2526
+ "duration": 0.05999999999999961
2527
+ },
2528
+ {
2529
+ "pitch": 85,
2530
+ "velocity": 17,
2531
+ "start": 7.259999999999988,
2532
+ "duration": 0.05999999999999961
2533
+ },
2534
+ {
2535
+ "pitch": 86,
2536
+ "velocity": 14,
2537
+ "start": 7.259999999999988,
2538
+ "duration": 0.05999999999999961
2539
+ },
2540
+ {
2541
+ "pitch": 61,
2542
+ "velocity": 21,
2543
+ "start": 7.319999999999988,
2544
+ "duration": 0.05999999999999961
2545
+ },
2546
+ {
2547
+ "pitch": 73,
2548
+ "velocity": 12,
2549
+ "start": 7.319999999999988,
2550
+ "duration": 0.05999999999999961
2551
+ },
2552
+ {
2553
+ "pitch": 80,
2554
+ "velocity": 18,
2555
+ "start": 7.319999999999988,
2556
+ "duration": 0.05999999999999961
2557
+ },
2558
+ {
2559
+ "pitch": 81,
2560
+ "velocity": 18,
2561
+ "start": 7.319999999999988,
2562
+ "duration": 0.05999999999999961
2563
+ },
2564
+ {
2565
+ "pitch": 82,
2566
+ "velocity": 19,
2567
+ "start": 7.319999999999988,
2568
+ "duration": 0.05999999999999961
2569
+ },
2570
+ {
2571
+ "pitch": 83,
2572
+ "velocity": 11,
2573
+ "start": 7.319999999999988,
2574
+ "duration": 0.05999999999999961
2575
+ },
2576
+ {
2577
+ "pitch": 85,
2578
+ "velocity": 15,
2579
+ "start": 7.319999999999988,
2580
+ "duration": 0.05999999999999961
2581
+ },
2582
+ {
2583
+ "pitch": 61,
2584
+ "velocity": 37,
2585
+ "start": 7.3799999999999875,
2586
+ "duration": 0.05999999999999961
2587
+ },
2588
+ {
2589
+ "pitch": 73,
2590
+ "velocity": 25,
2591
+ "start": 7.3799999999999875,
2592
+ "duration": 0.05999999999999961
2593
+ },
2594
+ {
2595
+ "pitch": 80,
2596
+ "velocity": 32,
2597
+ "start": 7.3799999999999875,
2598
+ "duration": 0.05999999999999961
2599
+ },
2600
+ {
2601
+ "pitch": 81,
2602
+ "velocity": 16,
2603
+ "start": 7.3799999999999875,
2604
+ "duration": 0.05999999999999961
2605
+ },
2606
+ {
2607
+ "pitch": 85,
2608
+ "velocity": 34,
2609
+ "start": 7.3799999999999875,
2610
+ "duration": 0.05999999999999961
2611
+ },
2612
+ {
2613
+ "pitch": 89,
2614
+ "velocity": 20,
2615
+ "start": 7.3799999999999875,
2616
+ "duration": 0.05999999999999961
2617
+ },
2618
+ {
2619
+ "pitch": 92,
2620
+ "velocity": 19,
2621
+ "start": 7.3799999999999875,
2622
+ "duration": 0.05999999999999961
2623
+ },
2624
+ {
2625
+ "pitch": 93,
2626
+ "velocity": 15,
2627
+ "start": 7.3799999999999875,
2628
+ "duration": 0.05999999999999961
2629
+ },
2630
+ {
2631
+ "pitch": 58,
2632
+ "velocity": 26,
2633
+ "start": 7.439999999999987,
2634
+ "duration": 0.05999999999999961
2635
+ },
2636
+ {
2637
+ "pitch": 84,
2638
+ "velocity": 13,
2639
+ "start": 7.439999999999987,
2640
+ "duration": 0.05999999999999961
2641
+ },
2642
+ {
2643
+ "pitch": 85,
2644
+ "velocity": 18,
2645
+ "start": 7.439999999999987,
2646
+ "duration": 0.05999999999999961
2647
+ },
2648
+ {
2649
+ "pitch": 86,
2650
+ "velocity": 17,
2651
+ "start": 7.439999999999987,
2652
+ "duration": 0.05999999999999961
2653
+ },
2654
+ {
2655
+ "pitch": 87,
2656
+ "velocity": 17,
2657
+ "start": 7.439999999999987,
2658
+ "duration": 0.05999999999999961
2659
+ },
2660
+ {
2661
+ "pitch": 93,
2662
+ "velocity": 20,
2663
+ "start": 7.439999999999987,
2664
+ "duration": 0.05999999999999961
2665
+ },
2666
+ {
2667
+ "pitch": 94,
2668
+ "velocity": 16,
2669
+ "start": 7.439999999999987,
2670
+ "duration": 0.05999999999999961
2671
+ }
2672
+ ]
examples/zh/baseline.mid ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:68bdd5fb7ac113d0bb98162e1b9e81fff2da4e878eb575814746caf7d56478f2
3
+ size 2884
examples/zh/baseline.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a1b0aaa621365a5c584e3db944faa19534ce05d7cc989f29d72f46b285133a8c
3
+ size 777680
examples/zh/dictionary.json ADDED
@@ -0,0 +1,740 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "pitch": 101,
4
+ "velocity": 45,
5
+ "start": 0.1,
6
+ "duration": 0.06
7
+ },
8
+ {
9
+ "pitch": 64,
10
+ "velocity": 45,
11
+ "start": 0.11,
12
+ "duration": 0.06000000000000001
13
+ },
14
+ {
15
+ "pitch": 62,
16
+ "velocity": 45,
17
+ "start": 0.12,
18
+ "duration": 0.060000000000000026
19
+ },
20
+ {
21
+ "pitch": 61,
22
+ "velocity": 45,
23
+ "start": 0.13999999999999999,
24
+ "duration": 0.060000000000000026
25
+ },
26
+ {
27
+ "pitch": 104,
28
+ "velocity": 45,
29
+ "start": 0.15,
30
+ "duration": 0.060000000000000026
31
+ },
32
+ {
33
+ "pitch": 103,
34
+ "velocity": 75,
35
+ "start": 0.24000000000000002,
36
+ "duration": 0.060000000000000026
37
+ },
38
+ {
39
+ "pitch": 98,
40
+ "velocity": 45,
41
+ "start": 0.27,
42
+ "duration": 0.06000000000000005
43
+ },
44
+ {
45
+ "pitch": 59,
46
+ "velocity": 105,
47
+ "start": 0.26,
48
+ "duration": 0.2400000000000001
49
+ },
50
+ {
51
+ "pitch": 97,
52
+ "velocity": 45,
53
+ "start": 0.4100000000000001,
54
+ "duration": 0.12000000000000005
55
+ },
56
+ {
57
+ "pitch": 58,
58
+ "velocity": 45,
59
+ "start": 0.33000000000000007,
60
+ "duration": 0.2400000000000001
61
+ },
62
+ {
63
+ "pitch": 75,
64
+ "velocity": 45,
65
+ "start": 0.5100000000000001,
66
+ "duration": 0.06000000000000005
67
+ },
68
+ {
69
+ "pitch": 80,
70
+ "velocity": 75,
71
+ "start": 0.5400000000000001,
72
+ "duration": 0.06000000000000005
73
+ },
74
+ {
75
+ "pitch": 56,
76
+ "velocity": 105,
77
+ "start": 0.5100000000000001,
78
+ "duration": 0.1200000000000001
79
+ },
80
+ {
81
+ "pitch": 104,
82
+ "velocity": 45,
83
+ "start": 0.5700000000000002,
84
+ "duration": 0.06000000000000005
85
+ },
86
+ {
87
+ "pitch": 81,
88
+ "velocity": 45,
89
+ "start": 0.5800000000000002,
90
+ "duration": 0.06000000000000005
91
+ },
92
+ {
93
+ "pitch": 83,
94
+ "velocity": 45,
95
+ "start": 0.7000000000000002,
96
+ "duration": 0.06000000000000005
97
+ },
98
+ {
99
+ "pitch": 78,
100
+ "velocity": 75,
101
+ "start": 0.7900000000000003,
102
+ "duration": 0.06000000000000005
103
+ },
104
+ {
105
+ "pitch": 87,
106
+ "velocity": 45,
107
+ "start": 0.7400000000000002,
108
+ "duration": 0.1200000000000001
109
+ },
110
+ {
111
+ "pitch": 83,
112
+ "velocity": 45,
113
+ "start": 0.7600000000000002,
114
+ "duration": 0.1200000000000001
115
+ },
116
+ {
117
+ "pitch": 103,
118
+ "velocity": 45,
119
+ "start": 0.8400000000000003,
120
+ "duration": 0.06000000000000005
121
+ },
122
+ {
123
+ "pitch": 59,
124
+ "velocity": 105,
125
+ "start": 0.7300000000000002,
126
+ "duration": 0.2400000000000002
127
+ },
128
+ {
129
+ "pitch": 102,
130
+ "velocity": 45,
131
+ "start": 0.9900000000000004,
132
+ "duration": 0.06000000000000005
133
+ },
134
+ {
135
+ "pitch": 59,
136
+ "velocity": 75,
137
+ "start": 1.0500000000000005,
138
+ "duration": 0.06000000000000005
139
+ },
140
+ {
141
+ "pitch": 83,
142
+ "velocity": 45,
143
+ "start": 1.0500000000000005,
144
+ "duration": 0.06000000000000005
145
+ },
146
+ {
147
+ "pitch": 78,
148
+ "velocity": 45,
149
+ "start": 1.0600000000000005,
150
+ "duration": 0.06000000000000005
151
+ },
152
+ {
153
+ "pitch": 82,
154
+ "velocity": 45,
155
+ "start": 1.0700000000000005,
156
+ "duration": 0.06000000000000005
157
+ },
158
+ {
159
+ "pitch": 92,
160
+ "velocity": 45,
161
+ "start": 1.0800000000000005,
162
+ "duration": 0.06000000000000005
163
+ },
164
+ {
165
+ "pitch": 107,
166
+ "velocity": 105,
167
+ "start": 1.0100000000000005,
168
+ "duration": 0.2400000000000002
169
+ },
170
+ {
171
+ "pitch": 55,
172
+ "velocity": 45,
173
+ "start": 1.2200000000000006,
174
+ "duration": 0.06000000000000005
175
+ },
176
+ {
177
+ "pitch": 103,
178
+ "velocity": 45,
179
+ "start": 1.2200000000000006,
180
+ "duration": 0.06000000000000005
181
+ },
182
+ {
183
+ "pitch": 97,
184
+ "velocity": 45,
185
+ "start": 1.2900000000000007,
186
+ "duration": 0.06000000000000005
187
+ },
188
+ {
189
+ "pitch": 57,
190
+ "velocity": 45,
191
+ "start": 1.1200000000000006,
192
+ "duration": 0.2400000000000002
193
+ },
194
+ {
195
+ "pitch": 98,
196
+ "velocity": 45,
197
+ "start": 1.3300000000000007,
198
+ "duration": 0.06000000000000005
199
+ },
200
+ {
201
+ "pitch": 104,
202
+ "velocity": 45,
203
+ "start": 1.3500000000000008,
204
+ "duration": 0.06000000000000005
205
+ },
206
+ {
207
+ "pitch": 83,
208
+ "velocity": 45,
209
+ "start": 1.3900000000000008,
210
+ "duration": 0.06000000000000005
211
+ },
212
+ {
213
+ "pitch": 87,
214
+ "velocity": 45,
215
+ "start": 1.4100000000000008,
216
+ "duration": 0.06000000000000005
217
+ },
218
+ {
219
+ "pitch": 59,
220
+ "velocity": 75,
221
+ "start": 1.3800000000000008,
222
+ "duration": 0.1200000000000001
223
+ },
224
+ {
225
+ "pitch": 61,
226
+ "velocity": 45,
227
+ "start": 1.4700000000000009,
228
+ "duration": 0.06000000000000005
229
+ },
230
+ {
231
+ "pitch": 108,
232
+ "velocity": 75,
233
+ "start": 1.3100000000000007,
234
+ "duration": 0.2400000000000002
235
+ },
236
+ {
237
+ "pitch": 79,
238
+ "velocity": 45,
239
+ "start": 1.4200000000000008,
240
+ "duration": 0.2400000000000002
241
+ },
242
+ {
243
+ "pitch": 54,
244
+ "velocity": 75,
245
+ "start": 1.620000000000001,
246
+ "duration": 0.06000000000000005
247
+ },
248
+ {
249
+ "pitch": 81,
250
+ "velocity": 45,
251
+ "start": 1.560000000000001,
252
+ "duration": 0.1200000000000001
253
+ },
254
+ {
255
+ "pitch": 68,
256
+ "velocity": 45,
257
+ "start": 1.630000000000001,
258
+ "duration": 0.06000000000000005
259
+ },
260
+ {
261
+ "pitch": 52,
262
+ "velocity": 45,
263
+ "start": 1.650000000000001,
264
+ "duration": 0.06000000000000005
265
+ },
266
+ {
267
+ "pitch": 104,
268
+ "velocity": 45,
269
+ "start": 2.490000000000001,
270
+ "duration": 0.06000000000000005
271
+ },
272
+ {
273
+ "pitch": 60,
274
+ "velocity": 75,
275
+ "start": 2.4400000000000013,
276
+ "duration": 0.11999999999999966
277
+ },
278
+ {
279
+ "pitch": 59,
280
+ "velocity": 45,
281
+ "start": 2.530000000000001,
282
+ "duration": 0.05999999999999961
283
+ },
284
+ {
285
+ "pitch": 103,
286
+ "velocity": 45,
287
+ "start": 2.530000000000001,
288
+ "duration": 0.05999999999999961
289
+ },
290
+ {
291
+ "pitch": 107,
292
+ "velocity": 45,
293
+ "start": 2.6000000000000005,
294
+ "duration": 0.06000000000000005
295
+ },
296
+ {
297
+ "pitch": 80,
298
+ "velocity": 45,
299
+ "start": 2.6700000000000004,
300
+ "duration": 0.05999999999999961
301
+ },
302
+ {
303
+ "pitch": 60,
304
+ "velocity": 105,
305
+ "start": 2.7,
306
+ "duration": 0.05999999999999961
307
+ },
308
+ {
309
+ "pitch": 79,
310
+ "velocity": 45,
311
+ "start": 2.71,
312
+ "duration": 0.05999999999999961
313
+ },
314
+ {
315
+ "pitch": 59,
316
+ "velocity": 45,
317
+ "start": 2.8099999999999996,
318
+ "duration": 0.06000000000000005
319
+ },
320
+ {
321
+ "pitch": 63,
322
+ "velocity": 45,
323
+ "start": 2.9899999999999998,
324
+ "duration": 0.05999999999999961
325
+ },
326
+ {
327
+ "pitch": 61,
328
+ "velocity": 45,
329
+ "start": 2.9999999999999996,
330
+ "duration": 0.05999999999999961
331
+ },
332
+ {
333
+ "pitch": 107,
334
+ "velocity": 75,
335
+ "start": 2.9499999999999997,
336
+ "duration": 0.23999999999999932
337
+ },
338
+ {
339
+ "pitch": 102,
340
+ "velocity": 45,
341
+ "start": 3.1399999999999992,
342
+ "duration": 0.05999999999999961
343
+ },
344
+ {
345
+ "pitch": 105,
346
+ "velocity": 45,
347
+ "start": 3.1399999999999992,
348
+ "duration": 0.05999999999999961
349
+ },
350
+ {
351
+ "pitch": 96,
352
+ "velocity": 45,
353
+ "start": 3.2699999999999987,
354
+ "duration": 0.06000000000000005
355
+ },
356
+ {
357
+ "pitch": 95,
358
+ "velocity": 45,
359
+ "start": 3.2899999999999987,
360
+ "duration": 0.06000000000000005
361
+ },
362
+ {
363
+ "pitch": 80,
364
+ "velocity": 45,
365
+ "start": 3.3499999999999988,
366
+ "duration": 0.05999999999999961
367
+ },
368
+ {
369
+ "pitch": 107,
370
+ "velocity": 75,
371
+ "start": 3.2899999999999987,
372
+ "duration": 0.11999999999999966
373
+ },
374
+ {
375
+ "pitch": 62,
376
+ "velocity": 45,
377
+ "start": 3.3599999999999985,
378
+ "duration": 0.05999999999999961
379
+ },
380
+ {
381
+ "pitch": 61,
382
+ "velocity": 45,
383
+ "start": 3.189999999999999,
384
+ "duration": 0.23999999999999888
385
+ },
386
+ {
387
+ "pitch": 99,
388
+ "velocity": 45,
389
+ "start": 3.3899999999999983,
390
+ "duration": 0.05999999999999961
391
+ },
392
+ {
393
+ "pitch": 59,
394
+ "velocity": 75,
395
+ "start": 3.519999999999998,
396
+ "duration": 0.06000000000000005
397
+ },
398
+ {
399
+ "pitch": 54,
400
+ "velocity": 45,
401
+ "start": 3.559999999999998,
402
+ "duration": 0.06000000000000005
403
+ },
404
+ {
405
+ "pitch": 69,
406
+ "velocity": 45,
407
+ "start": 3.559999999999998,
408
+ "duration": 0.06000000000000005
409
+ },
410
+ {
411
+ "pitch": 108,
412
+ "velocity": 45,
413
+ "start": 4.069999999999998,
414
+ "duration": 0.05999999999999961
415
+ },
416
+ {
417
+ "pitch": 104,
418
+ "velocity": 45,
419
+ "start": 4.579999999999997,
420
+ "duration": 0.05999999999999872
421
+ },
422
+ {
423
+ "pitch": 61,
424
+ "velocity": 45,
425
+ "start": 4.599999999999997,
426
+ "duration": 0.05999999999999872
427
+ },
428
+ {
429
+ "pitch": 81,
430
+ "velocity": 45,
431
+ "start": 4.609999999999997,
432
+ "duration": 0.05999999999999872
433
+ },
434
+ {
435
+ "pitch": 64,
436
+ "velocity": 45,
437
+ "start": 4.629999999999996,
438
+ "duration": 0.05999999999999872
439
+ },
440
+ {
441
+ "pitch": 63,
442
+ "velocity": 45,
443
+ "start": 4.589999999999997,
444
+ "duration": 0.11999999999999744
445
+ },
446
+ {
447
+ "pitch": 55,
448
+ "velocity": 45,
449
+ "start": 4.769999999999994,
450
+ "duration": 0.05999999999999961
451
+ },
452
+ {
453
+ "pitch": 56,
454
+ "velocity": 45,
455
+ "start": 4.779999999999994,
456
+ "duration": 0.05999999999999961
457
+ },
458
+ {
459
+ "pitch": 100,
460
+ "velocity": 45,
461
+ "start": 4.809999999999994,
462
+ "duration": 0.05999999999999961
463
+ },
464
+ {
465
+ "pitch": 107,
466
+ "velocity": 75,
467
+ "start": 5.049999999999994,
468
+ "duration": 0.05999999999999961
469
+ },
470
+ {
471
+ "pitch": 59,
472
+ "velocity": 75,
473
+ "start": 4.919999999999994,
474
+ "duration": 0.23999999999999932
475
+ },
476
+ {
477
+ "pitch": 103,
478
+ "velocity": 45,
479
+ "start": 5.119999999999993,
480
+ "duration": 0.05999999999999961
481
+ },
482
+ {
483
+ "pitch": 102,
484
+ "velocity": 45,
485
+ "start": 4.949999999999994,
486
+ "duration": 0.23999999999999844
487
+ },
488
+ {
489
+ "pitch": 104,
490
+ "velocity": 45,
491
+ "start": 5.129999999999993,
492
+ "duration": 0.05999999999999961
493
+ },
494
+ {
495
+ "pitch": 61,
496
+ "velocity": 45,
497
+ "start": 5.109999999999993,
498
+ "duration": 0.11999999999999922
499
+ },
500
+ {
501
+ "pitch": 95,
502
+ "velocity": 45,
503
+ "start": 5.899999999999992,
504
+ "duration": 0.05999999999999872
505
+ },
506
+ {
507
+ "pitch": 59,
508
+ "velocity": 105,
509
+ "start": 5.919999999999992,
510
+ "duration": 0.05999999999999872
511
+ },
512
+ {
513
+ "pitch": 83,
514
+ "velocity": 45,
515
+ "start": 5.919999999999992,
516
+ "duration": 0.05999999999999872
517
+ },
518
+ {
519
+ "pitch": 78,
520
+ "velocity": 75,
521
+ "start": 5.929999999999992,
522
+ "duration": 0.05999999999999872
523
+ },
524
+ {
525
+ "pitch": 80,
526
+ "velocity": 45,
527
+ "start": 5.949999999999991,
528
+ "duration": 0.05999999999999872
529
+ },
530
+ {
531
+ "pitch": 93,
532
+ "velocity": 45,
533
+ "start": 5.959999999999991,
534
+ "duration": 0.05999999999999872
535
+ },
536
+ {
537
+ "pitch": 61,
538
+ "velocity": 45,
539
+ "start": 5.99999999999999,
540
+ "duration": 0.05999999999999961
541
+ },
542
+ {
543
+ "pitch": 55,
544
+ "velocity": 45,
545
+ "start": 6.2399999999999896,
546
+ "duration": 0.05999999999999961
547
+ },
548
+ {
549
+ "pitch": 57,
550
+ "velocity": 45,
551
+ "start": 6.079999999999989,
552
+ "duration": 0.23999999999999932
553
+ },
554
+ {
555
+ "pitch": 56,
556
+ "velocity": 75,
557
+ "start": 6.209999999999989,
558
+ "duration": 0.11999999999999922
559
+ },
560
+ {
561
+ "pitch": 108,
562
+ "velocity": 105,
563
+ "start": 6.419999999999988,
564
+ "duration": 0.05999999999999961
565
+ },
566
+ {
567
+ "pitch": 61,
568
+ "velocity": 45,
569
+ "start": 6.429999999999988,
570
+ "duration": 0.05999999999999961
571
+ },
572
+ {
573
+ "pitch": 60,
574
+ "velocity": 75,
575
+ "start": 6.449999999999988,
576
+ "duration": 0.05999999999999961
577
+ },
578
+ {
579
+ "pitch": 77,
580
+ "velocity": 45,
581
+ "start": 6.559999999999987,
582
+ "duration": 0.05999999999999872
583
+ },
584
+ {
585
+ "pitch": 80,
586
+ "velocity": 45,
587
+ "start": 6.5899999999999865,
588
+ "duration": 0.11999999999999833
589
+ },
590
+ {
591
+ "pitch": 55,
592
+ "velocity": 45,
593
+ "start": 6.609999999999986,
594
+ "duration": 0.11999999999999833
595
+ },
596
+ {
597
+ "pitch": 79,
598
+ "velocity": 45,
599
+ "start": 6.6799999999999855,
600
+ "duration": 0.05999999999999872
601
+ },
602
+ {
603
+ "pitch": 63,
604
+ "velocity": 45,
605
+ "start": 6.699999999999985,
606
+ "duration": 0.05999999999999872
607
+ },
608
+ {
609
+ "pitch": 86,
610
+ "velocity": 45,
611
+ "start": 6.739999999999984,
612
+ "duration": 0.05999999999999961
613
+ },
614
+ {
615
+ "pitch": 57,
616
+ "velocity": 105,
617
+ "start": 6.569999999999987,
618
+ "duration": 0.23999999999999666
619
+ },
620
+ {
621
+ "pitch": 60,
622
+ "velocity": 105,
623
+ "start": 6.849999999999984,
624
+ "duration": 0.05999999999999961
625
+ },
626
+ {
627
+ "pitch": 108,
628
+ "velocity": 45,
629
+ "start": 6.869999999999983,
630
+ "duration": 0.05999999999999961
631
+ },
632
+ {
633
+ "pitch": 80,
634
+ "velocity": 45,
635
+ "start": 6.719999999999985,
636
+ "duration": 0.23999999999999844
637
+ },
638
+ {
639
+ "pitch": 84,
640
+ "velocity": 45,
641
+ "start": 6.719999999999985,
642
+ "duration": 0.23999999999999844
643
+ },
644
+ {
645
+ "pitch": 79,
646
+ "velocity": 75,
647
+ "start": 6.8599999999999834,
648
+ "duration": 0.11999999999999922
649
+ },
650
+ {
651
+ "pitch": 55,
652
+ "velocity": 45,
653
+ "start": 6.969999999999983,
654
+ "duration": 0.05999999999999961
655
+ },
656
+ {
657
+ "pitch": 51,
658
+ "velocity": 75,
659
+ "start": 7.009999999999983,
660
+ "duration": 0.05999999999999961
661
+ },
662
+ {
663
+ "pitch": 81,
664
+ "velocity": 45,
665
+ "start": 6.849999999999984,
666
+ "duration": 0.23999999999999844
667
+ },
668
+ {
669
+ "pitch": 94,
670
+ "velocity": 45,
671
+ "start": 7.079999999999982,
672
+ "duration": 0.05999999999999961
673
+ },
674
+ {
675
+ "pitch": 107,
676
+ "velocity": 75,
677
+ "start": 7.099999999999982,
678
+ "duration": 0.05999999999999961
679
+ },
680
+ {
681
+ "pitch": 108,
682
+ "velocity": 75,
683
+ "start": 7.139999999999982,
684
+ "duration": 0.05999999999999872
685
+ },
686
+ {
687
+ "pitch": 81,
688
+ "velocity": 45,
689
+ "start": 7.21999999999998,
690
+ "duration": 0.05999999999999961
691
+ },
692
+ {
693
+ "pitch": 80,
694
+ "velocity": 45,
695
+ "start": 7.32999999999998,
696
+ "duration": 0.05999999999999872
697
+ },
698
+ {
699
+ "pitch": 61,
700
+ "velocity": 45,
701
+ "start": 7.349999999999979,
702
+ "duration": 0.05999999999999872
703
+ },
704
+ {
705
+ "pitch": 58,
706
+ "velocity": 75,
707
+ "start": 7.179999999999981,
708
+ "duration": 0.23999999999999666
709
+ },
710
+ {
711
+ "pitch": 85,
712
+ "velocity": 45,
713
+ "start": 7.359999999999979,
714
+ "duration": 0.05999999999999872
715
+ },
716
+ {
717
+ "pitch": 79,
718
+ "velocity": 45,
719
+ "start": 7.369999999999979,
720
+ "duration": 0.05999999999999872
721
+ },
722
+ {
723
+ "pitch": 84,
724
+ "velocity": 75,
725
+ "start": 7.379999999999979,
726
+ "duration": 0.05999999999999872
727
+ },
728
+ {
729
+ "pitch": 87,
730
+ "velocity": 45,
731
+ "start": 7.399999999999978,
732
+ "duration": 0.05999999999999872
733
+ },
734
+ {
735
+ "pitch": 93,
736
+ "velocity": 45,
737
+ "start": 7.419999999999978,
738
+ "duration": 0.05999999999999872
739
+ }
740
+ ]
examples/zh/dictionary.mid ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:680f52b1fcc2162f8a5c48f62ed2e0b6c5f7f144d5c01c39b8223428998f062e
3
+ size 898
examples/zh/dictionary.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2ede3a5f1b26c8ae602da5c2b80e6de747021a2b00b4fbc7c50c9d4498467de2
3
+ size 777680
examples/zh/metrics.json ADDED
@@ -0,0 +1,333 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "input": "examples/zh/source.wav",
3
+ "seconds": 7.6,
4
+ "renderer": {
5
+ "soundfont_sha256": "5b85b6c2c61d10b2b91cddd41efcce7b25cd31c8271d511c73afafbef20b6fa3",
6
+ "sr": 24000,
7
+ "hop": 240,
8
+ "nfft": 2048,
9
+ "preset_name": "Grand Piano",
10
+ "renderer_library_sha256": "6ef97148241a3c529ad1a528631a3610aa5ec75f3846ba5534cb494ddbe6812c",
11
+ "pitches": [
12
+ 36,
13
+ 37,
14
+ 38,
15
+ 39,
16
+ 40,
17
+ 41,
18
+ 42,
19
+ 43,
20
+ 44,
21
+ 45,
22
+ 46,
23
+ 47,
24
+ 48,
25
+ 49,
26
+ 50,
27
+ 51,
28
+ 52,
29
+ 53,
30
+ 54,
31
+ 55,
32
+ 56,
33
+ 57,
34
+ 58,
35
+ 59,
36
+ 60,
37
+ 61,
38
+ 62,
39
+ 63,
40
+ 64,
41
+ 65,
42
+ 66,
43
+ 67,
44
+ 68,
45
+ 69,
46
+ 70,
47
+ 71,
48
+ 72,
49
+ 73,
50
+ 74,
51
+ 75,
52
+ 76,
53
+ 77,
54
+ 78,
55
+ 79,
56
+ 80,
57
+ 81,
58
+ 82,
59
+ 83,
60
+ 84,
61
+ 85,
62
+ 86,
63
+ 87,
64
+ 88,
65
+ 89,
66
+ 90,
67
+ 91,
68
+ 92,
69
+ 93,
70
+ 94,
71
+ 95,
72
+ 96,
73
+ 97,
74
+ 98,
75
+ 99,
76
+ 100,
77
+ 101,
78
+ 102,
79
+ 103,
80
+ 104,
81
+ 105,
82
+ 106,
83
+ 107,
84
+ 108
85
+ ],
86
+ "velocities": [
87
+ 45,
88
+ 75,
89
+ 105
90
+ ],
91
+ "durations": [
92
+ 0.06,
93
+ 0.12,
94
+ 0.24
95
+ ],
96
+ "tail": 0.3,
97
+ "gain": 0.8,
98
+ "bank": 0,
99
+ "program": 0,
100
+ "effects": false,
101
+ "renderer_revision": 3
102
+ },
103
+ "results": {
104
+ "baseline": {
105
+ "spectral_convergence": 0.8310245275497437,
106
+ "log_band_mae": 0.4479677379131317,
107
+ "waveform_rmse": 0.037389934062957764,
108
+ "peak": 0.0824432373046875,
109
+ "notes": 445
110
+ },
111
+ "dictionary": {
112
+ "spectral_convergence": 0.7704614400863647,
113
+ "log_band_mae": 0.4111631214618683,
114
+ "waveform_rmse": 0.03957610949873924,
115
+ "peak": 0.17767333984375,
116
+ "notes": 123
117
+ },
118
+ "refined": {
119
+ "spectral_convergence": 0.7986038327217102,
120
+ "log_band_mae": 0.3923003077507019,
121
+ "waveform_rmse": 0.03847990930080414,
122
+ "peak": 0.20697021484375,
123
+ "notes": 117
124
+ }
125
+ },
126
+ "render_repeatability": {
127
+ "spectral_convergence": 0.00047312359674833715,
128
+ "log_band_loss_delta": 3.2186508178710938e-06
129
+ },
130
+ "pursuit": {
131
+ "accepted": 123,
132
+ "surrogate_improvements": [
133
+ 5873.54931640625,
134
+ 4905.5556640625,
135
+ 4766.67578125,
136
+ 3959.75,
137
+ 3534.9482421875,
138
+ 3442.66455078125,
139
+ 3219.97216796875,
140
+ 3065.7041015625,
141
+ 1935.3251953125,
142
+ 1933.53662109375,
143
+ 1805.196044921875,
144
+ 1793.760986328125,
145
+ 1728.0030517578125,
146
+ 1548.9722900390625,
147
+ 1492.723876953125,
148
+ 1421.999755859375,
149
+ 1394.755615234375,
150
+ 1346.2169189453125,
151
+ 1329.601318359375,
152
+ 1275.04443359375,
153
+ 1201.2552490234375,
154
+ 1187.4041748046875,
155
+ 1177.69775390625,
156
+ 1154.324951171875,
157
+ 1132.4447021484375,
158
+ 971.7203369140625,
159
+ 953.567138671875,
160
+ 911.7687377929688,
161
+ 864.153076171875,
162
+ 861.8289794921875,
163
+ 842.8236083984375,
164
+ 723.0029296875,
165
+ 690.95458984375,
166
+ 670.2884521484375,
167
+ 647.384033203125,
168
+ 643.4237670898438,
169
+ 596.17041015625,
170
+ 591.5808715820312,
171
+ 590.9668579101562,
172
+ 576.955810546875,
173
+ 555.5059204101562,
174
+ 516.6516723632812,
175
+ 514.6587524414062,
176
+ 514.279052734375,
177
+ 504.91949462890625,
178
+ 411.443115234375,
179
+ 400.2333984375,
180
+ 390.39208984375,
181
+ 380.6637878417969,
182
+ 370.4420166015625,
183
+ 363.265380859375,
184
+ 346.45257568359375,
185
+ 342.1094970703125,
186
+ 331.36553955078125,
187
+ 325.9708251953125,
188
+ 324.1048278808594,
189
+ 323.36859130859375,
190
+ 314.0655517578125,
191
+ 312.26904296875,
192
+ 305.7211608886719,
193
+ 290.40826416015625,
194
+ 283.8734130859375,
195
+ 276.9443359375,
196
+ 269.7228698730469,
197
+ 242.9066162109375,
198
+ 240.60430908203125,
199
+ 240.25360107421875,
200
+ 229.510986328125,
201
+ 228.459716796875,
202
+ 221.15936279296875,
203
+ 187.22242736816406,
204
+ 183.34634399414062,
205
+ 182.0286865234375,
206
+ 181.97256469726562,
207
+ 175.39633178710938,
208
+ 141.53753662109375,
209
+ 140.17288208007812,
210
+ 138.97979736328125,
211
+ 137.34613037109375,
212
+ 135.32421875,
213
+ 132.63221740722656,
214
+ 130.34976196289062,
215
+ 123.92070007324219,
216
+ 122.67015075683594,
217
+ 117.83511352539062,
218
+ 115.94491577148438,
219
+ 112.36289978027344,
220
+ 112.08888244628906,
221
+ 111.0322265625,
222
+ 106.10653686523438,
223
+ 102.9644775390625,
224
+ 102.46817016601562,
225
+ 97.46054077148438,
226
+ 92.73184204101562,
227
+ 92.45913696289062,
228
+ 91.44773864746094,
229
+ 81.18904113769531,
230
+ 76.4394302368164,
231
+ 72.32395935058594,
232
+ 68.6805191040039,
233
+ 67.99607849121094,
234
+ 61.383392333984375,
235
+ 57.82987594604492,
236
+ 51.87420654296875,
237
+ 51.49356460571289,
238
+ 41.40382385253906,
239
+ 40.713409423828125,
240
+ 39.9324951171875,
241
+ 38.902130126953125,
242
+ 32.54479217529297,
243
+ 32.269126892089844,
244
+ 32.22667694091797,
245
+ 28.96026611328125,
246
+ 28.6995849609375,
247
+ 28.284168243408203,
248
+ 26.704544067382812,
249
+ 23.561458587646484,
250
+ 19.500450134277344,
251
+ 17.845294952392578,
252
+ 16.587181091308594,
253
+ 12.098899841308594,
254
+ 11.388519287109375,
255
+ 11.218666076660156
256
+ ],
257
+ "device": "cuda"
258
+ },
259
+ "baseline_velocity_trials": [
260
+ {
261
+ "velocity_delta": -36,
262
+ "spectral_convergence": 0.831043004989624,
263
+ "log_band_mae": 0.44797632098197937,
264
+ "waveform_rmse": 0.03738969564437866,
265
+ "peak": 0.082427978515625
266
+ },
267
+ {
268
+ "velocity_delta": -24,
269
+ "spectral_convergence": 0.8230495452880859,
270
+ "log_band_mae": 0.45736628770828247,
271
+ "waveform_rmse": 0.04087916389107704,
272
+ "peak": 0.129547119140625
273
+ },
274
+ {
275
+ "velocity_delta": -12,
276
+ "spectral_convergence": 0.9122947454452515,
277
+ "log_band_mae": 0.5070769786834717,
278
+ "waveform_rmse": 0.04709188640117645,
279
+ "peak": 0.189208984375
280
+ },
281
+ {
282
+ "velocity_delta": 0,
283
+ "spectral_convergence": 1.1454532146453857,
284
+ "log_band_mae": 0.5840789675712585,
285
+ "waveform_rmse": 0.05760560557246208,
286
+ "peak": 0.281158447265625
287
+ },
288
+ {
289
+ "velocity_delta": 12,
290
+ "spectral_convergence": 1.5337176322937012,
291
+ "log_band_mae": 0.6722043752670288,
292
+ "waveform_rmse": 0.07145288586616516,
293
+ "peak": 0.366973876953125
294
+ }
295
+ ],
296
+ "velocity_trials": [
297
+ {
298
+ "velocity_delta": -12,
299
+ "spectral_convergence": 0.7999444603919983,
300
+ "log_band_mae": 0.41019579768180847,
301
+ "waveform_rmse": 0.03728783130645752,
302
+ "peak": 0.13568115234375
303
+ },
304
+ {
305
+ "velocity_delta": -6,
306
+ "spectral_convergence": 0.7826135754585266,
307
+ "log_band_mae": 0.4063299596309662,
308
+ "waveform_rmse": 0.038131602108478546,
309
+ "peak": 0.151519775390625
310
+ },
311
+ {
312
+ "velocity_delta": 6,
313
+ "spectral_convergence": 0.7779667377471924,
314
+ "log_band_mae": 0.4148591458797455,
315
+ "waveform_rmse": 0.042012300342321396,
316
+ "peak": 0.1972198486328125
317
+ },
318
+ {
319
+ "velocity_delta": 12,
320
+ "spectral_convergence": 0.7948122024536133,
321
+ "log_band_mae": 0.4231906533241272,
322
+ "waveform_rmse": 0.04392588511109352,
323
+ "peak": 0.2220611572265625
324
+ }
325
+ ],
326
+ "wall_seconds": 250.1855344772339,
327
+ "caveats": [
328
+ "These longer demo samples have no human intelligibility or ASR evaluation.",
329
+ "Magnitude addition is approximate; phase interactions evaluated only on re-render.",
330
+ "73 pitches, 3 velocities, 3 gate durations; short dictionary tails are truncated.",
331
+ "Baseline is heuristic and has a different note count."
332
+ ]
333
+ }
examples/zh/piano-roll.png ADDED

Git LFS Details

  • SHA256: 58fd877abcf1f1a13c1982e5c1f27f820489ec08900126d19d235242b92276fd
  • Pointer size: 130 Bytes
  • Size of remote file: 24.8 kB
examples/zh/refined.json ADDED
@@ -0,0 +1,704 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "pitch": 62,
4
+ "velocity": 39,
5
+ "start": 0.12000000000000001,
6
+ "duration": 0.04000000000000002
7
+ },
8
+ {
9
+ "pitch": 101,
10
+ "velocity": 49,
11
+ "start": 0.1,
12
+ "duration": 0.060000000000000026
13
+ },
14
+ {
15
+ "pitch": 61,
16
+ "velocity": 39,
17
+ "start": 0.15000000000000002,
18
+ "duration": 0.06
19
+ },
20
+ {
21
+ "pitch": 104,
22
+ "velocity": 49,
23
+ "start": 0.15000000000000002,
24
+ "duration": 0.06
25
+ },
26
+ {
27
+ "pitch": 103,
28
+ "velocity": 69,
29
+ "start": 0.25,
30
+ "duration": 0.06
31
+ },
32
+ {
33
+ "pitch": 98,
34
+ "velocity": 49,
35
+ "start": 0.27,
36
+ "duration": 0.06
37
+ },
38
+ {
39
+ "pitch": 59,
40
+ "velocity": 109,
41
+ "start": 0.26,
42
+ "duration": 0.24
43
+ },
44
+ {
45
+ "pitch": 97,
46
+ "velocity": 49,
47
+ "start": 0.41000000000000003,
48
+ "duration": 0.12
49
+ },
50
+ {
51
+ "pitch": 58,
52
+ "velocity": 49,
53
+ "start": 0.33,
54
+ "duration": 0.24000000000000005
55
+ },
56
+ {
57
+ "pitch": 75,
58
+ "velocity": 39,
59
+ "start": 0.52,
60
+ "duration": 0.06000000000000005
61
+ },
62
+ {
63
+ "pitch": 80,
64
+ "velocity": 69,
65
+ "start": 0.53,
66
+ "duration": 0.06000000000000005
67
+ },
68
+ {
69
+ "pitch": 56,
70
+ "velocity": 109,
71
+ "start": 0.51,
72
+ "duration": 0.1200000000000001
73
+ },
74
+ {
75
+ "pitch": 81,
76
+ "velocity": 39,
77
+ "start": 0.5700000000000001,
78
+ "duration": 0.06000000000000005
79
+ },
80
+ {
81
+ "pitch": 104,
82
+ "velocity": 49,
83
+ "start": 0.5700000000000001,
84
+ "duration": 0.06000000000000005
85
+ },
86
+ {
87
+ "pitch": 83,
88
+ "velocity": 29,
89
+ "start": 0.7000000000000002,
90
+ "duration": 0.06000000000000005
91
+ },
92
+ {
93
+ "pitch": 87,
94
+ "velocity": 49,
95
+ "start": 0.7400000000000002,
96
+ "duration": 0.1200000000000001
97
+ },
98
+ {
99
+ "pitch": 78,
100
+ "velocity": 69,
101
+ "start": 0.7900000000000003,
102
+ "duration": 0.08000000000000007
103
+ },
104
+ {
105
+ "pitch": 83,
106
+ "velocity": 39,
107
+ "start": 0.7600000000000002,
108
+ "duration": 0.14000000000000012
109
+ },
110
+ {
111
+ "pitch": 103,
112
+ "velocity": 39,
113
+ "start": 0.8500000000000003,
114
+ "duration": 0.06000000000000005
115
+ },
116
+ {
117
+ "pitch": 59,
118
+ "velocity": 99,
119
+ "start": 0.7300000000000002,
120
+ "duration": 0.2200000000000002
121
+ },
122
+ {
123
+ "pitch": 102,
124
+ "velocity": 39,
125
+ "start": 1.0000000000000004,
126
+ "duration": 0.06000000000000005
127
+ },
128
+ {
129
+ "pitch": 59,
130
+ "velocity": 69,
131
+ "start": 1.0500000000000005,
132
+ "duration": 0.040000000000000036
133
+ },
134
+ {
135
+ "pitch": 78,
136
+ "velocity": 39,
137
+ "start": 1.0600000000000005,
138
+ "duration": 0.040000000000000036
139
+ },
140
+ {
141
+ "pitch": 83,
142
+ "velocity": 39,
143
+ "start": 1.0400000000000005,
144
+ "duration": 0.06000000000000005
145
+ },
146
+ {
147
+ "pitch": 82,
148
+ "velocity": 49,
149
+ "start": 1.0700000000000005,
150
+ "duration": 0.06000000000000005
151
+ },
152
+ {
153
+ "pitch": 92,
154
+ "velocity": 29,
155
+ "start": 1.0800000000000005,
156
+ "duration": 0.06000000000000005
157
+ },
158
+ {
159
+ "pitch": 55,
160
+ "velocity": 39,
161
+ "start": 1.2200000000000006,
162
+ "duration": 0.040000000000000036
163
+ },
164
+ {
165
+ "pitch": 107,
166
+ "velocity": 99,
167
+ "start": 1.0200000000000005,
168
+ "duration": 0.2400000000000002
169
+ },
170
+ {
171
+ "pitch": 103,
172
+ "velocity": 49,
173
+ "start": 1.2200000000000006,
174
+ "duration": 0.06000000000000005
175
+ },
176
+ {
177
+ "pitch": 57,
178
+ "velocity": 39,
179
+ "start": 1.1100000000000005,
180
+ "duration": 0.2400000000000002
181
+ },
182
+ {
183
+ "pitch": 97,
184
+ "velocity": 39,
185
+ "start": 1.3000000000000007,
186
+ "duration": 0.06000000000000005
187
+ },
188
+ {
189
+ "pitch": 98,
190
+ "velocity": 39,
191
+ "start": 1.3400000000000007,
192
+ "duration": 0.06000000000000005
193
+ },
194
+ {
195
+ "pitch": 104,
196
+ "velocity": 49,
197
+ "start": 1.3500000000000008,
198
+ "duration": 0.06000000000000005
199
+ },
200
+ {
201
+ "pitch": 83,
202
+ "velocity": 39,
203
+ "start": 1.3800000000000008,
204
+ "duration": 0.06000000000000005
205
+ },
206
+ {
207
+ "pitch": 87,
208
+ "velocity": 39,
209
+ "start": 1.4100000000000008,
210
+ "duration": 0.040000000000000036
211
+ },
212
+ {
213
+ "pitch": 59,
214
+ "velocity": 59,
215
+ "start": 1.3800000000000008,
216
+ "duration": 0.1200000000000001
217
+ },
218
+ {
219
+ "pitch": 61,
220
+ "velocity": 39,
221
+ "start": 1.4800000000000009,
222
+ "duration": 0.06000000000000005
223
+ },
224
+ {
225
+ "pitch": 108,
226
+ "velocity": 79,
227
+ "start": 1.3100000000000007,
228
+ "duration": 0.2400000000000002
229
+ },
230
+ {
231
+ "pitch": 79,
232
+ "velocity": 39,
233
+ "start": 1.4100000000000008,
234
+ "duration": 0.2400000000000002
235
+ },
236
+ {
237
+ "pitch": 68,
238
+ "velocity": 39,
239
+ "start": 1.630000000000001,
240
+ "duration": 0.040000000000000036
241
+ },
242
+ {
243
+ "pitch": 81,
244
+ "velocity": 39,
245
+ "start": 1.550000000000001,
246
+ "duration": 0.1200000000000001
247
+ },
248
+ {
249
+ "pitch": 54,
250
+ "velocity": 59,
251
+ "start": 1.620000000000001,
252
+ "duration": 0.06000000000000005
253
+ },
254
+ {
255
+ "pitch": 52,
256
+ "velocity": 39,
257
+ "start": 1.650000000000001,
258
+ "duration": 0.040000000000000036
259
+ },
260
+ {
261
+ "pitch": 104,
262
+ "velocity": 49,
263
+ "start": 2.490000000000001,
264
+ "duration": 0.06000000000000005
265
+ },
266
+ {
267
+ "pitch": 60,
268
+ "velocity": 59,
269
+ "start": 2.4400000000000013,
270
+ "duration": 0.11999999999999966
271
+ },
272
+ {
273
+ "pitch": 59,
274
+ "velocity": 29,
275
+ "start": 2.530000000000001,
276
+ "duration": 0.05999999999999961
277
+ },
278
+ {
279
+ "pitch": 103,
280
+ "velocity": 49,
281
+ "start": 2.530000000000001,
282
+ "duration": 0.05999999999999961
283
+ },
284
+ {
285
+ "pitch": 107,
286
+ "velocity": 49,
287
+ "start": 2.6000000000000005,
288
+ "duration": 0.06000000000000005
289
+ },
290
+ {
291
+ "pitch": 80,
292
+ "velocity": 29,
293
+ "start": 2.6700000000000004,
294
+ "duration": 0.05999999999999961
295
+ },
296
+ {
297
+ "pitch": 60,
298
+ "velocity": 99,
299
+ "start": 2.7,
300
+ "duration": 0.03999999999999959
301
+ },
302
+ {
303
+ "pitch": 79,
304
+ "velocity": 49,
305
+ "start": 2.71,
306
+ "duration": 0.05999999999999961
307
+ },
308
+ {
309
+ "pitch": 59,
310
+ "velocity": 29,
311
+ "start": 2.8099999999999996,
312
+ "duration": 0.06000000000000005
313
+ },
314
+ {
315
+ "pitch": 61,
316
+ "velocity": 39,
317
+ "start": 2.9999999999999996,
318
+ "duration": 0.040000000000000036
319
+ },
320
+ {
321
+ "pitch": 107,
322
+ "velocity": 79,
323
+ "start": 2.9499999999999997,
324
+ "duration": 0.23999999999999977
325
+ },
326
+ {
327
+ "pitch": 102,
328
+ "velocity": 49,
329
+ "start": 3.1399999999999997,
330
+ "duration": 0.05999999999999961
331
+ },
332
+ {
333
+ "pitch": 105,
334
+ "velocity": 49,
335
+ "start": 3.1399999999999997,
336
+ "duration": 0.05999999999999961
337
+ },
338
+ {
339
+ "pitch": 96,
340
+ "velocity": 29,
341
+ "start": 3.269999999999999,
342
+ "duration": 0.05999999999999961
343
+ },
344
+ {
345
+ "pitch": 95,
346
+ "velocity": 39,
347
+ "start": 3.279999999999999,
348
+ "duration": 0.05999999999999961
349
+ },
350
+ {
351
+ "pitch": 62,
352
+ "velocity": 39,
353
+ "start": 3.3499999999999983,
354
+ "duration": 0.05999999999999961
355
+ },
356
+ {
357
+ "pitch": 107,
358
+ "velocity": 79,
359
+ "start": 3.2899999999999987,
360
+ "duration": 0.11999999999999922
361
+ },
362
+ {
363
+ "pitch": 80,
364
+ "velocity": 39,
365
+ "start": 3.3499999999999983,
366
+ "duration": 0.07999999999999963
367
+ },
368
+ {
369
+ "pitch": 61,
370
+ "velocity": 39,
371
+ "start": 3.1899999999999995,
372
+ "duration": 0.25999999999999845
373
+ },
374
+ {
375
+ "pitch": 99,
376
+ "velocity": 39,
377
+ "start": 3.399999999999998,
378
+ "duration": 0.05999999999999961
379
+ },
380
+ {
381
+ "pitch": 59,
382
+ "velocity": 59,
383
+ "start": 3.519999999999998,
384
+ "duration": 0.05999999999999961
385
+ },
386
+ {
387
+ "pitch": 69,
388
+ "velocity": 39,
389
+ "start": 3.5599999999999974,
390
+ "duration": 0.040000000000000036
391
+ },
392
+ {
393
+ "pitch": 54,
394
+ "velocity": 39,
395
+ "start": 3.5499999999999976,
396
+ "duration": 0.05999999999999961
397
+ },
398
+ {
399
+ "pitch": 108,
400
+ "velocity": 49,
401
+ "start": 4.069999999999998,
402
+ "duration": 0.05999999999999961
403
+ },
404
+ {
405
+ "pitch": 104,
406
+ "velocity": 49,
407
+ "start": 4.579999999999997,
408
+ "duration": 0.05999999999999872
409
+ },
410
+ {
411
+ "pitch": 61,
412
+ "velocity": 29,
413
+ "start": 4.599999999999997,
414
+ "duration": 0.05999999999999872
415
+ },
416
+ {
417
+ "pitch": 81,
418
+ "velocity": 39,
419
+ "start": 4.6199999999999966,
420
+ "duration": 0.05999999999999872
421
+ },
422
+ {
423
+ "pitch": 63,
424
+ "velocity": 39,
425
+ "start": 4.589999999999997,
426
+ "duration": 0.09999999999999787
427
+ },
428
+ {
429
+ "pitch": 55,
430
+ "velocity": 29,
431
+ "start": 4.769999999999995,
432
+ "duration": 0.05999999999999872
433
+ },
434
+ {
435
+ "pitch": 56,
436
+ "velocity": 39,
437
+ "start": 4.789999999999995,
438
+ "duration": 0.05999999999999872
439
+ },
440
+ {
441
+ "pitch": 100,
442
+ "velocity": 49,
443
+ "start": 4.809999999999994,
444
+ "duration": 0.05999999999999872
445
+ },
446
+ {
447
+ "pitch": 107,
448
+ "velocity": 79,
449
+ "start": 5.049999999999993,
450
+ "duration": 0.05999999999999961
451
+ },
452
+ {
453
+ "pitch": 59,
454
+ "velocity": 59,
455
+ "start": 4.919999999999993,
456
+ "duration": 0.23999999999999932
457
+ },
458
+ {
459
+ "pitch": 103,
460
+ "velocity": 39,
461
+ "start": 5.119999999999992,
462
+ "duration": 0.040000000000000036
463
+ },
464
+ {
465
+ "pitch": 104,
466
+ "velocity": 39,
467
+ "start": 5.119999999999992,
468
+ "duration": 0.05999999999999961
469
+ },
470
+ {
471
+ "pitch": 102,
472
+ "velocity": 49,
473
+ "start": 4.949999999999993,
474
+ "duration": 0.23999999999999844
475
+ },
476
+ {
477
+ "pitch": 61,
478
+ "velocity": 29,
479
+ "start": 5.109999999999992,
480
+ "duration": 0.11999999999999922
481
+ },
482
+ {
483
+ "pitch": 59,
484
+ "velocity": 99,
485
+ "start": 5.919999999999991,
486
+ "duration": 0.03999999999999915
487
+ },
488
+ {
489
+ "pitch": 83,
490
+ "velocity": 39,
491
+ "start": 5.919999999999991,
492
+ "duration": 0.03999999999999915
493
+ },
494
+ {
495
+ "pitch": 78,
496
+ "velocity": 69,
497
+ "start": 5.929999999999991,
498
+ "duration": 0.03999999999999915
499
+ },
500
+ {
501
+ "pitch": 95,
502
+ "velocity": 39,
503
+ "start": 5.909999999999991,
504
+ "duration": 0.05999999999999872
505
+ },
506
+ {
507
+ "pitch": 93,
508
+ "velocity": 39,
509
+ "start": 5.95999999999999,
510
+ "duration": 0.040000000000000036
511
+ },
512
+ {
513
+ "pitch": 80,
514
+ "velocity": 49,
515
+ "start": 5.94999999999999,
516
+ "duration": 0.05999999999999961
517
+ },
518
+ {
519
+ "pitch": 61,
520
+ "velocity": 39,
521
+ "start": 5.99999999999999,
522
+ "duration": 0.040000000000000036
523
+ },
524
+ {
525
+ "pitch": 56,
526
+ "velocity": 59,
527
+ "start": 6.20999999999999,
528
+ "duration": 0.1200000000000001
529
+ },
530
+ {
531
+ "pitch": 108,
532
+ "velocity": 109,
533
+ "start": 6.41999999999999,
534
+ "duration": 0.05999999999999961
535
+ },
536
+ {
537
+ "pitch": 60,
538
+ "velocity": 69,
539
+ "start": 6.4499999999999895,
540
+ "duration": 0.040000000000000036
541
+ },
542
+ {
543
+ "pitch": 61,
544
+ "velocity": 49,
545
+ "start": 6.42999999999999,
546
+ "duration": 0.05999999999999961
547
+ },
548
+ {
549
+ "pitch": 77,
550
+ "velocity": 39,
551
+ "start": 6.55999999999999,
552
+ "duration": 0.03999999999999915
553
+ },
554
+ {
555
+ "pitch": 80,
556
+ "velocity": 49,
557
+ "start": 6.589999999999989,
558
+ "duration": 0.1200000000000001
559
+ },
560
+ {
561
+ "pitch": 79,
562
+ "velocity": 39,
563
+ "start": 6.679999999999989,
564
+ "duration": 0.040000000000000036
565
+ },
566
+ {
567
+ "pitch": 55,
568
+ "velocity": 49,
569
+ "start": 6.609999999999989,
570
+ "duration": 0.1200000000000001
571
+ },
572
+ {
573
+ "pitch": 86,
574
+ "velocity": 39,
575
+ "start": 6.729999999999989,
576
+ "duration": 0.05999999999999961
577
+ },
578
+ {
579
+ "pitch": 57,
580
+ "velocity": 109,
581
+ "start": 6.56999999999999,
582
+ "duration": 0.23999999999999844
583
+ },
584
+ {
585
+ "pitch": 60,
586
+ "velocity": 109,
587
+ "start": 6.849999999999988,
588
+ "duration": 0.05999999999999961
589
+ },
590
+ {
591
+ "pitch": 108,
592
+ "velocity": 49,
593
+ "start": 6.869999999999988,
594
+ "duration": 0.05999999999999961
595
+ },
596
+ {
597
+ "pitch": 84,
598
+ "velocity": 39,
599
+ "start": 6.709999999999989,
600
+ "duration": 0.23999999999999755
601
+ },
602
+ {
603
+ "pitch": 80,
604
+ "velocity": 29,
605
+ "start": 6.719999999999989,
606
+ "duration": 0.23999999999999755
607
+ },
608
+ {
609
+ "pitch": 79,
610
+ "velocity": 69,
611
+ "start": 6.849999999999988,
612
+ "duration": 0.11999999999999833
613
+ },
614
+ {
615
+ "pitch": 55,
616
+ "velocity": 39,
617
+ "start": 6.979999999999986,
618
+ "duration": 0.0600000000000005
619
+ },
620
+ {
621
+ "pitch": 51,
622
+ "velocity": 59,
623
+ "start": 7.0099999999999865,
624
+ "duration": 0.0600000000000005
625
+ },
626
+ {
627
+ "pitch": 81,
628
+ "velocity": 29,
629
+ "start": 6.849999999999988,
630
+ "duration": 0.23999999999999844
631
+ },
632
+ {
633
+ "pitch": 94,
634
+ "velocity": 49,
635
+ "start": 7.079999999999987,
636
+ "duration": 0.05999999999999961
637
+ },
638
+ {
639
+ "pitch": 107,
640
+ "velocity": 79,
641
+ "start": 7.099999999999986,
642
+ "duration": 0.05999999999999961
643
+ },
644
+ {
645
+ "pitch": 108,
646
+ "velocity": 79,
647
+ "start": 7.139999999999986,
648
+ "duration": 0.05999999999999872
649
+ },
650
+ {
651
+ "pitch": 81,
652
+ "velocity": 39,
653
+ "start": 7.209999999999985,
654
+ "duration": 0.05999999999999961
655
+ },
656
+ {
657
+ "pitch": 61,
658
+ "velocity": 39,
659
+ "start": 7.349999999999984,
660
+ "duration": 0.03999999999999915
661
+ },
662
+ {
663
+ "pitch": 80,
664
+ "velocity": 49,
665
+ "start": 7.329999999999984,
666
+ "duration": 0.05999999999999872
667
+ },
668
+ {
669
+ "pitch": 79,
670
+ "velocity": 39,
671
+ "start": 7.369999999999983,
672
+ "duration": 0.03999999999999915
673
+ },
674
+ {
675
+ "pitch": 85,
676
+ "velocity": 39,
677
+ "start": 7.349999999999984,
678
+ "duration": 0.05999999999999872
679
+ },
680
+ {
681
+ "pitch": 58,
682
+ "velocity": 59,
683
+ "start": 7.1799999999999855,
684
+ "duration": 0.23999999999999666
685
+ },
686
+ {
687
+ "pitch": 84,
688
+ "velocity": 69,
689
+ "start": 7.379999999999983,
690
+ "duration": 0.03999999999999915
691
+ },
692
+ {
693
+ "pitch": 87,
694
+ "velocity": 39,
695
+ "start": 7.399999999999983,
696
+ "duration": 0.03999999999999915
697
+ },
698
+ {
699
+ "pitch": 93,
700
+ "velocity": 49,
701
+ "start": 7.419999999999982,
702
+ "duration": 0.05999999999999961
703
+ }
704
+ ]
examples/zh/refined.mid ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:81dc4ddc02681026ebb2b13ba82a85dbf9a600aa8b6a4aae39500b17b6315cc4
3
+ size 866
examples/zh/refined.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:558805b121cbf61fbe5034a7d4c144f013d0933eb95984174afb87787308101c
3
+ size 777680
examples/zh/source.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a5df11b09e3005ed91d214164f4a14fc542b4ba5310285485ca913b64ce8566a
3
+ size 729680
examples/zh/spectrogram.png ADDED

Git LFS Details

  • SHA256: 477c2e0c97fe876df8c4e468257b605e10e35d6b02dd841bbe0e4e211242c705
  • Pointer size: 132 Bytes
  • Size of remote file: 1.14 MB
examples/zh/target.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aaed6dd1bf76925b5ac4f7fcfc5c5abbe3274c4d8ffd73fa9d76e8d3221735c9
3
+ size 729680
packages.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ libfluidsynth3
2
+ libsndfile1
3
+ sox
requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ --extra-index-url https://download.pytorch.org/whl/cpu
2
+ torch==2.10.0+cpu
3
+ torchaudio==2.10.0+cpu
4
+ qwen-tts==0.1.1
5
+ transformers==4.57.3
6
+ accelerate==1.12.0
7
+ numpy==1.26.4
8
+ scipy==1.15.3
9
+ soundfile==0.13.1
10
+ pyfluidsynth==1.4.0
11
+ mido==1.3.3
12
+ matplotlib==3.10.8
scripts/generate_speech.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Generate speech fixtures with Qwen3-TTS and record their provenance."""
2
+ import argparse
3
+ import json
4
+ from pathlib import Path
5
+ import time
6
+
7
+ import numpy as np
8
+ import soundfile as sf
9
+ import torch
10
+ from huggingface_hub import snapshot_download
11
+ from qwen_tts import Qwen3TTSModel
12
+
13
+
14
+ def main():
15
+ parser = argparse.ArgumentParser()
16
+ parser.add_argument('--model-path')
17
+ parser.add_argument('--device', choices=['auto', 'cpu', 'cuda'], default='auto')
18
+ parser.add_argument('--model', help='Hugging Face model ID; inferred from local source.json when available')
19
+ parser.add_argument('--samples', type=Path, help='JSON list of name/text/language and speaker or instruct records')
20
+ parser.add_argument('--out', type=Path, default=Path('outputs/tts'))
21
+ parser.add_argument('--seed', type=int, default=42)
22
+ parser.add_argument('--only', help='Generate only the named sample')
23
+ parser.add_argument('--instruct', help='Override the voice description for every sample')
24
+ args = parser.parse_args()
25
+ args.out.mkdir(parents=True, exist_ok=True)
26
+ source_path = Path(args.model_path) / 'source.json' if args.model_path else None
27
+ source = json.loads(source_path.read_text()) if source_path and source_path.exists() else None
28
+ repo = args.model or (source or {}).get('repo') or 'Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice'
29
+ if source and args.model and source['repo'] != args.model:
30
+ raise ValueError('Requested model does not match local model provenance')
31
+ path = args.model_path or snapshot_download(repo, revision='5ecdb67327fd37bb2e042aab12ff7391903235d3' if repo == 'Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign' else None)
32
+ rows = json.loads(args.samples.read_text()) if args.samples else [
33
+ dict(name='zh', text='你好,今天的天气真好。', language='Chinese', speaker='Vivian'),
34
+ dict(name='en', text='Hello, can you hear the piano speaking?', language='English', speaker='Ryan'),
35
+ ]
36
+ if args.only:
37
+ rows = [row for row in rows if row['name'] == args.only]
38
+ names = [row['name'] for row in rows]
39
+ if not names or len(set(names)) != len(names) or any(Path(n).name != n or n in ('', '.', '..') for n in names):
40
+ raise ValueError('Samples must have unique file stems, and the selection must not be empty')
41
+ torch.manual_seed(args.seed)
42
+ np.random.seed(args.seed)
43
+ device = ('cuda' if torch.cuda.is_available() else 'cpu') if args.device == 'auto' else args.device
44
+ dtype = torch.bfloat16 if device == 'cuda' else torch.float32
45
+ model = Qwen3TTSModel.from_pretrained(
46
+ path, device_map=device, dtype=dtype, attn_implementation='sdpa')
47
+ mode = model.model.tts_model_type
48
+ samples = []
49
+ for row in rows:
50
+ instruction = args.instruct if args.instruct is not None else row.get('instruct')
51
+ seed = row.get('seed', args.seed)
52
+ torch.manual_seed(seed)
53
+ np.random.seed(seed)
54
+ start = time.time()
55
+ if mode == 'voice_design':
56
+ if not instruction:
57
+ raise ValueError('VoiceDesign requires an instruct field or --instruct')
58
+ wavs, sr = model.generate_voice_design(
59
+ text=row['text'], language=row['language'], instruct=instruction, max_new_tokens=512)
60
+ elif mode == 'custom_voice':
61
+ if instruction and model.model.tts_model_size == '0b6':
62
+ raise ValueError('0.6B CustomVoice ignores instructions; use a supported 1.7B model')
63
+ wavs, sr = model.generate_custom_voice(
64
+ text=row['text'], language=row['language'], speaker=row['speaker'],
65
+ instruct=instruction, max_new_tokens=512)
66
+ else:
67
+ raise ValueError(f'Unsupported generation mode: {mode}')
68
+ sf.write(args.out / f"{row['name']}.wav", wavs[0], sr, subtype='FLOAT')
69
+ record = dict(row, seed=seed, sample_rate=sr, seconds=len(wavs[0]) / sr,
70
+ wall_seconds=time.time() - start)
71
+ if instruction:
72
+ record['instruct'] = instruction
73
+ if mode == 'voice_design':
74
+ record.pop('speaker', None)
75
+ samples.append(record)
76
+ print(record, flush=True)
77
+ manifest = dict(model=repo, snapshot=str(path), source=source, mode=mode,
78
+ seed=args.seed, seed_policy='Reset RNG before each sample',
79
+ device=device, dtype=str(dtype).removeprefix('torch.'), attention='sdpa', max_new_tokens=512, samples=samples)
80
+ (args.out / 'manifest.json').write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + '\n')
81
+
82
+
83
+ if __name__ == '__main__':
84
+ main()
speaking_midi/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ """Experimental fixed-SoundFont inverse synthesis."""
speaking_midi/__main__.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import json
3
+ import time
4
+ from dataclasses import replace
5
+ from pathlib import Path
6
+ import numpy as np
7
+ import soundfile as sf
8
+ from .core import *
9
+
10
+ def main():
11
+ ap=argparse.ArgumentParser()
12
+ ap.add_argument('input'); ap.add_argument('--out',default='outputs/experiment')
13
+ ap.add_argument('--soundfont',default=SFONT); ap.add_argument('--max-notes',type=int,default=240)
14
+ ap.add_argument('--skip-local-refinement', action='store_true')
15
+ args=ap.parse_args(); out=Path(args.out); out.mkdir(parents=True,exist_ok=True)
16
+ started=time.time(); y=load_audio(args.input); seconds=len(y)/SR
17
+ render_loss=make_log_band_loss(y)
18
+ sf.write(out/'target.wav',y,SR,subtype='FLOAT')
19
+ piano=Piano(args.soundfont)
20
+ atoms,params,config=make_dictionary(piano,'outputs/cache')
21
+ print('dictionary',atoms.shape,flush=True)
22
+ naive=baseline(y)
23
+ baseline_trials=[]; best_naive=naive; naive_loss=float('inf')
24
+ for dv in [-36,-24,-12,0,12]:
25
+ candidate=[replace(n,velocity=int(np.clip(n.velocity+dv,1,127))) for n in naive]
26
+ m=metrics(y,piano.render(candidate,seconds+.5))
27
+ baseline_trials.append(dict(velocity_delta=dv,**m))
28
+ if m['log_band_mae']<naive_loss: best_naive=candidate; naive_loss=m['log_band_mae']
29
+ naive=best_naive
30
+ audio=render_saved(piano,naive,out/'baseline',seconds+.5)
31
+ results={'baseline':dict(metrics(y,audio),notes=len(naive))}
32
+ fitted,trace=fit_temporal(y,atoms,params,args.max_notes)
33
+ audio=render_saved(piano,fitted,out/'dictionary',seconds+.5)
34
+ results['dictionary']=dict(metrics(y,audio),notes=len(fitted))
35
+ # Exact renderer-in-the-loop discrete velocity/duration coordinate sweeps.
36
+ # A candidate is accepted only if the measured log-band loss decreases.
37
+ best=fitted; best_loss=results['dictionary']['log_band_mae']; trials=[]
38
+ for dv in [-12,-6,6,12]:
39
+ candidate=[replace(n,velocity=int(np.clip(n.velocity+dv,1,127))) for n in fitted]
40
+ a=piano.render(candidate,seconds+.5); m=metrics(y,a)
41
+ trials.append(dict(velocity_delta=dv,**m))
42
+ if m['log_band_mae']<best_loss: best=candidate; best_loss=m['log_band_mae']
43
+ # Per-note velocity, onset, gate duration and deletion pass with real renderer feedback.
44
+ for i in (range(len(best)-1,-1,-1) if not args.skip_local_refinement else []):
45
+ current=best[i]; winner=best; win=best_loss
46
+ variants=[replace(current,velocity=int(np.clip(current.velocity+d,1,127))) for d in [-10,10]]
47
+ variants += [replace(current,start=round(current.start+d,3)) for d in [-.01,.01]]
48
+ variants += [replace(current,duration=round(current.duration+d,3)) for d in [-.02,.02]]
49
+ variants += [None]
50
+ for variant in variants:
51
+ candidate=best.copy()
52
+ if variant is None: candidate.pop(i)
53
+ else:
54
+ if variant.start<0 or variant.duration<.02 or variant.start+variant.duration>seconds: continue
55
+ if any(j!=i and n.pitch==variant.pitch and
56
+ max(n.start,variant.start)<min(n.start+n.duration,variant.start+variant.duration)-1e-7
57
+ for j,n in enumerate(best)): continue
58
+ candidate[i]=variant
59
+ a=piano.render(candidate,seconds+.5); loss=render_loss(a)
60
+ if loss<win: winner=candidate; win=loss
61
+ best=winner; best_loss=win
62
+ if i%40==0: print('renderer refine remaining',i,'loss',best_loss,flush=True)
63
+ audio=render_saved(piano,best,out/'refined',seconds+.5)
64
+ results['refined']=dict(metrics(y,audio),notes=len(best))
65
+ repeated=piano.render(read_midi(out/'refined.mid'),seconds+.5)
66
+ repeatability=dict(spectral_convergence=metrics(audio,repeated)['spectral_convergence'],
67
+ log_band_loss_delta=abs(metrics(y,repeated)['log_band_mae']-results['refined']['log_band_mae']))
68
+ report=dict(input=str(Path(args.input).resolve()),seconds=seconds,renderer=config,
69
+ results=results,render_repeatability=repeatability,pursuit=trace,baseline_velocity_trials=baseline_trials,velocity_trials=trials,wall_seconds=time.time()-started,
70
+ caveats=['No human listening evaluation; auxiliary ASR, if run, is recorded separately in outputs/asr.json.',
71
+ 'Magnitude addition is approximate; phase interactions evaluated only on re-render.',
72
+ '73 pitches, 3 velocities, 3 gate durations; short dictionary tails are truncated.',
73
+ 'Baseline is heuristic and has a different note count.'])
74
+ (out/'metrics.json').write_text(json.dumps(report,indent=2))
75
+ import matplotlib
76
+ matplotlib.use('Agg')
77
+ import matplotlib.pyplot as plt
78
+ fig,axs=plt.subplots(4,1,figsize=(12,10),sharex=True)
79
+ for ax,name in zip(axs,['target','baseline','dictionary','refined']):
80
+ x,_=sf.read(out/f'{name}.wav'); z=magnitude(x)
81
+ ax.imshow(20*np.log10(np.maximum(z,1e-4)),origin='lower',aspect='auto',
82
+ extent=[0,len(x)/SR,0,SR/2],vmin=-45,vmax=20,cmap='magma')
83
+ ax.set_ylim(0,6000); ax.set_ylabel(name+'\nHz')
84
+ axs[-1].set_xlabel('seconds'); fig.tight_layout(); fig.savefig(out/'spectrogram.png'); plt.close(fig)
85
+ items=''.join(f'<h2>{name}</h2><audio controls src="{name}.wav"></audio>' for name in ['target','baseline','dictionary','refined'])
86
+ (out/'listen.html').write_text('<!doctype html><meta charset="utf-8"><title>Speaking MIDI experiment</title><h1>Fixed-piano speech fitting</h1>'+items+'<p>Same gain, no per-player normalization. Listen before reading the transcript.</p><img width="100%" src="spectrogram.png"><pre>'+json.dumps(results,indent=2)+'</pre>')
87
+ piano.close(); print(json.dumps(results,indent=2),flush=True)
88
+
89
+ if __name__=='__main__': main()
speaking_midi/core.py ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Renderer-constrained speech approximation, with discrete temporal matching pursuit."""
2
+ from dataclasses import dataclass, asdict
3
+ from pathlib import Path
4
+ import hashlib
5
+ import json
6
+ import ctypes
7
+ import ctypes.util
8
+ import numpy as np
9
+ import scipy.signal as signal
10
+ import soundfile as sf
11
+ import mido
12
+
13
+ # pyFluidSynth's discovery uses ldconfig; support an unprivileged local deb extraction.
14
+ _local = Path(__file__).resolve().parents[1]/'.local/usr/lib/x86_64-linux-gnu/libfluidsynth.so.3'
15
+ if _local.exists():
16
+ _find = ctypes.util.find_library
17
+ ctypes.util.find_library = lambda name: str(_local) if name == 'fluidsynth' else _find(name)
18
+ import fluidsynth
19
+
20
+ SR = 24000
21
+ HOP = 240
22
+ NFFT = 2048
23
+ SFONT = str(Path(__file__).resolve().parents[1] / 'assets/gm.sf3')
24
+
25
+ @dataclass
26
+ class Note:
27
+ pitch: int
28
+ velocity: int
29
+ start: float
30
+ duration: float
31
+
32
+ class Piano:
33
+ def __init__(self, soundfont=SFONT):
34
+ self.path = str(soundfont)
35
+ self.synth = fluidsynth.Synth(samplerate=SR, gain=0.8)
36
+ for key, value in [('synth.reverb.active', 0), ('synth.chorus.active', 0),
37
+ ('synth.polyphony', 512), ('synth.cpu-cores', 1)]:
38
+ self.synth.setting(key, value)
39
+ self.sfid = self.synth.sfload(self.path)
40
+ if self.sfid < 0: raise RuntimeError('SoundFont load failed')
41
+ if self.synth.program_select(0, self.sfid, 0, 0) != 0:
42
+ raise RuntimeError('Cannot select bank 0, program 0')
43
+ self.synth.noteon(0,60,1)
44
+ self.synth.get_samples(256)
45
+ self.synth.all_sounds_off(0)
46
+ self.synth.get_samples(256)
47
+
48
+ def render(self, notes, seconds):
49
+ self.synth.all_sounds_off(0)
50
+ self.synth.get_samples(256) # flush voices killed at the next synthesis block
51
+ events=[]
52
+ for n in notes:
53
+ events.extend([(round(n.start*SR), 1, n.pitch, n.velocity),
54
+ (round((n.start+n.duration)*SR), 0, n.pitch, 0)])
55
+ # Note-off before note-on at a shared boundary.
56
+ events.sort()
57
+ total = round(seconds*SR); chunks=[]; cursor=0
58
+ for sample, on, pitch, velocity in events:
59
+ sample=min(sample,total)
60
+ if sample>cursor:
61
+ chunks.append(self.synth.get_samples(sample-cursor).reshape(-1,2).mean(axis=1)/32768.)
62
+ cursor=sample
63
+ if on: self.synth.noteon(0,pitch,velocity)
64
+ else: self.synth.noteoff(0,pitch)
65
+ if total>cursor:
66
+ chunks.append(self.synth.get_samples(total-cursor).reshape(-1,2).mean(axis=1)/32768.)
67
+ # Drain the remaining FluidSynth 64-frame block before the next reset.
68
+ # Otherwise buffered samples from this render may leak into the next trial.
69
+ if total % 64: self.synth.get_samples(64-total%64)
70
+ return np.concatenate(chunks).astype(np.float32) if chunks else np.zeros(total,np.float32)
71
+
72
+ def close(self): self.synth.delete()
73
+
74
+ def write_midi(notes, path):
75
+ midi=mido.MidiFile(ticks_per_beat=1000); track=mido.MidiTrack(); midi.tracks.append(track)
76
+ track.append(mido.MetaMessage('set_tempo', tempo=500000))
77
+ track.append(mido.Message('program_change', channel=0, program=0))
78
+ events=[]
79
+ for n in notes:
80
+ events.extend([(round(n.start*2000),1,n.pitch,n.velocity),
81
+ (round((n.start+n.duration)*2000),0,n.pitch,0)])
82
+ last=0
83
+ for tick,on,pitch,vel in sorted(events):
84
+ track.append(mido.Message('note_on' if on else 'note_off', channel=0, note=pitch, velocity=vel, time=tick-last)); last=tick
85
+ midi.save(path)
86
+
87
+ def read_midi(path):
88
+ now=0.; active={}; notes=[]
89
+ for msg in mido.MidiFile(path):
90
+ now+=msg.time
91
+ if msg.type=='note_on' and msg.velocity:
92
+ if msg.note in active: raise ValueError('Overlapping same-pitch MIDI notes')
93
+ active[msg.note]=(now,msg.velocity)
94
+ elif msg.type=='note_off' or (msg.type=='note_on' and not msg.velocity):
95
+ start,vel=active.pop(msg.note)
96
+ notes.append(Note(msg.note,vel,start,now-start))
97
+ if active: raise ValueError('Unterminated MIDI notes')
98
+ return notes
99
+
100
+ def load_audio(path):
101
+ y,sr=sf.read(path,always_2d=True); y=y.mean(axis=1)
102
+ if sr!=SR:
103
+ import math
104
+ g=math.gcd(sr,SR); y=signal.resample_poly(y,SR//g,sr//g)
105
+ if not np.isfinite(y).all() or np.max(np.abs(y))<1e-8: raise ValueError('Invalid/silent audio')
106
+ # Fixed target RMS: all methods share this exact signal; no per-result normalization.
107
+ return (y*(0.035/np.sqrt(np.mean(y*y)))).astype(np.float32)
108
+
109
+ def magnitude(y):
110
+ import torch
111
+ x=torch.as_tensor(y,dtype=torch.float32)
112
+ return torch.stft(x,NFFT,HOP,window=torch.hann_window(NFFT),center=True,
113
+ pad_mode='constant',return_complex=True).abs().numpy()
114
+
115
+ def filterbank():
116
+ # 96 triangular bands with more resolution in the speech range.
117
+ hz=np.linspace(0,SR/2,NFFT//2+1)
118
+ edges=700*(np.exp(np.linspace(np.log(1+60/700),np.log(1+10000/700),98))-1)
119
+ bank=np.maximum(0,np.minimum((hz[None]-edges[:-2,None])/(edges[1:-1,None]-edges[:-2,None]),
120
+ (edges[2:,None]-hz[None])/(edges[2:,None]-edges[1:-1,None])))
121
+ return bank.astype(np.float32)
122
+
123
+ def features(y): return filterbank()@magnitude(y)
124
+
125
+ def make_dictionary(piano, cache):
126
+ config=dict(soundfont_sha256=hashlib.sha256(Path(piano.path).read_bytes()).hexdigest(),
127
+ sr=SR,hop=HOP,nfft=NFFT,preset_name=piano.synth.sfpreset_name(piano.sfid,0,0),
128
+ renderer_library_sha256=hashlib.sha256(_local.read_bytes()).hexdigest() if _local.exists() else 'system',pitches=list(range(36,109)),velocities=[45,75,105],
129
+ durations=[.06,.12,.24],tail=.30,gain=.8,bank=0,program=0,effects=False,renderer_revision=3)
130
+ key=hashlib.sha256(json.dumps(config,sort_keys=True).encode()).hexdigest()[:16]
131
+ path=Path(cache)/f'dictionary-{key}.npz'; path.parent.mkdir(parents=True,exist_ok=True)
132
+ if path.exists():
133
+ a=np.load(path); return a['atoms'], a['params'],config
134
+ atoms=[]; params=[]
135
+ for pitch in config['pitches']:
136
+ for vel in config['velocities']:
137
+ for dur in config['durations']:
138
+ y=piano.render([Note(pitch,vel,0,dur)],.54)
139
+ atoms.append(features(y)); params.append((pitch,vel,dur))
140
+ atoms=np.stack(atoms); params=np.asarray(params)
141
+ np.savez_compressed(path,atoms=atoms,params=params)
142
+ return atoms,params,config
143
+
144
+ def fit_temporal(y, atoms, params, max_notes=240):
145
+ import torch
146
+ import torch.nn.functional as F
147
+ device='cuda' if torch.cuda.is_available() else 'cpu'
148
+ target=features(y)
149
+ # Inverse RMS band weights cap dominance by the strongest formant.
150
+ weight=1/np.maximum(np.sqrt(np.mean(target**2,axis=1)),.15)**.5
151
+ a=torch.tensor(atoms*weight[None,:,None],device=device)
152
+ residual=torch.tensor(target*weight[:,None],device=device)
153
+ length=a.shape[-1]; frames=residual.shape[-1]
154
+ residual=F.pad(residual,(0,length))
155
+ energy=a.square().sum((1,2))
156
+ allowed=torch.ones((len(params),frames),device=device,dtype=torch.bool)
157
+ notes=[]; history=[]
158
+ with torch.no_grad():
159
+ for iteration in range(max_notes):
160
+ dots=F.conv1d(residual[None],a)[0,:,:frames]
161
+ score=2*dots-energy[:,None]
162
+ score.masked_fill_(~allowed,-float('inf'))
163
+ best,idx=score.flatten().max(0)
164
+ if best.item()<=0: break
165
+ k,t=divmod(idx.item(),frames)
166
+ pitch,vel,dur=params[k]
167
+ if t*HOP/SR+dur>len(y)/SR:
168
+ allowed[k,t]=False; continue
169
+ notes.append(Note(int(pitch),int(vel),t*HOP/SR,float(dur)))
170
+ residual[:,t:t+length]-=a[k]
171
+ # Reject note-on overlaps at same pitch, including preceding long candidates.
172
+ same=np.where(params[:,0]==pitch)[0]
173
+ for j in same:
174
+ left=max(0,t-int(np.ceil(params[j,2]*SR/HOP))+1)
175
+ right=min(frames,t+int(np.ceil(dur*SR/HOP)))
176
+ allowed[j,left:right]=False
177
+ history.append(float(best))
178
+ if len(notes)%40==0: print('pursuit',len(notes),'improvement',float(best),flush=True)
179
+ return notes,dict(accepted=len(notes),surrogate_improvements=history,device=device)
180
+
181
+ def baseline(y, max_polyphony=8):
182
+ spec=magnitude(y); freq=np.arange(spec.shape[0])*SR/NFFT
183
+ notes=[]; step=6
184
+ for t in range(0,spec.shape[1]-step,step):
185
+ s=spec[:,t:t+step].mean(axis=1)
186
+ peaks,_=signal.find_peaks(s)
187
+ peaks=peaks[(freq[peaks]>=65)&(freq[peaks]<=4200)]
188
+ selected=peaks[np.argsort(s[peaks])[-max_polyphony:]]
189
+ used=set()
190
+ for k in selected:
191
+ if s[k]<max(.15,spec.max()*.015):continue
192
+ p=int(round(69+12*np.log2(freq[k]/440)))
193
+ if p in used or not 36<=p<=108:continue
194
+ used.add(p)
195
+ vel=int(np.clip(90+25*np.log10(max(s[k]/spec.max(),1e-6)),30,110))
196
+ notes.append(Note(p,vel,t*HOP/SR,step*HOP/SR))
197
+ return notes
198
+
199
+ def make_log_band_loss(y):
200
+ """Cache fixed target analysis for repeated renderer trials."""
201
+ target_log = np.log1p(features(y))
202
+ samples = len(y)
203
+
204
+ def loss(estimate):
205
+ estimate_log = np.log1p(features(estimate[:samples]))
206
+ return float(np.mean(np.abs(target_log - estimate_log)))
207
+
208
+ return loss
209
+
210
+ def metrics(y, estimate):
211
+ estimate=estimate[:len(y)]
212
+ a=magnitude(y); b=magnitude(estimate)
213
+ fa=filterbank()@a; fb=filterbank()@b
214
+ return dict(spectral_convergence=float(np.linalg.norm(a-b)/np.linalg.norm(a)),
215
+ log_band_mae=float(np.mean(np.abs(np.log1p(fa)-np.log1p(fb)))),
216
+ waveform_rmse=float(np.sqrt(np.mean((y-estimate)**2))),
217
+ peak=float(np.max(np.abs(estimate))))
218
+
219
+ def render_saved(piano,notes,path,seconds):
220
+ write_midi(notes,path.with_suffix('.mid'))
221
+ # Metrics use the exported MIDI read back from disk, not the surrogate.
222
+ decoded=read_midi(path.with_suffix('.mid'))
223
+ audio=piano.render(decoded,seconds)
224
+ sf.write(path.with_suffix('.wav'),audio,SR,subtype='FLOAT')
225
+ path.with_suffix('.json').write_text(json.dumps([asdict(n) for n in decoded],indent=2))
226
+ return audio
tests/test_app.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from pathlib import Path
3
+ import tempfile
4
+ import unittest
5
+ import numpy as np
6
+ import soundfile as sf
7
+ from app import prepare_audio, run, example
8
+
9
+ class AppTests(unittest.TestCase):
10
+ def test_audio_validation_and_prefix(self):
11
+ with tempfile.TemporaryDirectory() as tmp:
12
+ src=Path(tmp)/'source.wav'; out=Path(tmp)/'out.wav'
13
+ sf.write(src,np.sin(np.arange(16000)*.1),16000)
14
+ self.assertAlmostEqual(prepare_audio(src,out,.5),.5)
15
+ sf.write(src,np.zeros(16000),16000)
16
+ with self.assertRaises(Exception): prepare_audio(src,out,1)
17
+ def test_cpu_audio_pipeline(self):
18
+ events=list(run('Audio → MIDI','examples/en/source.wav','','English','',.5,20,False))
19
+ self.assertEqual(len(events),2)
20
+ self.assertIn('Complete',events[-1][0])
21
+ for path in events[-1][1:7]: self.assertTrue(Path(path).exists())
22
+ report=json.loads((Path(events[-1][6]).parent/'metrics.json').read_text())
23
+ self.assertEqual(report['pursuit']['device'],'cpu')
24
+ self.assertGreater(report['results']['refined']['notes'],0)
25
+ def test_cached_examples(self):
26
+ for language in ['en','zh']:
27
+ output=example(language)
28
+ for path in output[1:7]: self.assertTrue(Path(path).exists())
29
+
30
+ if __name__=='__main__': unittest.main()
tests/test_roundtrip.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tempfile
2
+ import unittest
3
+ from pathlib import Path
4
+ import numpy as np
5
+ from speaking_midi.core import Piano, Note, write_midi, read_midi, SR, make_dictionary, fit_temporal, metrics, make_log_band_loss
6
+
7
+ class Roundtrip(unittest.TestCase):
8
+ def test_midi_timing_and_audio(self):
9
+ notes=[Note(60,75,.12,.24),Note(64,45,.36,.12),Note(60,90,.36,.06)]
10
+ with tempfile.TemporaryDirectory() as d:
11
+ path=Path(d)/'a.mid';write_midi(notes,path); decoded=read_midi(path)
12
+ expected=sorted(notes,key=lambda n:(n.start+n.duration,n.pitch))
13
+ for a,b in zip(expected,decoded):
14
+ self.assertEqual(a.pitch,b.pitch); self.assertEqual(a.velocity,b.velocity)
15
+ self.assertAlmostEqual(a.start,b.start,places=5); self.assertAlmostEqual(a.duration,b.duration,places=5)
16
+ piano=Piano(); audio=piano.render(decoded,1)
17
+ self.assertEqual(len(audio),SR); self.assertTrue(np.isfinite(audio).all())
18
+ self.assertGreater(np.max(np.abs(audio)),.001)
19
+ piano.render([Note(90,120,0,.1)],.543)
20
+ repeated=piano.render(decoded,1)
21
+ # FluidSynth has small first-voice/block and int16 dither differences.
22
+ self.assertLess(metrics(audio,repeated)['spectral_convergence'],.01)
23
+ piano.close()
24
+
25
+ def test_cached_objective_matches_reported_metric(self):
26
+ rng = np.random.default_rng(123)
27
+ target = rng.normal(0, .02, SR).astype(np.float32)
28
+ objective = make_log_band_loss(target)
29
+ for estimate in [np.zeros(SR), target, np.r_[target * .6, np.zeros(SR // 2)]]:
30
+ self.assertAlmostEqual(objective(estimate), metrics(target, estimate)['log_band_mae'], places=7)
31
+
32
+ def test_dictionary_recovers_single_note(self):
33
+ piano=Piano(); atoms,params,_=make_dictionary(piano,'outputs/cache')
34
+ y=piano.render([Note(60,75,0,.12)],.7)
35
+ notes,trace=fit_temporal(y,atoms,params,max_notes=1)
36
+ self.assertEqual(len(notes),1); self.assertEqual(notes[0].pitch,60)
37
+ self.assertEqual(notes[0].velocity,75); self.assertAlmostEqual(notes[0].duration,.12)
38
+ self.assertLessEqual(notes[0].start,.01)
39
+ estimate=piano.render(notes,.7)
40
+ self.assertLess(metrics(y,estimate)['spectral_convergence'],.1)
41
+ piano.close()
42
+
43
+ if __name__=='__main__': unittest.main()