11#include "process_music.h"
22
3+ #ifdef AUDIO_ENABLE
4+ #include "process_audio.h"
5+ #endif
6+ #if defined(MIDI_ENABLE ) && defined(MIDI_BASIC )
7+ #include "process_midi.h"
8+ #endif
9+
10+ #if defined(AUDIO_ENABLE ) || (defined(MIDI_ENABLE ) && defined(MIDI_BASIC ))
11+
312bool music_activated = false;
413uint8_t music_starting_note = 0x0C ;
514int music_offset = 7 ;
@@ -8,38 +17,41 @@ int music_offset = 7;
817static bool music_sequence_recording = false;
918static bool music_sequence_recorded = false;
1019static bool music_sequence_playing = false;
11- static float music_sequence [16 ] = {0 };
20+ static uint8_t music_sequence [16 ] = {0 };
1221static uint8_t music_sequence_count = 0 ;
1322static uint8_t music_sequence_position = 0 ;
1423
1524static uint16_t music_sequence_timer = 0 ;
1625static uint16_t music_sequence_interval = 100 ;
1726
18- bool process_music (uint16_t keycode , keyrecord_t * record ) {
27+ static void music_noteon (uint8_t note ) {
28+ #ifdef AUDIO_ENABLE
29+ process_audio_noteon (note );
30+ #endif
31+ #if defined(MIDI_ENABLE ) && defined(MIDI_BASIC )
32+ process_midi_basic_noteon (note );
33+ #endif
34+ }
1935
20- #ifdef AUDIO_ENABLE
21- if (keycode == AU_ON && record -> event .pressed ) {
22- audio_on ();
23- return false;
24- }
36+ static void music_noteoff (uint8_t note ) {
37+ #ifdef AUDIO_ENABLE
38+ process_audio_noteoff (note );
39+ #endif
40+ #if defined(MIDI_ENABLE ) && defined(MIDI_BASIC )
41+ process_midi_basic_noteoff (note );
42+ #endif
43+ }
2544
26- if (keycode == AU_OFF && record -> event .pressed ) {
27- audio_off ();
28- return false;
29- }
45+ static void music_all_notes_off (void ) {
46+ #ifdef AUDIO_ENABLE
47+ process_audio_stop_all_notes ();
48+ #endif
49+ #if defined(MIDI_ENABLE ) && defined(MIDI_BASIC )
50+ process_midi_basic_stop_all_notes ();
51+ #endif
52+ }
3053
31- if (keycode == AU_TOG && record -> event .pressed ) {
32- if (is_audio_on ())
33- {
34- audio_off ();
35- }
36- else
37- {
38- audio_on ();
39- }
40- return false;
41- }
42- #endif // AUDIO_ENABLE
54+ bool process_music (uint16_t keycode , keyrecord_t * record ) {
4355
4456 if (keycode == MU_ON && record -> event .pressed ) {
4557 music_on ();
@@ -63,26 +75,10 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
6375 return false;
6476 }
6577
66- #ifdef AUDIO_ENABLE
67- if (keycode == MUV_IN && record -> event .pressed ) {
68- voice_iterate ();
69- music_scale_user ();
70- return false;
71- }
72-
73- if (keycode == MUV_DE && record -> event .pressed ) {
74- voice_deiterate ();
75- music_scale_user ();
76- return false;
77- }
78- #endif // AUDIO_ENABLE
79-
8078 if (music_activated ) {
8179
8280 if (keycode == KC_LCTL && record -> event .pressed ) { // Start recording
83- #ifdef AUDIO_ENABLE
84- stop_all_notes ();
85- #endif
81+ music_all_notes_off ();
8682 music_sequence_recording = true;
8783 music_sequence_recorded = false;
8884 music_sequence_playing = false;
@@ -91,9 +87,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
9187 }
9288
9389 if (keycode == KC_LALT && record -> event .pressed ) { // Stop recording/playing
94- #ifdef AUDIO_ENABLE
95- stop_all_notes ();
96- #endif
90+ music_all_notes_off ();
9791 if (music_sequence_recording ) { // was recording
9892 music_sequence_recorded = true;
9993 }
@@ -103,9 +97,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
10397 }
10498
10599 if (keycode == KC_LGUI && record -> event .pressed && music_sequence_recorded ) { // Start playing
106- #ifdef AUDIO_ENABLE
107- stop_all_notes ();
108- #endif
100+ music_all_notes_off ();
109101 music_sequence_recording = false;
110102 music_sequence_playing = true;
111103 music_sequence_position = 0 ;
@@ -124,32 +116,27 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
124116 music_sequence_interval += 10 ;
125117 return false;
126118 }
119+
127120 #define MUSIC_MODE_GUITAR
128121
129- #ifdef AUDIO_ENABLE
130122 #ifdef MUSIC_MODE_CHROMATIC
131- float freq = (( float ) 220.0 ) * pow ( 2.0 , -5.0 ) * pow ( 2.0 ,( music_starting_note + record -> event .key .col + music_offset )/ 12.0 + (MATRIX_ROWS - record -> event .key .row ) );
123+ uint8_t note = (music_starting_note + record -> event .key .col + music_offset - 3 ) + 12 * (MATRIX_ROWS - record -> event .key .row );
132124 #elif defined(MUSIC_MODE_GUITAR )
133- float freq = (( float ) 220.0 ) * pow ( 2.0 , -5.0 ) * pow ( 2.0 ,( music_starting_note + record -> event .key .col + music_offset )/ 12.0 + ( float )( MATRIX_ROWS - record -> event .key .row + 7 ) * 5.0 / 12 );
125+ uint8_t note = (music_starting_note + record -> event .key .col + music_offset + 32 ) + 5 * ( MATRIX_ROWS - record -> event .key .row );
134126 #elif defined(MUSIC_MODE_VIOLIN )
135- float freq = (( float ) 220.0 ) * pow ( 2.0 , -5.0 ) * pow ( 2.0 ,( music_starting_note + record -> event .key .col + music_offset )/ 12.0 + ( float )( MATRIX_ROWS - record -> event .key .row + 5 ) * 7.0 / 12 );
127+ uint8_t note = (music_starting_note + record -> event .key .col + music_offset + 32 ) + 7 * ( MATRIX_ROWS - record -> event .key .row );
136128 #else
137- float freq = (( float ) 220.0 ) * pow ( 2.0 , -5.0 ) * pow ( 2.0 ,( music_starting_note + SCALE [record -> event .key .col + music_offset ])/ 12.0 + (MATRIX_ROWS - record -> event .key .row ) );
129+ uint8_t note = (music_starting_note + SCALE [record -> event .key .col + music_offset ] - 3 ) + 12 * (MATRIX_ROWS - record -> event .key .row );
138130 #endif
139- #endif // AUDIO_ENABLE
140131
141132 if (record -> event .pressed ) {
142- #ifdef AUDIO_ENABLE
143- play_note (freq , 0xF );
133+ music_noteon (note );
144134 if (music_sequence_recording ) {
145- music_sequence [music_sequence_count ] = freq ;
135+ music_sequence [music_sequence_count ] = note ;
146136 music_sequence_count ++ ;
147137 }
148- #endif
149138 } else {
150- #ifdef AUDIO_ENABLE
151- stop_note (freq );
152- #endif
139+ music_noteoff (note );
153140 }
154141
155142 if (keycode < 0xFF ) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
@@ -177,32 +164,26 @@ void music_on(void) {
177164
178165void music_off (void ) {
179166 music_activated = 0 ;
180- #ifdef AUDIO_ENABLE
181- stop_all_notes ();
182- #endif
167+ music_all_notes_off ();
183168}
184169
185-
186- __attribute__ ((weak ))
187- void music_on_user () {}
188-
189- #ifdef AUDIO_ENABLE
190- __attribute__ ((weak ))
191- void audio_on_user () {}
192- #endif
193-
194- __attribute__ ((weak ))
195- void music_scale_user () {}
196-
197170void matrix_scan_music (void ) {
198171 if (music_sequence_playing ) {
199172 if ((music_sequence_timer == 0 ) || (timer_elapsed (music_sequence_timer ) > music_sequence_interval )) {
200173 music_sequence_timer = timer_read ();
201- #ifdef AUDIO_ENABLE
202- stop_note ( music_sequence [( music_sequence_position - 1 < 0 )?( music_sequence_position - 1 + music_sequence_count ):( music_sequence_position - 1 )]) ;
203- play_note ( music_sequence [ music_sequence_position ], 0xF );
204- #endif
174+ uint8_t prev_note = music_sequence [( music_sequence_position - 1 < 0 )?( music_sequence_position - 1 + music_sequence_count ):( music_sequence_position - 1 )];
175+ uint8_t next_note = music_sequence [ music_sequence_position ] ;
176+ music_noteoff ( prev_note );
177+ music_noteon ( next_note );
205178 music_sequence_position = (music_sequence_position + 1 ) % music_sequence_count ;
206179 }
207180 }
208181}
182+
183+ __attribute__ ((weak ))
184+ void music_on_user () {}
185+
186+ __attribute__ ((weak ))
187+ void music_scale_user () {}
188+
189+ #endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
0 commit comments