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.
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:
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)
20 You can override the default songs by doing something like this in your `config.h`:
24 #define STARTUP_SONG SONG(STARTUP_SOUND)
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).
30 To play a custom sound at a particular time, you can define a song like this (near the top of the file):
33 float my_song[][2] = SONG(QWERTY_SOUND);
36 And then play your song like this:
42 Alternatively, you can play it in a loop like this:
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.
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.
54 Recording is experimental due to some memory issues - if you experience some weird behavior, unplugging/replugging your keyboard will fix things.
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
67 In music mode, the following keycodes work differently, and don't pass through:
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
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:
77 #define MUSIC_MASK keycode != KC_NO
79 Which will capture all keycodes - be careful, this will get you stuck in music mode until you restart your keyboard!
81 The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
83 #define PITCH_STANDARD_A 432.0f
85 You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller. To disable it, add this to your `confid.h`:
91 This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
93 <!-- FIXME: this formatting needs work
103 #ifdef FAUXCLICKY_ENABLE
109 // Music mode on/off/toggle
114 // Music voice iterate
122 #if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
123 MI_ON, // send midi notes when music mode is enabled
124 MI_OFF, // don't send midi notes when music mode is enabled
130 MI_C = MIDI_TONE_MIN,
148 MIDI_TONE_KEYCODE_OCTAVES > 1
171 MIDI_OCTAVE_MIN = MI_OCT_N2,
172 MIDI_OCTAVE_MAX = MI_OCT_7,
173 MI_OCTD, // octave down
174 MI_OCTU, // octave up
178 MIDI_TRANSPOSE_MIN = MI_TRNS_N6,
179 MIDI_TRANSPOSE_MAX = MI_TRNS_6,
180 MI_TRNSD, // transpose down
181 MI_TRNSU, // transpose up
184 MIDI_VELOCITY_MIN = MI_VEL_1,
185 MIDI_VELOCITY_MAX = MI_VEL_9,
186 MI_VELD, // velocity down
187 MI_VELU, // velocity up
190 MIDI_CHANNEL_MIN = MI_CH1
191 MIDI_CHANNEL_MAX = MI_CH16,
192 MI_CHD, // previous channel
193 MI_CHU, // next channel
195 MI_ALLOFF, // all notes off
198 MI_PORT, // portamento
199 MI_SOST, // sostenuto
200 MI_SOFT, // soft pedal
203 MI_MOD, // modulation
204 MI_MODSD, // decrease modulation speed
205 MI_MODSU, // increase modulation speed
206 #endif // MIDI_ADVANCED