diff options
Diffstat (limited to 'docs/feature_audio.md')
| -rw-r--r-- | docs/feature_audio.md | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/docs/feature_audio.md b/docs/feature_audio.md index 6b476880d..c142ff69c 100644 --- a/docs/feature_audio.md +++ b/docs/feature_audio.md | |||
| @@ -1,5 +1,91 @@ | |||
| 1 | # Audio | 1 | # Audio |
| 2 | 2 | ||
| 3 | Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any AVR keyboard that allows access to the C6 or B5 port (`#define C6_AUDIO` and/or `#define B5_AUDIO`), you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes. | ||
| 4 | |||
| 5 | If you add `AUDIO_ENABLE = yes` to your `rules.mk`, there's a couple different sounds that will automatically be enabled without any other configuration: | ||
| 6 | |||
| 7 | ``` | ||
| 8 | STARTUP_SONG // plays when the keyboard starts up (audio.c) | ||
| 9 | GOODBYE_SONG // plays when you press the RESET key (quantum.c) | ||
| 10 | AG_NORM_SONG // plays when you press AG_NORM (quantum.c) | ||
| 11 | AG_SWAP_SONG // plays when you press AG_SWAP (quantum.c) | ||
| 12 | MUSIC_ON_SONG // plays when music mode is activated (process_music.c) | ||
| 13 | MUSIC_OFF_SONG // plays when music mode is deactivated (process_music.c) | ||
| 14 | CHROMATIC_SONG // plays when the chromatic music mode is selected (process_music.c) | ||
| 15 | GUITAR_SONG // plays when the guitar music mode is selected (process_music.c) | ||
| 16 | VIOLIN_SONG // plays when the violin music mode is selected (process_music.c) | ||
| 17 | MAJOR_SONG // plays when the major music mode is selected (process_music.c) | ||
| 18 | ``` | ||
| 19 | |||
| 20 | You can override the default songs by doing something like this in your `config.h`: | ||
| 21 | |||
| 22 | ```c | ||
| 23 | #ifdef AUDIO_ENABLE | ||
| 24 | #define STARTUP_SONG SONG(STARTUP_SOUND) | ||
| 25 | #endif | ||
| 26 | ``` | ||
| 27 | |||
| 28 | A full list of sounds can be found in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) - feel free to add your own to this list! All available notes can be seen in [quantum/audio/musical_notes.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/musical_notes.h). | ||
| 29 | |||
| 30 | To play a custom sound at a particular time, you can define a song like this (near the top of the file): | ||
| 31 | |||
| 32 | ```c | ||
| 33 | float my_song[][2] = SONG(QWERTY_SOUND); | ||
| 34 | ``` | ||
| 35 | |||
| 36 | And then play your song like this: | ||
| 37 | |||
| 38 | ```c | ||
| 39 | PLAY_SONG(my_song); | ||
| 40 | ``` | ||
| 41 | |||
| 42 | Alternatively, you can play it in a loop like this: | ||
| 43 | |||
| 44 | ```c | ||
| 45 | PLAY_LOOP(my_song); | ||
| 46 | ``` | ||
| 47 | |||
| 48 | It's advised that you wrap all audio features in `#ifdef AUDIO_ENABLE` / `#endif` to avoid causing problems when audio isn't built into the keyboard. | ||
| 49 | |||
| 50 | ## Music mode | ||
| 51 | |||
| 52 | The music mode maps your columns to a chromatic scale, and your rows to octaves. This works best with ortholinear keyboards, but can be made to work with others. All keycodes less than `0xFF` get blocked, so you won't type while playing notes - if you have special keys/mods, those will still work. A work-around for this is to jump to a different layer with KC_NOs before (or after) enabling music mode. | ||
| 53 | |||
| 54 | Recording is experimental due to some memory issues - if you experience some weird behavior, unplugging/replugging your keyboard will fix things. | ||
| 55 | |||
| 56 | Keycodes available: | ||
| 57 | |||
| 58 | * `MU_ON` - Turn music mode on | ||
| 59 | * `MU_OFF` - Turn music mode off | ||
| 60 | * `MU_TOG` - Toggle music mode | ||
| 61 | * `MU_MOD` - Cycle through the music modes: | ||
| 62 | * `CHROMATIC_MODE` - Chromatic scale, row changes the octave | ||
| 63 | * `GUITAR_MODE` - Chromatic scale, but the row changes the string (+5 st) | ||
| 64 | * `VIOLIN_MODE` - Chromatic scale, but the row changes the string (+7 st) | ||
| 65 | * `MAJOR_MODE` - Major scale | ||
| 66 | |||
| 67 | In music mode, the following keycodes work differently, and don't pass through: | ||
| 68 | |||
| 69 | * `LCTL` - start a recording | ||
| 70 | * `LALT` - stop recording/stop playing | ||
| 71 | * `LGUI` - play recording | ||
| 72 | * `KC_UP` - speed-up playback | ||
| 73 | * `KC_DOWN` - slow-down playback | ||
| 74 | |||
| 75 | By default, `MUSIC_MASK` is set to `keycode < 0xFF` which means keycodes less than `0xFF` are turned into notes, and don't output anything. You can change this by defining this in your `config.h` like this: | ||
| 76 | |||
| 77 | #define MUSIC_MASK keycode != KC_NO | ||
| 78 | |||
| 79 | Which will capture all keycodes - be careful, this will get you stuck in music mode until you restart your keyboard! | ||
| 80 | |||
| 81 | The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`: | ||
| 82 | |||
| 83 | #define PITCH_STANDARD_A 432.0f | ||
| 84 | |||
| 85 | ## MIDI functionalty | ||
| 86 | |||
| 87 | This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile. | ||
| 88 | |||
| 3 | <!-- FIXME: this formatting needs work | 89 | <!-- FIXME: this formatting needs work |
| 4 | 90 | ||
| 5 | ## Audio | 91 | ## Audio |
