diff options
| author | Jack Humbert <jack.humb@gmail.com> | 2017-07-21 13:30:57 -0400 |
|---|---|---|
| committer | Jack Humbert <jack.humb@gmail.com> | 2017-07-23 14:59:29 -0400 |
| commit | 9abbbe70890ee0a0c619411c76a2c7b82b1b49d5 (patch) | |
| tree | f9c304b7eca97a91b271c3fd4be3ea0e41884b9f /docs | |
| parent | f407f3e8deea433ae4bca61f17d8ed8ed208bb27 (diff) | |
| download | qmk_firmware-9abbbe70890ee0a0c619411c76a2c7b82b1b49d5.tar.gz qmk_firmware-9abbbe70890ee0a0c619411c76a2c7b82b1b49d5.zip | |
update audio documentation
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/modding_your_keyboard.md | 59 |
1 files changed, 23 insertions, 36 deletions
diff --git a/docs/modding_your_keyboard.md b/docs/modding_your_keyboard.md index 29b0b3b0f..ab40bdf93 100644 --- a/docs/modding_your_keyboard.md +++ b/docs/modding_your_keyboard.md | |||
| @@ -1,61 +1,48 @@ | |||
| 1 | 1 | ||
| 2 | ## Audio output from a speaker | 2 | ## Audio output from a speaker |
| 3 | 3 | ||
| 4 | Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any 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 | 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. |
| 5 | 5 | ||
| 6 | If you add this to your `rules.mk`: | 6 | 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: |
| 7 | 7 | ||
| 8 | ``` | 8 | ``` |
| 9 | AUDIO_ENABLE = yes | 9 | STARTUP_SONG // plays when the keyboard starts up (audio.c) |
| 10 | GOODBYE_SONG // plays when you press the RESET key (quantum.c) | ||
| 11 | AG_NORM_SONG // plays when you press AG_NORM (quantum.c) | ||
| 12 | AG_SWAP_SONG // plays when you press AG_SWAP (quantum.c) | ||
| 13 | MUSIC_ON_SONG // plays when music mode is activated (process_music.c) | ||
| 14 | MUSIC_OFF_SONG // plays when music mode is deactivated (process_music.c) | ||
| 10 | ``` | 15 | ``` |
| 11 | 16 | ||
| 12 | there's a couple different sounds that will automatically be enabled without any other configuration: | 17 | You can override the default songs by doing something like this in your `config.h`: |
| 13 | 18 | ||
| 14 | 19 | ```c | |
| 15 | If you want to implement something custom, you can | ||
| 16 | |||
| 17 | ``` | ||
| 18 | #ifdef AUDIO_ENABLE | 20 | #ifdef AUDIO_ENABLE |
| 19 | #include "audio.h" | 21 | #define STARTUP_SONG SONG(STARTUP_SOUND) |
| 20 | #endif | 22 | #endif |
| 21 | ``` | 23 | ``` |
| 22 | 24 | ||
| 23 | Then, lower down the file: | 25 | 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). |
| 24 | |||
| 25 | ``` | ||
| 26 | float tone_startup[][2] = { | ||
| 27 | ED_NOTE(_E7 ), | ||
| 28 | E__NOTE(_CS7), | ||
| 29 | E__NOTE(_E6 ), | ||
| 30 | E__NOTE(_A6 ), | ||
| 31 | M__NOTE(_CS7, 20) | ||
| 32 | }; | ||
| 33 | ``` | ||
| 34 | |||
| 35 | This is how you write a song. Each of these lines is a note, so we have a little ditty composed of five notes here. | ||
| 36 | 26 | ||
| 37 | Then, we have this chunk: | 27 | To play a custom sound at a particular time, you can define a song like this (near the top of the file): |
| 38 | 28 | ||
| 29 | ```c | ||
| 30 | float my_song[][2] = SONG(QWERTY_SOUND); | ||
| 39 | ``` | 31 | ``` |
| 40 | float tone_qwerty[][2] = SONG(QWERTY_SOUND); | ||
| 41 | float tone_dvorak[][2] = SONG(DVORAK_SOUND); | ||
| 42 | float tone_colemak[][2] = SONG(COLEMAK_SOUND); | ||
| 43 | float tone_plover[][2] = SONG(PLOVER_SOUND); | ||
| 44 | float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); | ||
| 45 | 32 | ||
| 46 | float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | 33 | And then play your song like this: |
| 47 | float goodbye[][2] = SONG(GOODBYE_SOUND); | ||
| 48 | ``` | ||
| 49 | 34 | ||
| 50 | Wherein we bind predefined songs (from [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives. | 35 | ```c |
| 36 | PLAY_SONG(my_song); | ||
| 37 | ``` | ||
| 51 | 38 | ||
| 52 | So now you have something called `tone_plover` for example. How do you make it play the Plover tune, then? If you look further down the keymap, you'll see this: | 39 | Alternatively, you can play it in a loop like this: |
| 53 | 40 | ||
| 54 | ``` | 41 | ```c |
| 55 | PLAY_SONG(tone_plover); // song name | 42 | PLAY_LOOP(my_song); |
| 56 | ``` | 43 | ``` |
| 57 | 44 | ||
| 58 | This is inside one of the macros. So when that macro executes, your keyboard plays that particular chime. | 45 | 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. |
| 59 | 46 | ||
| 60 | ## Music mode | 47 | ## Music mode |
| 61 | 48 | ||
