aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/modding_your_keyboard.md59
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
4Your 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. 4Your 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
6If you add this to your `rules.mk`: 6If 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```
9AUDIO_ENABLE = yes 9STARTUP_SONG // plays when the keyboard starts up (audio.c)
10GOODBYE_SONG // plays when you press the RESET key (quantum.c)
11AG_NORM_SONG // plays when you press AG_NORM (quantum.c)
12AG_SWAP_SONG // plays when you press AG_SWAP (quantum.c)
13MUSIC_ON_SONG // plays when music mode is activated (process_music.c)
14MUSIC_OFF_SONG // plays when music mode is deactivated (process_music.c)
10``` 15```
11 16
12there's a couple different sounds that will automatically be enabled without any other configuration: 17You can override the default songs by doing something like this in your `config.h`:
13 18
14 19```c
15If 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
23Then, lower down the file: 25A 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```
26float 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
35This 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
37Then, we have this chunk: 27To 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
30float my_song[][2] = SONG(QWERTY_SOUND);
39``` 31```
40float tone_qwerty[][2] = SONG(QWERTY_SOUND);
41float tone_dvorak[][2] = SONG(DVORAK_SOUND);
42float tone_colemak[][2] = SONG(COLEMAK_SOUND);
43float tone_plover[][2] = SONG(PLOVER_SOUND);
44float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
45 32
46float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); 33And then play your song like this:
47float goodbye[][2] = SONG(GOODBYE_SOUND);
48```
49 34
50Wherein 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
36PLAY_SONG(my_song);
37```
51 38
52So 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: 39Alternatively, you can play it in a loop like this:
53 40
54``` 41```c
55PLAY_SONG(tone_plover); // song name 42PLAY_LOOP(my_song);
56``` 43```
57 44
58This is inside one of the macros. So when that macro executes, your keyboard plays that particular chime. 45It'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