virtual-piano-player 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/SKILL.md +135 -70
- package/package.json +1 -1
- package/scripts/play.js +30 -0
- package/scripts/songs/blue.json +5217 -0
- package/scripts/songs/every_living_breathing_moment.json +3026 -0
- package/scripts/songs/golden_hour.json +19021 -0
- package/scripts/songs/hijo_de_la_luna.json +11461 -0
- package/scripts/songs/hotline.json +2312 -0
- package/scripts/songs/i_thought_i_saw_your_face_today.json +3859 -0
- package/scripts/songs/idea_10.json +7541 -0
- package/scripts/songs/love_story.json +11594 -0
- package/scripts/songs/pretty_little_baby.json +5287 -0
- package/scripts/songs/solas.json +5665 -0
package/README.md
CHANGED
|
@@ -67,6 +67,16 @@ npm install
|
|
|
67
67
|
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
68
68
|
| `amelie` | `play-amelie` | Amélie (Comptine d'un autre été) | Yann Tiersen | E minor | ~122s |
|
|
69
69
|
| `nocturne` | `play-nocturne` | Nocturne Op. 9 No. 2 (Andante) | Frédéric Chopin (Csabay Domonkos) | Eb major | ~248s |
|
|
70
|
+
| `golden` | `play-golden` | Golden Hour | JVKE | E major | ~207s |
|
|
71
|
+
| `idea10` | `play-idea10` | Idea 10 | Gibran Alcocer | G minor | ~121s |
|
|
72
|
+
| `solas` | `play-solas` | Solas | Jamie Duffy | E minor | ~122s |
|
|
73
|
+
| `blue` | `play-blue` | Blue | Yung Kai | E major | ~105s |
|
|
74
|
+
| `lovestory` | `play-lovestory` | Love Story | Indila | Bb minor | ~253s |
|
|
75
|
+
| `luna` | `play-luna` | Hijo de la Luna | Mecano (José María Cano) | A minor | ~268s |
|
|
76
|
+
| `baby` | `play-baby` | Pretty Little Baby | Connie Francis | Db major | ~94s |
|
|
77
|
+
| `hotline` | `play-hotline` | Hotline (Edit) | Billie Eilish | A minor | ~94s |
|
|
78
|
+
| `face` | `play-face` | I Thought I Saw Your Face Today | She & Him (Zooey Deschanel) | G major | ~86s |
|
|
79
|
+
| `moment` | `play-moment` | Every Living Breathing Moment | Grant Steller | F major | ~101s |
|
|
70
80
|
| `succession` | `play-succession` | Succession (Main Title Theme) | Nicholas Britell | C minor | ~89s |
|
|
71
81
|
| `still` | `play-still` | Still D.R.E. (Polished Master) | Dr. Dre ft. Snoop Dogg | A minor | ~66s |
|
|
72
82
|
| `paint` | `play-paint` | Paint It, Black | The Rolling Stones (Westworld) | E minor | ~50s |
|
package/SKILL.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: virtual-piano-player
|
|
3
|
-
description: Controls the browser to navigate to OnlinePianist (https://www.onlinepianist.com/virtual-piano), configure the 88-key piano interface (set visible keys to Max), and play classical, pop, jazz, or custom piano solos, melodies, and chords using automated keyboard simulation and Web Audio.
|
|
3
|
+
description: Controls the browser to navigate to OnlinePianist (https://www.onlinepianist.com/virtual-piano), configure the 88-key piano interface (set visible keys to Max), and play classical, pop, jazz, or custom piano solos, melodies, and chords using automated keyboard simulation and studio-grade Web Audio synthesis.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Virtual Piano Player Skill
|
|
6
|
+
# Virtual Piano Player Skill & CLI
|
|
7
7
|
|
|
8
|
-
This skill automates the **[OnlinePianist Virtual Piano](https://www.onlinepianist.com/virtual-piano)** in
|
|
8
|
+
This skill and standalone CLI automates the **[OnlinePianist Virtual Piano](https://www.onlinepianist.com/virtual-piano)** in Google Chrome. It automatically expands the keyboard to the full **88 visible keys**, activates the sustain pedal, connects directly into the browser's Web Audio synthesis engine (**Studio Direct** audio bridge), and performs classical piano solos, chords, or custom compositions with expressive timing and visual glow effects on each key.
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -13,46 +13,94 @@ This skill automates the **[OnlinePianist Virtual Piano](https://www.onlinepiani
|
|
|
13
13
|
|
|
14
14
|
Activate this skill whenever the user:
|
|
15
15
|
- Asks to play, compose, or perform a song, melody, or solo on the OnlinePianist virtual piano (`https://www.onlinepianist.com/virtual-piano`).
|
|
16
|
-
- Mentions playing piano in the browser, controlling keyboard keys, or playing
|
|
16
|
+
- Mentions playing piano in the browser, controlling keyboard keys, or playing works by composers like Chopin, Yann Tiersen, Beethoven, Vivaldi, Nicholas Britell, or Dr. Dre.
|
|
17
17
|
- Requests setting visible keys to max / full 88-key piano view and performing music.
|
|
18
|
+
- Asks to manage, list, add, or publish songs to the virtual piano package or repository.
|
|
18
19
|
|
|
19
20
|
---
|
|
20
21
|
|
|
21
|
-
## Directory Structure
|
|
22
|
+
## Project & Directory Structure
|
|
22
23
|
|
|
23
24
|
```text
|
|
24
25
|
virtual-piano-player/
|
|
25
|
-
├──
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
├── bin/
|
|
27
|
+
│ └── cli.js # Executable CLI binary (piano, virtual-piano, npx runner)
|
|
28
|
+
├── scripts/
|
|
29
|
+
│ ├── play.js # Master playback engine, audio bridge & lock manager
|
|
30
|
+
│ ├── list.sh # In-directory bash catalog runner
|
|
31
|
+
│ └── songs/ # Curated library of high-precision song JSONs
|
|
32
|
+
│ ├── golden_hour.json # JVKE's Golden Hour (unabridged cascading piano ~207s)
|
|
33
|
+
│ ├── idea_10.json # Gibran Alcocer's Idea 10 (3/4 waltz arpeggios ~121s)
|
|
34
|
+
│ ├── solas.json # Jamie Duffy's Solas (emotive Celtic piano solo ~122s)
|
|
35
|
+
│ ├── blue.json # Yung Kai's Blue (tender ballad ~105s)
|
|
36
|
+
│ ├── love_story.json # Indila's Love Story (Bb minor harp & piano ~253s)
|
|
37
|
+
│ ├── hijo_de_la_luna.json # Mecano's Hijo de la Luna (expressive A minor ~268s)
|
|
38
|
+
│ ├── pretty_little_baby.json # Connie Francis' Pretty Little Baby (1962 pop swing ~94s)
|
|
39
|
+
│ ├── hotline.json # Billie Eilish's Hotline Edit (haunting ballad ~94s)
|
|
40
|
+
│ ├── i_thought_i_saw_your_face_today.json # She & Him's 60s folk swing ~86s
|
|
41
|
+
│ ├── every_living_breathing_moment.json # Grant Steller's cinematic theme ~101s
|
|
42
|
+
│ ├── chopin_nocturne.json # Chopin's Nocturne Op. 9 No. 2 (Csabay Domonkos perf. ~248s)
|
|
43
|
+
│ ├── chopin_etude.json # 60s Fast Chopin Impromptu-Etude in C# minor
|
|
44
|
+
│ ├── vivaldi_winter.json # Vivaldi's Winter (L'Inverno - Allegro non molto)
|
|
45
|
+
│ ├── paint_it_black.json # The Rolling Stones' Paint It, Black
|
|
46
|
+
│ ├── still_dre.json # Dr. Dre & Snoop Dogg's Still D.R.E.
|
|
47
|
+
│ ├── succession.json # Nicholas Britell's Succession (Main Title Theme)
|
|
48
|
+
│ ├── amelie.json # Yann Tiersen's Comptine d'un autre été (Amélie)
|
|
49
|
+
│ └── fur_elise.json # Beethoven's Für Elise theme
|
|
50
|
+
├── index.js # Programmatic Node.js exports (play, listSongs, loadSong)
|
|
51
|
+
├── package.json # NPM manifest with bin mappings, files whitelist & dependencies
|
|
52
|
+
├── package-lock.json # Exact dependency lockfile (puppeteer-core)
|
|
53
|
+
├── SKILL.md # Agent skill instructions & key mappings
|
|
54
|
+
├── skill.json # Skill metadata for Antigravity & agent discovery
|
|
55
|
+
├── README.md # Public documentation, quickstart & catalog table
|
|
56
|
+
├── LICENSE # MIT License (AxmadjonTeacher)
|
|
57
|
+
└── .gitignore # Ignores node_modules/, scratch/, /tmp profiles, logs
|
|
38
58
|
```
|
|
39
59
|
|
|
40
60
|
---
|
|
41
61
|
|
|
62
|
+
## 🌐 Public Distribution & Releases
|
|
63
|
+
|
|
64
|
+
- **NPM Package**: [`virtual-piano-player`](https://www.npmjs.com/package/virtual-piano-player) (v1.0.0 live)
|
|
65
|
+
- **GitHub Repository**: [https://github.com/AxmadjonTeacher/virtual-piano](https://github.com/AxmadjonTeacher/virtual-piano)
|
|
66
|
+
- **Global Binaries**: `piano`, `virtual-piano`
|
|
67
|
+
|
|
68
|
+
### 📦 Summary of Future Releases
|
|
69
|
+
|
|
70
|
+
Whenever you add new songs or tweak code, just run:
|
|
71
|
+
|
|
72
|
+
cd ~/.agents/skills/virtual-piano-player
|
|
73
|
+
npm version patch # Increments 1.0.0 -> 1.0.1 and tags git
|
|
74
|
+
git push origin main --tags
|
|
75
|
+
npm publish
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
42
79
|
## Quick Usage
|
|
43
80
|
|
|
44
|
-
### View
|
|
45
|
-
Run any of the following to see the catalog table with all titles, composers, durations, and keys:
|
|
81
|
+
### 1. View Song Catalog:
|
|
82
|
+
Run any of the following to see the interactive catalog table with all titles, composers, durations, and keys:
|
|
46
83
|
```bash
|
|
47
|
-
piano # From anywhere (via zsh function)
|
|
48
|
-
|
|
84
|
+
piano # From anywhere (via zsh function & npm link)
|
|
85
|
+
virtual-piano # Direct npm binary
|
|
86
|
+
songs # Shell shortcut
|
|
49
87
|
./scripts/list.sh # When inside virtual-piano-player directory
|
|
50
88
|
node scripts/play.js --list # Direct Node CLI
|
|
51
89
|
```
|
|
52
90
|
|
|
53
|
-
### Play Songs via Shell Shortcuts:
|
|
91
|
+
### 2. Play Songs via Shell Shortcuts:
|
|
54
92
|
```bash
|
|
55
|
-
# Play with master "piano" command:
|
|
93
|
+
# Play with master "piano" or "virtual-piano" command:
|
|
94
|
+
piano golden # JVKE - Golden Hour (unabridged cascading piano)
|
|
95
|
+
piano idea10 # Gibran Alcocer - Idea 10 (3/4 waltz arpeggios)
|
|
96
|
+
piano solas # Jamie Duffy - Solas (emotive Celtic piano solo)
|
|
97
|
+
piano blue # Yung Kai - Blue (tender ballad)
|
|
98
|
+
piano lovestory # Indila - Love Story (Bb minor harp & piano)
|
|
99
|
+
piano luna # Mecano - Hijo de la Luna (expressive A minor)
|
|
100
|
+
piano baby # Connie Francis - Pretty Little Baby (1962 pop swing)
|
|
101
|
+
piano hotline # Billie Eilish - Hotline Edit (haunting ballad)
|
|
102
|
+
piano face # She & Him - I Thought I Saw Your Face Today
|
|
103
|
+
piano moment # Grant Steller - Every Living Breathing Moment
|
|
56
104
|
piano nocturne # Chopin - Nocturnes, Op. 9: No. 2 (Domonkos Csabay)
|
|
57
105
|
piano amelie # Yann Tiersen - Comptine d'un autre été (Amélie)
|
|
58
106
|
piano succession # Nicholas Britell - Succession Main Title Theme
|
|
@@ -63,6 +111,16 @@ piano chopin # Chopin - Fast Impromptu-Etude
|
|
|
63
111
|
piano elise # Beethoven - Für Elise
|
|
64
112
|
|
|
65
113
|
# Or play with direct shortcut aliases:
|
|
114
|
+
play-golden
|
|
115
|
+
play-idea10
|
|
116
|
+
play-solas
|
|
117
|
+
play-blue
|
|
118
|
+
play-lovestory
|
|
119
|
+
play-luna
|
|
120
|
+
play-baby
|
|
121
|
+
play-hotline
|
|
122
|
+
play-face
|
|
123
|
+
play-moment
|
|
66
124
|
play-nocturne
|
|
67
125
|
play-amelie
|
|
68
126
|
play-succession
|
|
@@ -72,13 +130,49 @@ play-winter
|
|
|
72
130
|
play-chopin
|
|
73
131
|
play-elise
|
|
74
132
|
|
|
75
|
-
# Play at custom tempo (e.g. 1.
|
|
76
|
-
piano
|
|
133
|
+
# Play at custom tempo (e.g. 1.15x speed):
|
|
134
|
+
piano golden --tempo 1.15
|
|
135
|
+
|
|
136
|
+
# Play headlessly (for audio testing/CI):
|
|
137
|
+
piano elise --headless true
|
|
77
138
|
|
|
78
139
|
# Play a custom song JSON file:
|
|
79
140
|
piano --file /path/to/my_song.json
|
|
80
141
|
```
|
|
81
142
|
|
|
143
|
+
### 3. Instant Zero-Install Execution (NPX):
|
|
144
|
+
```bash
|
|
145
|
+
npx virtual-piano-player golden
|
|
146
|
+
npx virtual-piano-player solas
|
|
147
|
+
npx virtual-piano-player idea10
|
|
148
|
+
npx virtual-piano-player amelie
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 🎵 Song Catalog Reference
|
|
154
|
+
|
|
155
|
+
| Alias | Shortcut | Title | Composer / Artist | Key | Duration | Notes |
|
|
156
|
+
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
|
157
|
+
| `amelie` | `play-amelie` | Amélie (Comptine d'un autre été) | Yann Tiersen | E minor | ~122s | 945 notes, client timeline |
|
|
158
|
+
| `nocturne` | `play-nocturne` | Nocturne Op. 9 No. 2 (Andante) | Frédéric Chopin (Csabay Domonkos) | Eb major | ~248s | 1,242 notes, full unabridged |
|
|
159
|
+
| `golden` | `play-golden` | Golden Hour | JVKE | E major | ~207s | 2,716 notes, sparkling arpeggios |
|
|
160
|
+
| `idea10` | `play-idea10` | Idea 10 | Gibran Alcocer | G minor | ~121s | 1,076 notes, 3/4 waltz arpeggios |
|
|
161
|
+
| `solas` | `play-solas` | Solas | Jamie Duffy | E minor | ~122s | 808 notes, emotive Celtic piano |
|
|
162
|
+
| `blue` | `play-blue` | Blue | Yung Kai | E major | ~105s | 744 notes, warm tender chords |
|
|
163
|
+
| `lovestory` | `play-lovestory` | Love Story | Indila | Bb minor | ~253s | 1,655 notes, concert harp & piano |
|
|
164
|
+
| `luna` | `play-luna` | Hijo de la Luna | Mecano (José María Cano) | A minor | ~268s | 1,636 notes, expressive piano score |
|
|
165
|
+
| `baby` | `play-baby` | Pretty Little Baby | Connie Francis | Db major | ~94s | 754 notes, 1962 pop swing |
|
|
166
|
+
| `hotline` | `play-hotline` | Hotline (Edit) | Billie Eilish | A minor | ~94s | 329 notes, intimate acoustic ballad |
|
|
167
|
+
| `face` | `play-face` | I Thought I Saw Your Face Today | She & Him (Zooey Deschanel) | G major | ~86s | 550 notes, 60s folk pop swing |
|
|
168
|
+
| `moment` | `play-moment` | Every Living Breathing Moment | Grant Steller | F major | ~101s | 431 notes, cinematic film score |
|
|
169
|
+
| `succession` | `play-succession` | Succession (Main Title Theme) | Nicholas Britell | C minor | ~89s | 390 notes, hip-hop/classical |
|
|
170
|
+
| `still` | `play-still` | Still D.R.E. (Polished Master) | Dr. Dre ft. Snoop Dogg | A minor | ~66s | 374 notes, classic 8-beat loop |
|
|
171
|
+
| `paint` | `play-paint` | Paint It, Black | The Rolling Stones (Westworld) | E minor | ~50s | 98 events, driving rock rhythm |
|
|
172
|
+
| `winter` | `play-winter` | Winter (L'Inverno - Allegro) | Antonio Vivaldi | F minor | ~45s | 80 events, rapid violin runs |
|
|
173
|
+
| `chopin` | `play-chopin` | Impromptu-Etude in C# minor | Frédéric Chopin style | C# minor | ~60s | 257 events, tempestuous arpeggios |
|
|
174
|
+
| `elise` | `play-elise` | Für Elise (Bagatelle No. 25) | Ludwig van Beethoven | A minor | ~25s | 53 events, famous theme |
|
|
175
|
+
|
|
82
176
|
---
|
|
83
177
|
|
|
84
178
|
## 88-Key Keyboard Mapping Reference
|
|
@@ -122,48 +216,19 @@ OnlinePianist maps 5 full octaves (C2 through C7) directly to standard computer
|
|
|
122
216
|
|
|
123
217
|
---
|
|
124
218
|
|
|
125
|
-
##
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
"key": "C# minor",
|
|
139
|
-
"events": [
|
|
140
|
-
{ "keys": ["Cs2", "Cs3"], "dur": 600, "wait": 100 },
|
|
141
|
-
{ "keys": ["Gs3"], "dur": 180, "wait": 40 },
|
|
142
|
-
{ "keys": ["Cs4"], "dur": 180, "wait": 40 },
|
|
143
|
-
{ "keys": ["E4"], "dur": 180, "wait": 40 },
|
|
144
|
-
{ "keys": ["Gs3"], "dur": 180, "wait": 40 },
|
|
145
|
-
{ "keys": ["Cs4"], "dur": 180, "wait": 40 },
|
|
146
|
-
{ "keys": ["E4"], "dur": 180, "wait": 40 }
|
|
147
|
-
]
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## Procedural Automation Checklist
|
|
154
|
-
|
|
155
|
-
When automating OnlinePianist:
|
|
156
|
-
1. **Launch Google Chrome**: Use `puppeteer-core` pointing to `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`.
|
|
157
|
-
2. **Bring Window to Front**: Execute `osascript -e 'tell application "Google Chrome" to activate'` so visual animations and audio playback are front and center.
|
|
158
|
-
3. **Wait for Sound Engine**: Poll until `!document.body.innerText.includes('WARMING UP PIANO')` so Web Audio fonts are fully initialized before playing.
|
|
159
|
-
4. **Remove Ad Overlays**: Remove `#layoutDesign` and `.vp-btf-container` from the DOM to avoid pointer interception.
|
|
160
|
-
5. **Set Visible Keys to Max**:
|
|
161
|
-
- Click `.synth-btn--settings`.
|
|
162
|
-
- Find the button with text `Max` under `VISIBLE KEYS` and click it.
|
|
163
|
-
- Close the settings menu by clicking `.synth-btn--settings` again.
|
|
164
|
-
6. **Verify 88 Keys**: Ensure `document.querySelectorAll('.piano-key-white, .piano-key-black').length === 88`.
|
|
165
|
-
7. **Ensure Sustain Pedal**: Verify `.synth-btn--sustain` has class `synth-btn--on`.
|
|
166
|
-
8. **Native Audio Bridge**: Connects directly to OnlinePianist's Web Audio synthesis engine (`te.playNote(midi)`), eliminating OS keyboard modifier drops and ensuring 100% pitch fidelity for all black and white keys with simultaneous visual key glow.
|
|
219
|
+
## Technical Architecture & Automation Checklist
|
|
220
|
+
|
|
221
|
+
1. **Launch Google Chrome**: Uses `puppeteer-core` pointing to `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome` with `--start-maximized` and `--autoplay-policy=no-user-gesture-required`.
|
|
222
|
+
2. **Pre-flight Lock Cleanup & Auto-Recovery**: Prior to launching, `play.js` terminates orphaned `chrome-piano-profile` processes (`pkill -9 -f "chrome-piano-profile"`) and removes stale `/tmp/chrome-piano-profile/Singleton*` lock symlinks, preventing browser startup errors.
|
|
223
|
+
3. **Signal Trapping**: Intercepts `SIGINT` (Ctrl+C) and `SIGTERM` to close browser windows cleanly and release profile locks.
|
|
224
|
+
4. **Bring Window to Front**: Executes `osascript -e 'tell application "Google Chrome" to activate'` so visual animations and audio playback are front and center.
|
|
225
|
+
5. **Sound Engine Synchronization**: Polls until `!document.body.innerText.includes('WARMING UP PIANO')` so Web Audio samples are loaded before notes trigger.
|
|
226
|
+
6. **Set Visible Keys to Max**:
|
|
227
|
+
- Clicks `.synth-btn--settings`.
|
|
228
|
+
- Clicks `Full` layout and `Max` visible keys (88 keys).
|
|
229
|
+
- Verifies 88 keys exist in DOM (`document.querySelectorAll('.piano-key-white, .piano-key-black').length === 88`).
|
|
230
|
+
7. **Ensure Sustain Pedal**: Confirms `.synth-btn--sustain` has class `synth-btn--on`.
|
|
231
|
+
8. **Studio Direct Audio Bridge**: Connects directly into OnlinePianist's Web Audio synthesis engine (`window.__playMidi`, `window.__releaseMidi`), bypassing OS keyboard modifier drops and ensuring 100% pitch fidelity for all black and white keys with simultaneous visual key glow.
|
|
167
232
|
9. **Dual Playback Formats**:
|
|
168
|
-
- `notes`: High-precision client-side timeline arrays with exact millisecond timestamps (`startMs`, `durMs`, `midi`),
|
|
169
|
-
- `events`: Sequential
|
|
233
|
+
- `notes`: High-precision client-side timeline arrays with exact millisecond timestamps (`startMs`, `durMs`, `midi`), used for complex multi-track classical scores (Amélie, Chopin Nocturne, Still D.R.E.).
|
|
234
|
+
- `events`: Sequential note events (`keys`, `dur`, `wait`), used for classic solo and chord transcriptions.
|
package/package.json
CHANGED
package/scripts/play.js
CHANGED
|
@@ -75,6 +75,16 @@ function listSongs() {
|
|
|
75
75
|
const SONG_ORDER = [
|
|
76
76
|
{ file: 'amelie.json', alias: 'amelie', shortcut: 'play-amelie' },
|
|
77
77
|
{ file: 'chopin_nocturne.json', alias: 'nocturne', shortcut: 'play-nocturne' },
|
|
78
|
+
{ file: 'golden_hour.json', alias: 'golden', shortcut: 'play-golden' },
|
|
79
|
+
{ file: 'idea_10.json', alias: 'idea10', shortcut: 'play-idea10' },
|
|
80
|
+
{ file: 'solas.json', alias: 'solas', shortcut: 'play-solas' },
|
|
81
|
+
{ file: 'blue.json', alias: 'blue', shortcut: 'play-blue' },
|
|
82
|
+
{ file: 'love_story.json', alias: 'lovestory', shortcut: 'play-lovestory' },
|
|
83
|
+
{ file: 'hijo_de_la_luna.json', alias: 'luna', shortcut: 'play-luna' },
|
|
84
|
+
{ file: 'pretty_little_baby.json', alias: 'baby', shortcut: 'play-baby' },
|
|
85
|
+
{ file: 'hotline.json', alias: 'hotline', shortcut: 'play-hotline' },
|
|
86
|
+
{ file: 'i_thought_i_saw_your_face_today.json', alias: 'face', shortcut: 'play-face' },
|
|
87
|
+
{ file: 'every_living_breathing_moment.json', alias: 'moment', shortcut: 'play-moment' },
|
|
78
88
|
{ file: 'succession.json', alias: 'succession', shortcut: 'play-succession' },
|
|
79
89
|
{ file: 'still_dre.json', alias: 'still', shortcut: 'play-still' },
|
|
80
90
|
{ file: 'paint_it_black.json', alias: 'paint', shortcut: 'play-paint' },
|
|
@@ -227,6 +237,26 @@ function loadSong(options) {
|
|
|
227
237
|
filePath = path.join(songsDir, 'succession.json');
|
|
228
238
|
} else if (s === 'amelie' || s === 'comptine' || s === 'comptine_dun_autre_ete' || s === 'tiersen' || s === 'yann_tiersen') {
|
|
229
239
|
filePath = path.join(songsDir, 'amelie.json');
|
|
240
|
+
} else if (s === 'golden' || s === 'golden_hour' || s === 'goldenhour' || s === 'jvke' || s === 'jvke_golden_hour') {
|
|
241
|
+
filePath = path.join(songsDir, 'golden_hour.json');
|
|
242
|
+
} else if (s === 'idea10' || s === 'idea_10' || s === 'idea' || s === 'gibran' || s === 'alcocer' || s === 'gibran_alcocer') {
|
|
243
|
+
filePath = path.join(songsDir, 'idea_10.json');
|
|
244
|
+
} else if (s === 'solas' || s === 'jamie' || s === 'duffy' || s === 'jamie_duffy') {
|
|
245
|
+
filePath = path.join(songsDir, 'solas.json');
|
|
246
|
+
} else if (s === 'blue' || s === 'yungkai' || s === 'yung_kai' || s === 'kai') {
|
|
247
|
+
filePath = path.join(songsDir, 'blue.json');
|
|
248
|
+
} else if (s === 'baby' || s === 'pretty_little_baby' || s === 'pretty' || s === 'connie' || s === 'francis' || s === 'connie_francis') {
|
|
249
|
+
filePath = path.join(songsDir, 'pretty_little_baby.json');
|
|
250
|
+
} else if (s === 'hotline' || s === 'hotline_edit' || s === 'billie' || s === 'eilish' || s === 'billie_eilish' || s === 'hotline_bling') {
|
|
251
|
+
filePath = path.join(songsDir, 'hotline.json');
|
|
252
|
+
} else if (s === 'face' || s === 'i_thought_i_saw_your_face_today' || s === 'she_and_him' || s === 'she&him' || s === 'sheandhim' || s === 'deschanel') {
|
|
253
|
+
filePath = path.join(songsDir, 'i_thought_i_saw_your_face_today.json');
|
|
254
|
+
} else if (s === 'luna' || s === 'hijo_de_la_luna' || s === 'hijo' || s === 'mecano' || s === 'cano') {
|
|
255
|
+
filePath = path.join(songsDir, 'hijo_de_la_luna.json');
|
|
256
|
+
} else if (s === 'lovestory' || s === 'love_story' || s === 'indila' || s === 'love') {
|
|
257
|
+
filePath = path.join(songsDir, 'love_story.json');
|
|
258
|
+
} else if (s === 'moment' || s === 'every_living_breathing_moment' || s === 'grant' || s === 'steller' || s === 'grant_steller' || s === 'breathing') {
|
|
259
|
+
filePath = path.join(songsDir, 'every_living_breathing_moment.json');
|
|
230
260
|
} else {
|
|
231
261
|
filePath = path.join(songsDir, `${s}.json`);
|
|
232
262
|
}
|