From a09a042b8fe6a0369a7c479168492125efa24e59 Mon Sep 17 00:00:00 2001 From: Joshua Coffey <31978203+ArtfulDodge@users.noreply.github.com> Date: Sun, 25 Mar 2018 15:58:40 -0400 Subject: [PATCH] New keymap and more songs (#2609) * Added some new songs and my own keymap * Made Dodger keymap safe to use with backlight disabled * edited layer switching and added more songs * changed keymap to lowercase --- keyboards/planck/keymaps/dodger/config.h | 90 ++++++ keyboards/planck/keymaps/dodger/keymap.c | 338 ++++++++++++++++++++++ keyboards/planck/keymaps/dodger/readme.md | 2 + keyboards/planck/keymaps/dodger/rules.mk | 70 +++++ quantum/audio/song_list.h | 145 +++++++++- 5 files changed, 641 insertions(+), 4 deletions(-) create mode 100644 keyboards/planck/keymaps/dodger/config.h create mode 100644 keyboards/planck/keymaps/dodger/keymap.c create mode 100644 keyboards/planck/keymaps/dodger/readme.md create mode 100644 keyboards/planck/keymaps/dodger/rules.mk diff --git a/keyboards/planck/keymaps/dodger/config.h b/keyboards/planck/keymaps/dodger/config.h new file mode 100644 index 00000000000..c70acfdc994 --- /dev/null +++ b/keyboards/planck/keymaps/dodger/config.h @@ -0,0 +1,90 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define MANUFACTURER OLKB +#define PRODUCT Planck +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +#define QMK_ESC_OUTPUT F1 +#define QMK_ESC_INPUT D5 +#define QMK_LED E6 +#define QMK_SPEAKER C6 + +#define AUDIO_VOICES +#define C6_AUDIO + +#define BACKLIGHT_PIN B7 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 15 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#define TAPPING_TERM 200 +#endif diff --git a/keyboards/planck/keymaps/dodger/keymap.c b/keyboards/planck/keymaps/dodger/keymap.c new file mode 100644 index 00000000000..dd1e236e032 --- /dev/null +++ b/keyboards/planck/keymaps/dodger/keymap.c @@ -0,0 +1,338 @@ +/* Copyright 2015-2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "planck.h" +#include "action_layer.h" + +extern keymap_config_t keymap_config; +bool isGame = false; +bool isMusic = false; + + +enum planck_layers { + _COLEMAK, + _GAME, + _MUSIC, + _LOWER, + _RAISE, + _ADJUST, +}; + +enum planck_keycodes { + COLEMAK = SAFE_RANGE, + GCTOGG, + MCTOGG, + LOWER, + RAISE, + LENNY, + COMMENTHEAD, + RICKANDMORT, + MARIO, + MARIOE, + OVERWATCH, + DOOM, + DISNEY, + NUMBERONE, + CABBAGE, + OLDSPICE, +}; + +enum { + TD_SPC_ENT = 0, + TD_ESC_CAPS +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT), + [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | = | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt |lenny |Lower | shift|space |Raise | macro|macro2|macro3|QWERTY| + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_EQL}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS}, + {KC_LCTL, KC_LGUI, KC_LALT, LENNY, LOWER, RSFT_T(KC_BSPC), TD(TD_SPC_ENT), RAISE, COMMENTHEAD, RICKANDMORT, KC_LEFT, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | | | | [ | ] | | ( | ) | { | } | | + | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | left | down | up | right| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | _ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {_______, _______, _______, KC_LBRC, KC_RBRC, _______, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, _______, S(KC_EQL)}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, KC_UNDS}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | bl- | bl+ | GCTG | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, MCTOGG, GCTOGG} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL }, + {_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, COLEMAK, _______, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, TERM_ON, TERM_OFF, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +[_GAME] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_EQL}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS}, + {KC_LCTL, RAISE, KC_LALT, LOWER, KC_SPC, RSFT_T(KC_BSPC), TD(TD_SPC_ENT), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} +}, + +[_MUSIC] = { + {MARIO, MARIOE, OVERWATCH, DOOM, DISNEY, NUMBERONE, CABBAGE, OLDSPICE, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + +}; + +#ifdef AUDIO_ENABLE + float guitar[][2] = SONG(GUITAR_SOUND); + float mario[][2] = SONG(MARIO_THEME); + float marioe[][2] = SONG(MARIO_GAMEOVER); + float overwatch[][2] = SONG(OVERWATCH_THEME); + float doom[][2] = SONG(E1M1_DOOM); + float disney[][2] = SONG(DISNEY_SONG); + float numberone[][2] = SONG(NUMBER_ONE); + float cabbage[][2] = SONG(CABBAGE_SONG); + float oldspice[][2] = SONG(OLD_SPICE); +#endif + +void setLayer(int layer) { + if (layer == _COLEMAK) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(marioe); + #endif + set_single_persistent_default_layer(_COLEMAK); + #ifdef BACKLIGHT_ENABLE + backlight_set(0); + #endif + } else if (layer == _GAME) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(mario); + #endif + set_single_persistent_default_layer(_GAME); + #ifdef BACKLIGHT_ENABLE + backlight_set(15); + #endif + } else if (layer == _MUSIC) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(guitar); + #endif + set_single_persistent_default_layer(_MUSIC); + #ifdef BACKLIGHT_ENABLE + backlight_set(1); + #endif + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + #ifdef BACKLIGHT_ENABLE + backlight_set(0); + #endif + } + return false; + break; + case GCTOGG: + if (record->event.pressed) { + if (isGame) { + if (isMusic) + setLayer(_MUSIC); + else + setLayer(_COLEMAK); + isGame = false; + } else { + setLayer(_GAME); + isGame = true; + } + } + return false; + break; + case MCTOGG: + if (record->event.pressed) { + if (isMusic) { + if (isGame) + setLayer(_GAME); + else + setLayer(_COLEMAK); + isMusic = false; + } else { + setLayer(_MUSIC); + isMusic = true; + } + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case LENNY: + if (record->event.pressed) { + SEND_STRING("()"); + } + return false; break; + case COMMENTHEAD: + if (record->event.pressed) { + SEND_STRING("// ---------------------------------------------------------------"); + } + return false; break; + case RICKANDMORT: + if (record->event.pressed) { + SEND_STRING("// ***************************************************************"); + } + return false; break; + case MARIO: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(mario); + #endif + } + return false; break; + case MARIOE: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(marioe); + #endif + } + return false; break; + case OVERWATCH: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(overwatch); + #endif + } + return false; break; + case DOOM: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(doom); + #endif + } + return false; break; + case DISNEY: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(disney); + #endif + } + return false; break; + case NUMBERONE: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(numberone); + #endif + } + return false; break; + case CABBAGE: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(cabbage); + #endif + } + return false; break; + case OLDSPICE: + if(record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(oldspice); + #endif + } + return false; break; + } + return true; +} + +void matrix_init_user(void) { + set_single_persistent_default_layer(_COLEMAK); + isGame = false; + #ifdef BACKLIGHT_ENABLE + backlight_level(0); + #endif +} diff --git a/keyboards/planck/keymaps/dodger/readme.md b/keyboards/planck/keymaps/dodger/readme.md new file mode 100644 index 00000000000..01021081de7 --- /dev/null +++ b/keyboards/planck/keymaps/dodger/readme.md @@ -0,0 +1,2 @@ +# dodger + diff --git a/keyboards/planck/keymaps/dodger/rules.mk b/keyboards/planck/keymaps/dodger/rules.mk new file mode 100644 index 00000000000..981a3e82be9 --- /dev/null +++ b/keyboards/planck/keymaps/dodger/rules.mk @@ -0,0 +1,70 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = atmel-dfu + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +API_SYSEX_ENABLE = no +TAP_DANCE_ENABLE = yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +LAYOUTS = ortho_4x12 planck_mit planck_grid + +DEFAULT_FOLDER = planck/rev5 diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h index d52f45d16ce..a66c4d86445 100644 --- a/quantum/audio/song_list.h +++ b/quantum/audio/song_list.h @@ -188,7 +188,14 @@ Q__NOTE(_B5 ), \ Q__NOTE(_CS6), \ Q__NOTE(_D6 ), \ - Q__NOTE(_E6 ), + Q__NOTE(_E6 ), + +#define MINOR_SOUND \ + Q__NOTE(_A5 ), \ + Q__NOTE(_B5 ), \ + Q__NOTE(_C6 ), \ + Q__NOTE(_D6 ), \ + Q__NOTE(_E6 ), #define GUITAR_SOUND \ Q__NOTE(_E5 ), \ @@ -272,12 +279,142 @@ HD_NOTE(_C6), #define ZELDA_TREASURE \ - Q__NOTE(_A4), \ + Q__NOTE(_A4 ), \ Q__NOTE(_AS4), \ - Q__NOTE(_B4), \ - HD_NOTE(_C5), \ + Q__NOTE(_B4 ), \ + HD_NOTE(_C5 ), \ #define TERMINAL_SOUND \ E__NOTE(_C5 ) +#define OVERWATCH_THEME \ + HD_NOTE(_A4 ), \ + Q__NOTE(_E4 ), \ + Q__NOTE(_A4 ), \ + HD_NOTE(_B4 ), \ + Q__NOTE(_E4 ), \ + Q__NOTE(_B4 ), \ + W__NOTE(_CS5), + +#define MARIO_THEME \ + Q__NOTE(_E5), \ + H__NOTE(_E5), \ + H__NOTE(_E5), \ + Q__NOTE(_C5), \ + H__NOTE(_E5), \ + W__NOTE(_G5), \ + Q__NOTE(_G4), + +#define MARIO_GAMEOVER \ + HD_NOTE(_C5 ), \ + HD_NOTE(_G4 ), \ + H__NOTE(_E4 ), \ + H__NOTE(_A4 ), \ + H__NOTE(_B4 ), \ + H__NOTE(_A4 ), \ + H__NOTE(_AF4), \ + H__NOTE(_BF4), \ + H__NOTE(_AF4), \ + WD_NOTE(_G4 ), + +#define E1M1_DOOM \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E4 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_D4 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_C4 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_BF3), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_B3 ), \ + Q__NOTE(_C4 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E4 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_D4 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_C4 ), \ + Q__NOTE(_E3 ), \ + Q__NOTE(_E3 ), \ + H__NOTE(_BF3), + +#define DISNEY_SONG \ + H__NOTE(_G3 ), \ + H__NOTE(_G4 ), \ + H__NOTE(_F4 ), \ + H__NOTE(_E4 ), \ + H__NOTE(_CS4), \ + H__NOTE(_D4 ), \ + W__NOTE(_A4 ), \ + H__NOTE(_B3 ), \ + H__NOTE(_B4 ), \ + H__NOTE(_A4 ), \ + H__NOTE(_G4 ), \ + H__NOTE(_FS4), \ + H__NOTE(_G4 ), \ + W__NOTE(_C5 ), \ + H__NOTE(_D5 ), \ + H__NOTE(_C5 ), \ + H__NOTE(_B4 ), \ + H__NOTE(_A4 ), \ + H__NOTE(_G4 ), \ + H__NOTE(_F4 ), \ + H__NOTE(_E4 ), \ + H__NOTE(_D4 ), \ + W__NOTE(_A4 ), \ + W__NOTE(_B3 ), \ + W__NOTE(_C4 ), + +#define NUMBER_ONE \ + HD_NOTE(_F4 ), \ + Q__NOTE(_C5 ), \ + E__NOTE(_B4 ), \ + E__NOTE(_C5 ), \ + E__NOTE(_B4 ), \ + E__NOTE(_C5 ), \ + Q__NOTE(_B4 ), \ + Q__NOTE(_C5 ), \ + H__NOTE(_AF4), \ + HD_NOTE(_F4 ), \ + Q__NOTE(_F4 ), \ + Q__NOTE(_AF4), \ + Q__NOTE(_C5 ), \ + H__NOTE(_DF5), \ + H__NOTE(_AF4), \ + H__NOTE(_DF5), \ + H__NOTE(_EF5), \ + Q__NOTE(_C5 ), \ + Q__NOTE(_DF5), \ + Q__NOTE(_C5 ), \ + Q__NOTE(_DF5), \ + H__NOTE(_C5 ), + +#define CABBAGE_SONG \ + H__NOTE(_C4), \ + H__NOTE(_A4), \ + H__NOTE(_B4), \ + H__NOTE(_B4), \ + H__NOTE(_A4), \ + H__NOTE(_G4), \ + H__NOTE(_E4), + +#define OLD_SPICE \ + Q__NOTE(_A4 ), \ + Q__NOTE(_A4 ), \ + H__NOTE(_B4 ), \ + H__NOTE(_D5 ), \ + H__NOTE(_CS5), \ + Q__NOTE(_E5 ), \ + H__NOTE(_FS5), \ + H__NOTE(_D5 ), \ + #endif