From 943b5b770955be937a89016680052be56d874c4a Mon Sep 17 00:00:00 2001
From: IBNobody <ibnobody@gmail.com>
Date: Sun, 17 Apr 2016 00:24:58 -0500
Subject: Adding folding to #if, etc

---
 keyboard/atomic/keymaps/pvc/keymap.c | 291 ++++++++++++++++-------------------
 quantum/audio.c                      |   3 +-
 quantum/musical_notes.h              |  38 +++--
 quantum/song_list.h                  |  12 ++
 4 files changed, 174 insertions(+), 170 deletions(-)
 create mode 100644 quantum/song_list.h

diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c
index c2081f525..9a2c57cb1 100644
--- a/keyboard/atomic/keymaps/pvc/keymap.c
+++ b/keyboard/atomic/keymaps/pvc/keymap.c
@@ -3,7 +3,7 @@
 
 #ifdef AUDIO_ENABLE
 #include "audio.h"
-#include "musical_notes.h"
+#include "song_list.h"
 #endif
 
 
@@ -75,140 +75,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  },
 };
 
-
-#ifdef AUDIO_ENABLE
-
-
-
-
-float tone_lw[][2] = {
-/*
-Q_NOTE(_C1   ) ,
-Q_NOTE(_CS1  ) ,
-Q_NOTE(_D1   ) ,
-Q_NOTE(_DS1  ) ,
-Q_NOTE(_E1   ) ,
-Q_NOTE(_F1   ) ,
-Q_NOTE(_FS1  ) ,
-Q_NOTE(_G1   ) ,
-Q_NOTE(_GS1  ) ,
-Q_NOTE(_A1   ) ,
-Q_NOTE(_AS1  ) ,
-Q_NOTE(_B1   ) ,
-*/
-
-Q_NOTE(_C4   ) ,
-Q_NOTE(_CS4  ) ,
-Q_NOTE(_D4   ) ,
-Q_NOTE(_DS4  ) ,
-Q_NOTE(_E4   ) ,
-Q_NOTE(_F4   ) ,
-Q_NOTE(_FS4  ) ,
-Q_NOTE(_G4   ) ,
-Q_NOTE(_GS4  ) ,
-Q_NOTE(_A4   ) ,
-Q_NOTE(_AS4  ) ,
-Q_NOTE(_B1   ) ,
-
-
-Q_NOTE(_C2   ) ,
-Q_NOTE(_CS2  ) ,
-Q_NOTE(_D2   ) ,
-Q_NOTE(_DS2  ) ,
-Q_NOTE(_E2   ) ,
-Q_NOTE(_F2   ) ,
-Q_NOTE(_FS2  ) ,
-Q_NOTE(_G2   ) ,
-Q_NOTE(_GS2  ) ,
-Q_NOTE(_A2   ) ,
-Q_NOTE(_AS2  ) ,
-Q_NOTE(_B2   ) ,
-Q_NOTE(_C3   ) ,
-Q_NOTE(_CS3  ) ,
-Q_NOTE(_D3   ) ,
-Q_NOTE(_DS3  ) ,
-Q_NOTE(_E3   ) ,
-Q_NOTE(_F3   ) ,
-Q_NOTE(_FS3  ) ,
-Q_NOTE(_G3   ) ,
-Q_NOTE(_GS3  ) ,
-Q_NOTE(_A3   ) ,
-Q_NOTE(_AS3  ) ,
-Q_NOTE(_B3   ) ,
-Q_NOTE(_C4   ) ,
-Q_NOTE(_CS4  ) ,
-Q_NOTE(_D4   ) ,
-Q_NOTE(_DS4  ) ,
-Q_NOTE(_E4   ) ,
-Q_NOTE(_F4   ) ,
-Q_NOTE(_FS4  ) ,
-Q_NOTE(_G4   ) ,
-Q_NOTE(_GS4  ) ,
-Q_NOTE(_A4   ) ,
-Q_NOTE(_AS4  ) ,
-Q_NOTE(_B4   ) ,
-Q_NOTE(_C5   ) ,
-Q_NOTE(_CS5  ) ,
-Q_NOTE(_D5   ) ,
-Q_NOTE(_DS5  ) ,
-Q_NOTE(_E5   ) ,
-Q_NOTE(_F5   ) ,
-Q_NOTE(_FS5  ) ,
-Q_NOTE(_G5   ) ,
-Q_NOTE(_GS5  ) ,
-Q_NOTE(_A5   ) ,
-Q_NOTE(_AS5  ) ,
-Q_NOTE(_B5   ) ,
-Q_NOTE(_C6   ) ,
-Q_NOTE(_CS6  ) ,
-Q_NOTE(_D6   ) ,
-Q_NOTE(_DS6  ) ,
-Q_NOTE(_E6   ) ,
-Q_NOTE(_F6   ) ,
-Q_NOTE(_FS6  ) ,
-Q_NOTE(_G6   ) ,
-Q_NOTE(_GS6  ) ,
-Q_NOTE(_A6   ) ,
-Q_NOTE(_AS6  ) ,
-Q_NOTE(_B6   ) ,
-Q_NOTE(_C7   ) ,
-Q_NOTE(_CS7  ) ,
-Q_NOTE(_D7   ) ,
-Q_NOTE(_DS7  ) ,
-Q_NOTE(_E7   ) ,
-Q_NOTE(_F7   ) ,
-Q_NOTE(_FS7  ) ,
-Q_NOTE(_G7   ) ,
-Q_NOTE(_GS7  ) ,
-Q_NOTE(_A7   ) ,
-Q_NOTE(_AS7  ) ,
-Q_NOTE(_B7   ) ,
-Q_NOTE(_C8   ) ,
-Q_NOTE(_CS8  ) ,
-Q_NOTE(_D8   ) ,
-Q_NOTE(_DS8  ) ,
-Q_NOTE(_E8   ) ,
-Q_NOTE(_F8   ) ,
-Q_NOTE(_FS8  ) ,
-Q_NOTE(_G8   ) ,
-Q_NOTE(_GS8  ) ,
-Q_NOTE(_A8   ) ,
-Q_NOTE(_AS8  ) ,
-Q_NOTE(_B8   ) ,
-
-};
-
-float tone_rs[][2] = {
-Q_NOTE(_A4   ) ,
-Q_NOTE(_A4   ) ,
-Q_NOTE(_A4   ) ,
-Q_NOTE(_A4   ) ,
-Q_NOTE(_AS8  ) ,
-Q_NOTE(_B8   ) ,
-};
-
-#endif
-
 void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t layer4, bool order)
 {
 	if (order)
@@ -241,7 +107,6 @@ void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t l
 const uint16_t PROGMEM fn_actions[] = {
 };
 
-//#define MUSIC_ARRAY_SIZE(x) (((int)(sizeof(x) / (sizeof(x[0][0])))) / 2)
 
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 {
@@ -280,30 +145,140 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
     return MACRO_NONE;
 };
 
+
+
 #ifdef AUDIO_ENABLE
-float start_up[][2] = {
-Q_NOTE(_E4   ) ,
-Q_NOTE(_E4   ) ,
-Q_NOTE(_F4   ) ,
-Q_NOTE(_G4   ) ,
-Q_NOTE(_G4   ) ,
-Q_NOTE(_F4   ) ,
-Q_NOTE(_E4   ) ,
-Q_NOTE(_D4   ) ,
-Q_NOTE(_C4   ) ,
-Q_NOTE(_C4   ) ,
-Q_NOTE(_D4   ) ,
-Q_NOTE(_E4   ) ,
-H_NOTE(_E4   ) ,
-Q_NOTE(_D4   ) ,
-H_NOTE(_D4   ) ,
+
+float start_up[][2] = SONG(ODE_TO_JOY);
+
+float tone_lw[][2] = {
+	/*
+	Q__NOTE(_C1   ) ,
+	Q__NOTE(_CS1  ) ,
+	Q__NOTE(_D1   ) ,
+	Q__NOTE(_DS1  ) ,
+	Q__NOTE(_E1   ) ,
+	Q__NOTE(_F1   ) ,
+	Q__NOTE(_FS1  ) ,
+	Q__NOTE(_G1   ) ,
+	Q__NOTE(_GS1  ) ,
+	Q__NOTE(_A1   ) ,
+	Q__NOTE(_AS1  ) ,
+	Q__NOTE(_B1   ) ,
+	*/
+
+	Q__NOTE(_C4   ) ,
+	Q__NOTE(_CS4  ) ,
+	Q__NOTE(_D4   ) ,
+	Q__NOTE(_DS4  ) ,
+	Q__NOTE(_E4   ) ,
+	Q__NOTE(_F4   ) ,
+	Q__NOTE(_FS4  ) ,
+	Q__NOTE(_G4   ) ,
+	Q__NOTE(_GS4  ) ,
+	Q__NOTE(_A4   ) ,
+	Q__NOTE(_AS4  ) ,
+	Q__NOTE(_B1   ) ,
+
+	Q__NOTE(_C2   ) ,
+	Q__NOTE(_CS2  ) ,
+	Q__NOTE(_D2   ) ,
+	Q__NOTE(_DS2  ) ,
+	Q__NOTE(_E2   ) ,
+	Q__NOTE(_F2   ) ,
+	Q__NOTE(_FS2  ) ,
+	Q__NOTE(_G2   ) ,
+	Q__NOTE(_GS2  ) ,
+	Q__NOTE(_A2   ) ,
+	Q__NOTE(_AS2  ) ,
+	Q__NOTE(_B2   ) ,
+	Q__NOTE(_C3   ) ,
+	Q__NOTE(_CS3  ) ,
+	Q__NOTE(_D3   ) ,
+	Q__NOTE(_DS3  ) ,
+	Q__NOTE(_E3   ) ,
+	Q__NOTE(_F3   ) ,
+	Q__NOTE(_FS3  ) ,
+	Q__NOTE(_G3   ) ,
+	Q__NOTE(_GS3  ) ,
+	Q__NOTE(_A3   ) ,
+	Q__NOTE(_AS3  ) ,
+	Q__NOTE(_B3   ) ,
+	Q__NOTE(_C4   ) ,
+	Q__NOTE(_CS4  ) ,
+	Q__NOTE(_D4   ) ,
+	Q__NOTE(_DS4  ) ,
+	Q__NOTE(_E4   ) ,
+	Q__NOTE(_F4   ) ,
+	Q__NOTE(_FS4  ) ,
+	Q__NOTE(_G4   ) ,
+	Q__NOTE(_GS4  ) ,
+	Q__NOTE(_A4   ) ,
+	Q__NOTE(_AS4  ) ,
+	Q__NOTE(_B4   ) ,
+	Q__NOTE(_C5   ) ,
+	Q__NOTE(_CS5  ) ,
+	Q__NOTE(_D5   ) ,
+	Q__NOTE(_DS5  ) ,
+	Q__NOTE(_E5   ) ,
+	Q__NOTE(_F5   ) ,
+	Q__NOTE(_FS5  ) ,
+	Q__NOTE(_G5   ) ,
+	Q__NOTE(_GS5  ) ,
+	Q__NOTE(_A5   ) ,
+	Q__NOTE(_AS5  ) ,
+	Q__NOTE(_B5   ) ,
+	Q__NOTE(_C6   ) ,
+	Q__NOTE(_CS6  ) ,
+	Q__NOTE(_D6   ) ,
+	Q__NOTE(_DS6  ) ,
+	Q__NOTE(_E6   ) ,
+	Q__NOTE(_F6   ) ,
+	Q__NOTE(_FS6  ) ,
+	Q__NOTE(_G6   ) ,
+	Q__NOTE(_GS6  ) ,
+	Q__NOTE(_A6   ) ,
+	Q__NOTE(_AS6  ) ,
+	Q__NOTE(_B6   ) ,
+	Q__NOTE(_C7   ) ,
+	Q__NOTE(_CS7  ) ,
+	Q__NOTE(_D7   ) ,
+	Q__NOTE(_DS7  ) ,
+	Q__NOTE(_E7   ) ,
+	Q__NOTE(_F7   ) ,
+	Q__NOTE(_FS7  ) ,
+	Q__NOTE(_G7   ) ,
+	Q__NOTE(_GS7  ) ,
+	Q__NOTE(_A7   ) ,
+	Q__NOTE(_AS7  ) ,
+	Q__NOTE(_B7   ) ,
+	Q__NOTE(_C8   ) ,
+	Q__NOTE(_CS8  ) ,
+	Q__NOTE(_D8   ) ,
+	Q__NOTE(_DS8  ) ,
+	Q__NOTE(_E8   ) ,
+	Q__NOTE(_F8   ) ,
+	Q__NOTE(_FS8  ) ,
+	Q__NOTE(_G8   ) ,
+	Q__NOTE(_GS8  ) ,
+	Q__NOTE(_A8   ) ,
+	Q__NOTE(_AS8  ) ,
+	Q__NOTE(_B8   ) ,
+};
+
+float tone_rs[][2] = {
+	Q__NOTE(_A4   ) ,
+	Q__NOTE(_A4   ) ,
+	Q__NOTE(_A4   ) ,
+	Q__NOTE(_A4   ) ,
+	Q__NOTE(_AS8  ) ,
+	Q__NOTE(_B8   ) ,
 };
-#endif
 
 void matrix_init_user(void) {
-  #ifdef AUDIO_ENABLE
-    init_notes();
-    PLAY_NOTE_ARRAY(start_up, false, STACCATO);
-    println("Matrix Init");
-  #endif
+	init_notes();
+	PLAY_NOTE_ARRAY(start_up, false, STACCATO);
+	println("Matrix Init");
 }
+
+#endif
diff --git a/quantum/audio.c b/quantum/audio.c
index 90f3c5a13..119bd9229 100644
--- a/quantum/audio.c
+++ b/quantum/audio.c
@@ -288,7 +288,8 @@ ISR(TIMER3_COMPA_vect) {
         #else
             if (note_frequency > 0) {
                 ICR3 = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)); // Set max to the period
-                OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 1; // Set compare to half the period
+                //OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 1; // Set compare to half the period
+                OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 2; // Set compare to half the period
             } else {
                 ICR3 = 0;
                 OCR3A = 0;
diff --git a/quantum/musical_notes.h b/quantum/musical_notes.h
index 837f6a069..d2256a773 100644
--- a/quantum/musical_notes.h
+++ b/quantum/musical_notes.h
@@ -4,20 +4,36 @@
 // Tempo Placeholder
 #define TEMPO 120
 
+#define SONG(notes...) { notes }
+
 
 // Note Types
-#define WHOLE_NOTE(note)     {(NOTE##note), 64}
-#define HALF_NOTE(note)      {(NOTE##note), 32}
-#define QUARTER_NOTE(note)   {(NOTE##note), 16}
-#define EIGHTH_NOTE(note)    {(NOTE##note), 8}
-#define SIXTEENTH_NOTE(note) {(NOTE##note), 4}
+#define MUSICAL_NOTE(note, duration)   {(NOTE##note), duration}
+#define WHOLE_NOTE(note)               MUSICAL_NOTE(note, 64)
+#define HALF_NOTE(note)                MUSICAL_NOTE(note, 32)
+#define QUARTER_NOTE(note)             MUSICAL_NOTE(note, 16)
+#define EIGHTH_NOTE(note)              MUSICAL_NOTE(note,  8)
+#define SIXTEENTH_NOTE(note)           MUSICAL_NOTE(note,  4)
+
+#define WHOLE_DOT_NOTE(note)           MUSICAL_NOTE(note, 64+32)
+#define HALF_DOT_NOTE(note)            MUSICAL_NOTE(note, 32+16)
+#define QUARTER_DOT_NOTE(note)         MUSICAL_NOTE(note, 16+8)
+#define EIGHTH_DOT_NOTE(note)          MUSICAL_NOTE(note,  8+4)
+#define SIXTEENTH_DOT_NOTE(note)       MUSICAL_NOTE(note,  4+2)
+
 
-// Note Types Short
-#define W_NOTE(n) WHOLE_NOTE(n)
-#define H_NOTE(n) HALF_NOTE(n)
-#define Q_NOTE(n) QUARTER_NOTE(n)
-#define E_NOTE(n) EIGTH_NOTE(n)
-#define S_NOTE(n) SIXTEENTH_NOTE(n)
+// Note Type Shortcuts
+#define M__NOTE(note, duration)        MUSICAL_NOTE(note, duration)
+#define W__NOTE(n)                     WHOLE_NOTE(n)
+#define H__NOTE(n)                     HALF_NOTE(n)
+#define Q__NOTE(n)                     QUARTER_NOTE(n)
+#define E__NOTE(n)                     EIGHTH_NOTE(n)
+#define S__NOTE(n)                     SIXTEENTH_NOTE(n)
+#define WD_NOTE(n)                     WHOLE_DOT_NOTE(n)
+#define HD_NOTE(n)                     HALF_DOT_NOTE(n)
+#define QD_NOTE(n)                     QUARTER_DOT_NOTE(n)
+#define ED_NOTE(n)                     EIGTH_DOT_NOTE(n)
+#define SD_NOTE(n)                     SIXTEENTH_DOT_NOTE(n)
 
 // Note Styles
 // Staccato makes sure there is a rest between each note. Think: TA TA TA
diff --git a/quantum/song_list.h b/quantum/song_list.h
new file mode 100644
index 000000000..ef25eac35
--- /dev/null
+++ b/quantum/song_list.h
@@ -0,0 +1,12 @@
+#include "musical_notes.h"
+
+#ifndef SONG_LIST_H
+#define SONG_LIST_H
+
+#define ODE_TO_JOY                                          \
+	Q__NOTE(_E4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_G4), \
+	Q__NOTE(_G4), Q__NOTE(_F4), Q__NOTE(_E4), Q__NOTE(_D4), \
+	Q__NOTE(_C4), Q__NOTE(_C4), Q__NOTE(_D4), Q__NOTE(_E4), \
+	QD_NOTE(_E4), E__NOTE(_D4), H__NOTE(_D4),
+
+#endif
\ No newline at end of file
-- 
cgit v1.2.3


From 29e495be2a57d1eb41699909b204c12ac6bc4c0e Mon Sep 17 00:00:00 2001
From: IBNobody <ibnobody@gmail.com>
Date: Sun, 17 Apr 2016 02:52:38 -0500
Subject: Added trimble and tempo adjustments!

---
 keyboard/atomic/keymaps/pvc/keymap.c    | 216 ++++++++++++++++++--------------
 keyboard/atomic/keymaps/pvc/makefile.mk |   2 +-
 quantum/audio.c                         |  56 +++++++--
 quantum/audio.h                         |   6 +-
 quantum/musical_notes.h                 |  13 +-
 quantum/song_list.h                     |   6 +
 6 files changed, 189 insertions(+), 110 deletions(-)

diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c
index 9a2c57cb1..aaef6b041 100644
--- a/keyboard/atomic/keymaps/pvc/keymap.c
+++ b/keyboard/atomic/keymaps/pvc/keymap.c
@@ -17,6 +17,13 @@
 #define M_LW 1
 #define M_RS 2
 #define M_FN 3
+#define M_T1 4
+#define M_T2 5
+#define M_T3 6
+#define M_T4 7
+#define M_TU 8
+#define M_TD 9
+#define M_DF 10
 
 
 #define _______ KC_TRNS
@@ -63,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   { KC_NLCK, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  ___T___, ___T___  },
   { KC_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_F21,  KC_F22,  KC_F23,  KC_F24,  KC_PAUS, KC_PSCR  },
   { KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D  },
+  { _______, M(M_T1), M(M_T2), M(M_T3), M(M_T4), M(M_TU), M(M_TD), M(M_DF), _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D  },
   { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R  },
  },
  [_AD] = { /* ADJUST */
@@ -75,76 +82,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  },
 };
 
-void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t layer4, bool order)
-{
-	if (order)
-	{
-		if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2))
-		{
-			layer_on(layer3);
-		}
-		else
-		{
-		    layer_off(layer3);
-		    layer_off(layer4);
-		}
-	}
-	else
-	{
-		if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2))
-		{
-			layer_on(layer4);
-		}
-		else
-		{
-			layer_off(layer3);
-		    layer_off(layer4);
-		}
-	}
-}
-
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-
-  // MACRODOWN only works in this function
-      switch(id) {
-        case M_LW:
-          if (record->event.pressed) {
-            #ifdef AUDIO_ENABLE
-              println("PlayNotes LW");
-              PLAY_NOTE_ARRAY(tone_lw, false, STACCATO);
-            #endif
-            layer_on(_LW);
-            update_tri_layer(_LW, _RS, _FN);
-          } else {
-            layer_off(_LW);
-            update_tri_layer(_LW, _RS, _FN);
-          }
-          break;
-        case M_RS:
-          if (record->event.pressed) {
-            #ifdef AUDIO_ENABLE
-              println("PlayNotes RS");
-              PLAY_NOTE_ARRAY(tone_rs, false, LEGATO);
-            #endif
-            layer_on(_RS);
-            update_tri_layer(_LW, _RS, _FN);
-          } else {
-            layer_off(_RS);
-            update_tri_layer(_LW, _RS, _FN);
-          }
-          break;
-		default:
-        	break;
-      }
-    return MACRO_NONE;
-};
-
 
 
 #ifdef AUDIO_ENABLE
@@ -152,20 +89,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 float start_up[][2] = SONG(ODE_TO_JOY);
 
 float tone_lw[][2] = {
-	/*
-	Q__NOTE(_C1   ) ,
-	Q__NOTE(_CS1  ) ,
-	Q__NOTE(_D1   ) ,
-	Q__NOTE(_DS1  ) ,
-	Q__NOTE(_E1   ) ,
-	Q__NOTE(_F1   ) ,
-	Q__NOTE(_FS1  ) ,
-	Q__NOTE(_G1   ) ,
-	Q__NOTE(_GS1  ) ,
-	Q__NOTE(_A1   ) ,
-	Q__NOTE(_AS1  ) ,
-	Q__NOTE(_B1   ) ,
-	*/
 
 	Q__NOTE(_C4   ) ,
 	Q__NOTE(_CS4  ) ,
@@ -178,6 +101,7 @@ float tone_lw[][2] = {
 	Q__NOTE(_GS4  ) ,
 	Q__NOTE(_A4   ) ,
 	Q__NOTE(_AS4  ) ,
+
 	Q__NOTE(_B1   ) ,
 
 	Q__NOTE(_C2   ) ,
@@ -266,14 +190,7 @@ float tone_lw[][2] = {
 	Q__NOTE(_B8   ) ,
 };
 
-float tone_rs[][2] = {
-	Q__NOTE(_A4   ) ,
-	Q__NOTE(_A4   ) ,
-	Q__NOTE(_A4   ) ,
-	Q__NOTE(_A4   ) ,
-	Q__NOTE(_AS8  ) ,
-	Q__NOTE(_B8   ) ,
-};
+float tone_rs[][2] = SONG(ROCK_A_BYE_BABY);
 
 void matrix_init_user(void) {
 	init_notes();
@@ -282,3 +199,116 @@ void matrix_init_user(void) {
 }
 
 #endif
+
+
+void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t layer4, bool order)
+{
+	if (order)
+	{
+		if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2))
+		{
+			layer_on(layer3);
+		}
+		else
+		{
+		    layer_off(layer3);
+		    layer_off(layer4);
+		}
+	}
+	else
+	{
+		if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2))
+		{
+			layer_on(layer4);
+		}
+		else
+		{
+			layer_off(layer3);
+		    layer_off(layer4);
+		}
+	}
+}
+
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+
+	// MACRODOWN only works in this function
+	switch(id)
+	{
+		case M_LW:
+			if (record->event.pressed) {
+				#ifdef AUDIO_ENABLE
+				PLAY_NOTE_ARRAY(tone_lw, false, STACCATO);
+				#endif
+				layer_on(_LW);
+				update_tri_layer(_LW, _RS, _AD);
+			} else {
+				layer_off(_LW);
+				update_tri_layer(_LW, _RS, _AD);
+			}
+			break;
+		case M_RS:
+			if (record->event.pressed) {
+				#ifdef AUDIO_ENABLE
+				PLAY_NOTE_ARRAY(tone_rs, false, LEGATO);
+				#endif
+				layer_on(_RS);
+				update_tri_layer(_LW, _RS, _AD);
+			} else {
+				layer_off(_RS);
+				update_tri_layer(_LW, _RS, _AD);
+			}
+			break;
+
+		case M_FN:
+			if (record->event.pressed) {
+				layer_on(_FN);
+			} else {
+				layer_off(_FN);
+			}
+			break;
+
+		case M_T1:
+			if (record->event.pressed) set_timbre(TIMBRE_12);
+			break;
+
+		case M_T2:
+			if (record->event.pressed) set_timbre(TIMBRE_25);
+			break;
+
+		case M_T3:
+			if (record->event.pressed) set_timbre(TIMBRE_50);
+			break;
+
+		case M_T4:
+			if (record->event.pressed) set_timbre(TIMBRE_75);
+			break;
+
+
+		case M_TU:
+			if (record->event.pressed) increase_tempo(10);
+			break;
+
+		case M_TD:
+			if (record->event.pressed) decrease_tempo(10);
+			break;
+
+		case M_DF:
+			if (record->event.pressed)
+			{
+				set_timbre(TIMBRE_DEFAULT);
+				set_tempo(TEMPO_DEFAULT);
+			}
+			break;
+
+		default:
+			break;
+
+	}
+	return MACRO_NONE;
+};
\ No newline at end of file
diff --git a/keyboard/atomic/keymaps/pvc/makefile.mk b/keyboard/atomic/keymaps/pvc/makefile.mk
index d46996650..eefa42855 100644
--- a/keyboard/atomic/keymaps/pvc/makefile.mk
+++ b/keyboard/atomic/keymaps/pvc/makefile.mk
@@ -1,7 +1,7 @@
 BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE  = yes # Mouse keys(+4700)
 EXTRAKEY_ENABLE  = yes # Audio control and System control(+450)
-CONSOLE_ENABLE   = yes # Console for debug(+400)
+CONSOLE_ENABLE   = no  # Console for debug(+400)
 COMMAND_ENABLE   = yes # 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 = no  # Enable keyboard backlight functionality
diff --git a/quantum/audio.c b/quantum/audio.c
index 119bd9229..9b9589f13 100644
--- a/quantum/audio.c
+++ b/quantum/audio.c
@@ -4,7 +4,7 @@
 #include <avr/pgmspace.h>
 #include <avr/interrupt.h>
 #include <avr/io.h>
-
+#include "print.h"
 #include "audio.h"
 #include "keymap_common.h"
 
@@ -57,9 +57,11 @@ bool notes = false;
 bool note = false;
 float note_frequency = 0;
 float note_length = 0;
+float note_tempo = TEMPO_DEFAULT;
+float note_timbre = TIMBRE_DEFAULT;
 uint16_t note_position = 0;
 float (* notes_pointer)[][2];
-uint8_t notes_length;
+uint8_t notes_count;
 bool notes_repeat;
 float notes_rest;
 bool note_resting = false;
@@ -255,7 +257,8 @@ ISR(TIMER3_COMPA_vect) {
                     place = 0.0;
                 }
                 ICR3 = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)); // Set max to the period
-                OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period
+                OCR3A = (int)((((double)F_CPU) / (note_frequency * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
+                //OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period
                 place++;
                 // if (duty_counter > (frequencies[voice_place] / 500)) {
                 //     duty_place = (duty_place % 3) + 1;
@@ -288,8 +291,7 @@ ISR(TIMER3_COMPA_vect) {
         #else
             if (note_frequency > 0) {
                 ICR3 = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)); // Set max to the period
-                //OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 1; // Set compare to half the period
-                OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 2; // Set compare to half the period
+                OCR3A = (int)((((double)F_CPU) / (note_frequency * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
             } else {
                 ICR3 = 0;
                 OCR3A = 0;
@@ -305,7 +307,7 @@ ISR(TIMER3_COMPA_vect) {
             end_of_note = (note_position >= (note_length * 0x7FF));
         if (end_of_note) {
             current_note++;
-            if (current_note >= notes_length) {
+            if (current_note >= notes_count) {
                 if (notes_repeat) {
                     current_note = 0;
                 } else {
@@ -328,10 +330,10 @@ ISR(TIMER3_COMPA_vect) {
                 note_resting = false;
                 #ifdef PWM_AUDIO
                     note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE;
-                    note_length = (*notes_pointer)[current_note][1];
+                    note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100);
                 #else
                     note_frequency = (*notes_pointer)[current_note][0];
-                    note_length = (*notes_pointer)[current_note][1] / 4;
+                    note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100);
                 #endif
             }
             note_position = 0;
@@ -345,7 +347,7 @@ ISR(TIMER3_COMPA_vect) {
     }
 }
 
-void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest) {
+void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest) {
 
 if (audio_config.enable) {
 
@@ -354,7 +356,7 @@ if (audio_config.enable) {
     notes = true;
 
     notes_pointer = np;
-    notes_length = n_length;
+    notes_count = n_count;
     notes_repeat = n_repeat;
     notes_rest = n_rest;
 
@@ -362,10 +364,10 @@ if (audio_config.enable) {
     current_note = 0;
     #ifdef PWM_AUDIO
         note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE;
-        note_length = (*notes_pointer)[current_note][1];
+        note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100);
     #else
         note_frequency = (*notes_pointer)[current_note][0];
-        note_length = (*notes_pointer)[current_note][1] / 4;
+        note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100);
     #endif
     note_position = 0;
 
@@ -439,4 +441,32 @@ if (audio_config.enable && voices < 8) {
 
 }
 
-}
\ No newline at end of file
+}
+
+void set_timbre(float timbre)
+{
+	note_timbre = timbre;
+}
+
+void set_tempo(float tempo)
+{
+	note_tempo = tempo;
+}
+
+void decrease_tempo(uint8_t tempo_change)
+{
+	note_tempo += (float) tempo_change;
+}
+
+void increase_tempo(uint8_t tempo_change)
+{
+	if (note_tempo - (float) tempo_change < 10)
+		{
+			note_tempo = 10;
+		}
+	else
+		{
+		note_tempo -= (float) tempo_change;
+		}
+}
+
diff --git a/quantum/audio.h b/quantum/audio.h
index 762c98064..8012aa6bf 100644
--- a/quantum/audio.h
+++ b/quantum/audio.h
@@ -24,8 +24,12 @@ void play_note(double freq, int vol);
 void stop_note(double freq);
 void stop_all_notes(void);
 void init_notes(void);
-void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest);
+void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest);
 
+void set_timbre(float timbre);
+void set_tempo(float tempo);
+void increase_tempo(uint8_t tempo_change);
+void decrease_tempo(uint8_t tempo_change);
 
 // These macros are used to allow play_notes to play an array of indeterminate
 // length. This works around the limitation of C's sizeof operation on pointers.
diff --git a/quantum/musical_notes.h b/quantum/musical_notes.h
index d2256a773..2170f3f18 100644
--- a/quantum/musical_notes.h
+++ b/quantum/musical_notes.h
@@ -2,7 +2,8 @@
 #define MUSICAL_NOTES_H
 
 // Tempo Placeholder
-#define TEMPO 120
+#define TEMPO_DEFAULT 100
+
 
 #define SONG(notes...) { notes }
 
@@ -21,7 +22,6 @@
 #define EIGHTH_DOT_NOTE(note)          MUSICAL_NOTE(note,  8+4)
 #define SIXTEENTH_DOT_NOTE(note)       MUSICAL_NOTE(note,  4+2)
 
-
 // Note Type Shortcuts
 #define M__NOTE(note, duration)        MUSICAL_NOTE(note, duration)
 #define W__NOTE(n)                     WHOLE_NOTE(n)
@@ -41,6 +41,15 @@
 #define STACCATO 0.01
 #define LEGATO   0
 
+// Note Timbre
+// Changes how the notes sound
+#define TIMBRE_12       0.125
+#define TIMBRE_25       0.250
+#define TIMBRE_50       0.500
+#define TIMBRE_75       0.750
+#define TIMBRE_DEFAULT  TIMBRE_50
+
+
 // Notes - # = Octave
 #define NOTE_REST         0.00
 #define NOTE_C0          16.35
diff --git a/quantum/song_list.h b/quantum/song_list.h
index ef25eac35..ef36a1cdd 100644
--- a/quantum/song_list.h
+++ b/quantum/song_list.h
@@ -9,4 +9,10 @@
 	Q__NOTE(_C4), Q__NOTE(_C4), Q__NOTE(_D4), Q__NOTE(_E4), \
 	QD_NOTE(_E4), E__NOTE(_D4), H__NOTE(_D4),
 
+#define ROCK_A_BYE_BABY                            \
+	QD_NOTE(_B4), E__NOTE(_D4), Q__NOTE(_B5),      \
+	H__NOTE(_A5), Q__NOTE(_G5),                    \
+	QD_NOTE(_B4), E__NOTE(_D5), Q__NOTE(_G5),      \
+	H__NOTE(_FS5),
+
 #endif
\ No newline at end of file
-- 
cgit v1.2.3


From c940e87235c9fe26f5c7451464af54a493270a68 Mon Sep 17 00:00:00 2001
From: IBNobody <ibnobody@gmail.com>
Date: Sun, 17 Apr 2016 10:41:07 -0500
Subject: fixed single note play copy/paste bug

---
 quantum/audio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/quantum/audio.c b/quantum/audio.c
index 9b9589f13..58b9ab76b 100644
--- a/quantum/audio.c
+++ b/quantum/audio.c
@@ -257,7 +257,7 @@ ISR(TIMER3_COMPA_vect) {
                     place = 0.0;
                 }
                 ICR3 = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)); // Set max to the period
-                OCR3A = (int)((((double)F_CPU) / (note_frequency * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
+                OCR3A = (int)((((double)F_CPU) /(frequencies[voice_place] * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
                 //OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period
                 place++;
                 // if (duty_counter > (frequencies[voice_place] / 500)) {
-- 
cgit v1.2.3


From 90289aa53fe06a867c773d447c6d3a950575d69a Mon Sep 17 00:00:00 2001
From: a0-c <g1@porkhash.net>
Date: Sun, 17 Apr 2016 06:51:39 -1000
Subject: __attribute__ ((weak)) added to led_set

__attribute__ ((weak)) added to led_set
---
 quantum/led.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/quantum/led.c b/quantum/led.c
index 9cdb8a5c2..208e348f3 100644
--- a/quantum/led.c
+++ b/quantum/led.c
@@ -24,6 +24,7 @@ void led_set_kb(uint8_t usb_led) {
 
 }
 
+__attribute__ ((weak))
 void led_set(uint8_t usb_led)
 {
 
-- 
cgit v1.2.3


From d5b72e7bde5ede25f7d5699b50b7d9eb6f31ba92 Mon Sep 17 00:00:00 2001
From: IBNobody <ibnobody@gmail.com>
Date: Sun, 17 Apr 2016 12:54:32 -0500
Subject: Fixed many compiler warnings related to print being disabled

---
 quantum/keymap_common.c          |  1 +
 tmk_core/common/action.c         |  8 ++++----
 tmk_core/common/action_layer.c   | 12 ++++++------
 tmk_core/common/action_macro.c   |  8 ++++----
 tmk_core/common/action_tapping.c | 11 ++++++-----
 tmk_core/common/command.c        | 25 ++++++++++++++++---------
 tmk_core/common/print.h          | 12 ++++++------
 tmk_core/protocol/lufa/lufa.c    | 18 +++++++-----------
 8 files changed, 50 insertions(+), 45 deletions(-)

diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 61a51aedb..ce1d007f3 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -26,6 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "backlight.h"
 #include "keymap_midi.h"
 #include "bootloader.h"
+#include "eeconfig.h"
 
 extern keymap_config_t keymap_config;
 
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index f9e6c17dc..0162fbd63 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -27,11 +27,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action_util.h"
 #include "action.h"
 
-#ifdef DEBUG_ACTION
+//#ifdef DEBUG_ACTION
 #include "debug.h"
-#else
-#include "nodebug.h"
-#endif
+//#else
+//#include "nodebug.h"
+//#endif
 
 
 void action_exec(keyevent_t event)
diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c
index e817c0d51..845fbbb21 100644
--- a/tmk_core/common/action_layer.c
+++ b/tmk_core/common/action_layer.c
@@ -4,14 +4,14 @@
 #include "util.h"
 #include "action_layer.h"
 
-#ifdef DEBUG_ACTION
+//#ifdef DEBUG_ACTION
 #include "debug.h"
-#else
-#include "nodebug.h"
-#endif
+//#else
+//#include "nodebug.h"
+//#endif
 
 
-/* 
+/*
  * Default Layer State
  */
 uint32_t default_layer_state = 0;
@@ -52,7 +52,7 @@ void default_layer_xor(uint32_t state)
 
 
 #ifndef NO_ACTION_LAYER
-/* 
+/*
  * Keymap Layer State
  */
 uint32_t layer_state = 0;
diff --git a/tmk_core/common/action_macro.c b/tmk_core/common/action_macro.c
index 7726b1190..cc78c8232 100644
--- a/tmk_core/common/action_macro.c
+++ b/tmk_core/common/action_macro.c
@@ -19,11 +19,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action_macro.h"
 #include "wait.h"
 
-#ifdef DEBUG_ACTION
+//#ifdef DEBUG_ACTION
 #include "debug.h"
-#else
-#include "nodebug.h"
-#endif
+//#else
+//#include "nodebug.h"
+//#endif
 
 
 #ifndef NO_ACTION_MACRO
diff --git a/tmk_core/common/action_tapping.c b/tmk_core/common/action_tapping.c
index 826c23309..6b6fa1dfe 100644
--- a/tmk_core/common/action_tapping.c
+++ b/tmk_core/common/action_tapping.c
@@ -6,11 +6,11 @@
 #include "keycode.h"
 #include "timer.h"
 
-#ifdef DEBUG_ACTION
+//#ifdef DEBUG_ACTION
 #include "debug.h"
-#else
-#include "nodebug.h"
-#endif
+//#else
+//#include "nodebug.h"
+//#endif
 
 #ifndef NO_ACTION_TAPPING
 
@@ -139,7 +139,7 @@ bool process_tapping(keyrecord_t *keyp)
                     if (event.pressed) {
                         tapping_key.tap.interrupted = true;
                     }
-                    // enqueue 
+                    // enqueue
                     return false;
                 }
             }
@@ -324,6 +324,7 @@ bool waiting_buffer_typed(keyevent_t event)
     return false;
 }
 
+__attribute__((unused))
 bool waiting_buffer_has_anykey_pressed(void)
 {
     for (uint8_t i = waiting_buffer_tail; i != waiting_buffer_head; i = (i + 1) % WAITING_BUFFER_SIZE) {
diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c
index b4cd3ca56..7572b9597 100644
--- a/tmk_core/common/command.c
+++ b/tmk_core/common/command.c
@@ -122,7 +122,7 @@ static void command_common_help(void)
 		STR(MAGIC_KEY_VERSION     ) ":	Version\n"
 		STR(MAGIC_KEY_STATUS      ) ":	Status\n"
 		STR(MAGIC_KEY_CONSOLE     ) ":	Activate Console Mode\n"
-		
+
 #if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
 		STR(MAGIC_KEY_LAYER0      ) ":	Switch to Layer 0\n"
 		STR(MAGIC_KEY_LAYER1      ) ":	Switch to Layer 1\n"
@@ -136,11 +136,11 @@ static void command_common_help(void)
 		STR(MAGIC_KEY_LAYER9      ) ":	Switch to Layer 9\n"
 #endif
 
-#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS							
+#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
 		                            "F1-F10:	Switch to Layer 0-9 (F10 = L0)\n"
 #endif
 
-#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS							
+#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
 		                            "0-9:	Switch to Layer 0-9\n"
 #endif
 
@@ -251,6 +251,7 @@ static void print_status(void)
 #ifdef BOOTMAGIC_ENABLE
 static void print_eeconfig(void)
 {
+#ifndef NO_PRINT
     print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n");
 
     debug_config_t dc;
@@ -279,9 +280,12 @@ static void print_eeconfig(void)
     print("backlight_config.raw: "); print_hex8(bc.raw); print("\n");
     print(".enable: "); print_dec(bc.enable); print("\n");
     print(".level: "); print_dec(bc.level); print("\n");
-#endif
+#endif /* BACKLIGHT_ENABLE */
+
+#endif /* !NO_PRINT */
+
 }
-#endif
+#endif /* BOOTMAGIC_ENABLE */
 
 static bool command_common(uint8_t code)
 {
@@ -305,7 +309,7 @@ static bool command_common(uint8_t code)
 #ifdef BOOTMAGIC_ENABLE
 
 		// print stored eeprom config
-        case MAGIC_KC(MAGIC_KEY_EEPROM):        
+        case MAGIC_KC(MAGIC_KEY_EEPROM):
             print("eeconfig:\n");
             print_eeconfig();
             break;
@@ -369,7 +373,7 @@ static bool command_common(uint8_t code)
             break;
 
         // debug matrix toggle
-        case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX): 
+        case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX):
             debug_matrix = !debug_matrix;
             if (debug_matrix) {
                 print("\nmatrix: on\n");
@@ -380,7 +384,7 @@ static bool command_common(uint8_t code)
             break;
 
         // debug keyboard toggle
-        case MAGIC_KC(MAGIC_KEY_DEBUG_KBD): 
+        case MAGIC_KC(MAGIC_KEY_DEBUG_KBD):
             debug_keyboard = !debug_keyboard;
             if (debug_keyboard) {
                 print("\nkeyboard: on\n");
@@ -551,6 +555,7 @@ static uint8_t mousekey_param = 0;
 
 static void mousekey_param_print(void)
 {
+#ifndef NO_PRINT
     print("\n\t- Values -\n");
     print("1: delay(*10ms): "); pdec(mk_delay); print("\n");
     print("2: interval(ms): "); pdec(mk_interval); print("\n");
@@ -558,6 +563,8 @@ static void mousekey_param_print(void)
     print("4: time_to_max: "); pdec(mk_time_to_max); print("\n");
     print("5: wheel_max_speed: "); pdec(mk_wheel_max_speed); print("\n");
     print("6: wheel_time_to_max: "); pdec(mk_wheel_time_to_max); print("\n");
+#endif /* !NO_PRINT */
+
 }
 
 //#define PRINT_SET_VAL(v)  print(#v " = "); print_dec(v); print("\n");
@@ -677,7 +684,7 @@ static void mousekey_console_help(void)
           "pgdown:	-10\n"
           "\n"
           "speed = delta * max_speed * (repeat / time_to_max)\n");
-    xprintf("where delta: cursor=%d, wheel=%d\n" 
+    xprintf("where delta: cursor=%d, wheel=%d\n"
             "See http://en.wikipedia.org/wiki/Mouse_keys\n", MOUSEKEY_MOVE_DELTA,  MOUSEKEY_WHEEL_DELTA);
 }
 
diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h
index c0e9e1430..4f3dde65a 100644
--- a/tmk_core/common/print.h
+++ b/tmk_core/common/print.h
@@ -2,17 +2,17 @@
 /* Very basic print functions, intended to be used with usb_debug_only.c
  * http://www.pjrc.com/teensy/
  * Copyright (c) 2008 PJRC.COM, LLC
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  * copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- * 
+ *
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -91,9 +91,9 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
 
 #else   /* NO_PRINT */
 
-#define xprintf
-#define print
-#define println
+#define xprintf(fmt, ...)
+#define print(s)
+#define println(s)
 #define print_set_sendchar(func)
 #define print_dec(data)
 #define print_decs(data)
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index 5d40dcf7b..f03f9a9b9 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -1,4 +1,4 @@
-/* 
+/*
  * Copyright 2012 Jun Wako <wakojun@gmail.com>
  * This file is based on:
  *     LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse
@@ -152,10 +152,10 @@ static void Console_Task(void)
         {
             /* Create a temporary buffer to hold the read in report from the host */
             uint8_t ConsoleData[CONSOLE_EPSIZE];
- 
+
             /* Read Console Report Data */
             Endpoint_Read_Stream_LE(&ConsoleData, sizeof(ConsoleData), NULL);
- 
+
             /* Process Console Report Data */
             //ProcessConsoleHIDReport(ConsoleData);
         }
@@ -183,10 +183,6 @@ static void Console_Task(void)
 
     Endpoint_SelectEndpoint(ep);
 }
-#else
-static void Console_Task(void)
-{
-}
 #endif
 
 
@@ -216,7 +212,7 @@ void EVENT_USB_Device_Disconnect(void)
     print("[D]");
     /* For battery powered device */
     USB_IsInitialized = false;
-/* TODO: This doesn't work. After several plug in/outs can not be enumerated. 
+/* TODO: This doesn't work. After several plug in/outs can not be enumerated.
     if (USB_IsInitialized) {
         USB_Disable();  // Disable all interrupts
 	USB_Controller_Enable();
@@ -313,7 +309,7 @@ void EVENT_USB_Device_ConfigurationChanged(void)
 
 #ifdef MIDI_ENABLE
     ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);
-    ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);    
+    ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);
 #endif
 }
 
@@ -439,7 +435,7 @@ void EVENT_USB_Device_ControlRequest(void)
 }
 
 /*******************************************************************************
- * Host driver 
+ * Host driver
  ******************************************************************************/
 static uint8_t keyboard_leds(void)
 {
@@ -563,7 +559,7 @@ static void send_consumer(uint16_t data)
     bluefruit_serial_send(0x00);
     bluefruit_serial_send(0x02);
     bluefruit_serial_send((bitmap>>8)&0xFF);
-    bluefruit_serial_send(bitmap&0xFF); 
+    bluefruit_serial_send(bitmap&0xFF);
     bluefruit_serial_send(0x00);
     bluefruit_serial_send(0x00);
     bluefruit_serial_send(0x00);
-- 
cgit v1.2.3


From 23231fa577f7c6c585124226a83f21a7668e62dd Mon Sep 17 00:00:00 2001
From: IBNobody <ibnobody@gmail.com>
Date: Sun, 17 Apr 2016 14:16:03 -0500
Subject: Converted goodbye to notes, fixed eighth dotted note macro

---
 keyboard/atomic/keymaps/pvc/makefile.mk |  2 +-
 quantum/audio.h                         |  1 +
 quantum/keymap_common.c                 | 14 ++++++--------
 quantum/musical_notes.h                 |  2 +-
 quantum/song_list.h                     |  7 ++++++-
 5 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/keyboard/atomic/keymaps/pvc/makefile.mk b/keyboard/atomic/keymaps/pvc/makefile.mk
index eefa42855..d46996650 100644
--- a/keyboard/atomic/keymaps/pvc/makefile.mk
+++ b/keyboard/atomic/keymaps/pvc/makefile.mk
@@ -1,7 +1,7 @@
 BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE  = yes # Mouse keys(+4700)
 EXTRAKEY_ENABLE  = yes # Audio control and System control(+450)
-CONSOLE_ENABLE   = no  # Console for debug(+400)
+CONSOLE_ENABLE   = yes # Console for debug(+400)
 COMMAND_ENABLE   = yes # 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 = no  # Enable keyboard backlight functionality
diff --git a/quantum/audio.h b/quantum/audio.h
index 3aba8370a..05d314c94 100644
--- a/quantum/audio.h
+++ b/quantum/audio.h
@@ -3,6 +3,7 @@
 #include <avr/io.h>
 #include <util/delay.h>
 #include "musical_notes.h"
+#include "song_list.h"
 
 #ifndef AUDIO_H
 #define AUDIO_H
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index c705b7a73..2001438b9 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -34,15 +34,13 @@ extern keymap_config_t keymap_config;
 #include <inttypes.h>
 #ifdef AUDIO_ENABLE
     #include "audio.h"
+
     #ifndef TONE_GOODBYE
-    #define TONE_GOODBYE { \
-        {440.0*pow(2.0,(31)/12.0), 8}, \
-        {440.0*pow(2.0,(24)/12.0), 8}, \
-        {440.0*pow(2.0,(19)/12.0), 12}, \
-    } 
-    #endif
-    float tone_goodbye[][2] = TONE_GOODBYE;
-#endif
+    	#define TONE_GOODBYE OLKB_GOODBYE
+    #endif /*! TONE_GOODBYE */
+
+    float tone_goodbye[][2] = SONG(TONE_GOODBYE);
+#endif /* AUDIO_ENABLE */
 
 static action_t keycode_to_action(uint16_t keycode);
 
diff --git a/quantum/musical_notes.h b/quantum/musical_notes.h
index 2170f3f18..ccdc34f27 100644
--- a/quantum/musical_notes.h
+++ b/quantum/musical_notes.h
@@ -32,7 +32,7 @@
 #define WD_NOTE(n)                     WHOLE_DOT_NOTE(n)
 #define HD_NOTE(n)                     HALF_DOT_NOTE(n)
 #define QD_NOTE(n)                     QUARTER_DOT_NOTE(n)
-#define ED_NOTE(n)                     EIGTH_DOT_NOTE(n)
+#define ED_NOTE(n)                     EIGHTH_DOT_NOTE(n)
 #define SD_NOTE(n)                     SIXTEENTH_DOT_NOTE(n)
 
 // Note Styles
diff --git a/quantum/song_list.h b/quantum/song_list.h
index ef36a1cdd..b626c3fa6 100644
--- a/quantum/song_list.h
+++ b/quantum/song_list.h
@@ -15,4 +15,9 @@
 	QD_NOTE(_B4), E__NOTE(_D5), Q__NOTE(_G5),      \
 	H__NOTE(_FS5),
 
-#endif
\ No newline at end of file
+#define OLKB_GOODBYE \
+	E__NOTE(_E7),    \
+	E__NOTE(_A6),    \
+	ED_NOTE(_E6),
+
+#endif
-- 
cgit v1.2.3


From ce463ef424c5bd26b84ead7de5f31eab366f98eb Mon Sep 17 00:00:00 2001
From: Jack Humbert <jack.humb@gmail.com>
Date: Sun, 17 Apr 2016 18:14:42 -0400
Subject: audio fixes

---
 keyboard/preonic/keymaps/default/keymap.c | 7 +++++--
 quantum/audio.c                           | 6 +++---
 quantum/audio.h                           | 1 +
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c
index 48bc72dab..2591af9f0 100644
--- a/keyboard/preonic/keymaps/default/keymap.c
+++ b/keyboard/preonic/keymaps/default/keymap.c
@@ -224,6 +224,7 @@ float tone_music[][2] = {
   {440.0*pow(2.0,(23)/12.0), 8},
   {440.0*pow(2.0,(24)/12.0), 8}
 };
+float ode_to_joy[][2] = SONG(ODE_TO_JOY);
 #endif
 
 void persistant_default_layer_set(uint16_t default_layer) {
@@ -312,7 +313,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
         case 9:
           if (record->event.pressed) {
             #ifdef AUDIO_ENABLE
-              PLAY_NOTE_ARRAY(tone_music, false, 0);
+              init_notes();
+              set_tempo(150);
+              PLAY_NOTE_ARRAY(ode_to_joy, false, .25);
               layer_on(_MUSIC);
             #endif
           }
@@ -339,6 +342,6 @@ void process_action_user(keyrecord_t *record) {
 void matrix_init_user(void) {
   #ifdef AUDIO_ENABLE
     init_notes();
-    play_notes(&start_up, false, 0);
+    PLAY_NOTE_ARRAY(start_up, false, 0);
   #endif
 }
diff --git a/quantum/audio.c b/quantum/audio.c
index 855e97361..e0413051a 100644
--- a/quantum/audio.c
+++ b/quantum/audio.c
@@ -257,7 +257,7 @@ ISR(TIMER3_COMPA_vect) {
                     place = 0.0;
                 }
                 ICR3 = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)); // Set max to the period
-                OCR3A = (int)((((double)F_CPU) / (note_frequency * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
+                OCR3A = (int)((((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
                 //OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period
                 place++;
                 // if (duty_counter > (frequencies[voice_place] / 500)) {
@@ -353,6 +353,7 @@ if (audio_config.enable) {
 
     if (note)
         stop_all_notes();
+    notes = true;
 
     notes_pointer = np;
     notes_count = n_count;
@@ -378,7 +379,6 @@ if (audio_config.enable) {
         TCCR3A |= _BV(COM3A1);
     #endif
 
-    notes = true;
 }
 
 }
@@ -408,6 +408,7 @@ if (audio_config.enable && voices < 8) {
 
     if (notes)
         stop_all_notes();
+    note = true;
     #ifdef PWM_AUDIO
         freq = freq / SAMPLE_RATE;
     #endif
@@ -439,7 +440,6 @@ if (audio_config.enable && voices < 8) {
         TCCR3A |= _BV(COM3A1);
     #endif
 
-    note = true;
 }
 
 }
diff --git a/quantum/audio.h b/quantum/audio.h
index 3aba8370a..05d314c94 100644
--- a/quantum/audio.h
+++ b/quantum/audio.h
@@ -3,6 +3,7 @@
 #include <avr/io.h>
 #include <util/delay.h>
 #include "musical_notes.h"
+#include "song_list.h"
 
 #ifndef AUDIO_H
 #define AUDIO_H
-- 
cgit v1.2.3