|
1 | 1 | # The Virtual Keyboard
|
2 | 2 |
|
3 |
| -A virtual piano keyboard app, written in Typescript and React. Suitable for teaching and learning!! |
| 3 | +A virtual piano keyboard app that runs in the browser, written using Typescript and React. Suitable for teaching and learning!! |
| 4 | + |
| 5 | + |
4 | 6 |
|
5 | 7 | ### Features
|
6 | 8 | - Shows notes on the grand staff as you play them on the keyboard.
|
7 | 9 | - Responds to keyboard and mouse input
|
8 |
| -- Responds to MIDI input in Chrome and Edge browsers |
9 |
| -- Many settings to customize the functionality and display |
10 |
| - - Show/hide piano, staff, note names |
| 10 | +- Responds to MIDI keyboard input in Chrome and Edge browsers, using the Web MIDI API |
| 11 | +- Audio output (piano and synth sounds) via Tone.js |
| 12 | +- Many settings to customize the functionality and display: |
| 13 | + - Show/hide piano, staff, note names, keyboard shortcuts |
11 | 14 | - Change the piano range
|
12 | 15 | - Make the notes sticky/sustain
|
13 | 16 | - Re-size the keyboard for small and big screens.
|
14 | 17 |
|
15 |
| - |
16 |
| - |
17 |
| -### Technologies used |
18 |
| -- To display the music staff: [abcjs library](https://paulrosen.github.io/abcjs/) |
19 |
| -- To connect to MIDI devices: [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API) and [JZZ](https://github.com/jazz-soft/JZZ) library |
20 |
| -- For React magic: uses custom hooks and useReducer for state logic (see `src/state` folder) |
21 |
| -- For CSS magic: uses Sass, CSS variables, calc(), etc. (see `src/styles` folder) |
| 18 | +### Libraries and features used |
| 19 | +- To display the music staff: the amazing [abcjs library](https://paulrosen.github.io/abcjs/) by Paul Rosen |
| 20 | +- To connect to MIDI devices: the [JZZ](https://github.com/jazz-soft/JZZ) library, which is a wrapper over the [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API) |
| 21 | +- [Tone.js](https://tonejs.github.io/) for playing audio via the Web Audio API |
| 22 | +- Piano samples from the ["Little Lizard" library](https://linuxmusicians.com/viewtopic.php?t=12046) |
| 23 | +- React bells and whistles: uses custom hooks and useReducer for state logic (see `src/state` folder) |
| 24 | +- CSS bells andwhistles: uses Sass, CSS variables, calc(), etc. (see `src/styles` folder) |
22 | 25 | - Settings are saved using browser's Local Storage
|
23 | 26 |
|
24 | 27 | ### In development
|
25 |
| -- Touch support and audio output! |
26 |
| - |
27 |
| - |
28 |
| - |
| 28 | +- Touch support |
| 29 | +- Offline mode (using service workers) |
29 | 30 |
|
30 |
| -## Acknowledgements |
31 |
| -- Paul Rosen's amazing [abcjs library](https://paulrosen.github.io/abcjs/) for the music staff display |
32 |
| -- The [JZZ library](https://jazz-soft.net/doc/JZZ/jzz.html) for connecting to MIDI devices |
33 |
| -- The React team and [Create React App](https://github.com/facebook/create-react-app). |
| 31 | +## Inspirations |
34 | 32 | - [This video](https://www.youtube.com/watch?v=kMf1XWVY2cA) from [Suboptimal Engineer](https://github.com/SuboptimalEng) for the initial setup, code, and inspiration
|
| 33 | +- Examples of cool little music apps from [Chrome Music Lab](https://musiclab.chromeexperiments.com/) |
35 | 34 |
|
36 | 35 | ## Available Scripts
|
37 | 36 |
|
|
0 commit comments