~ruther/qmk_firmware

a7c61f2947528f79383dfe63e654346afce0d14a — Jack Humbert 7 years ago d1feb87
fix up midi stuff w/music mode
M quantum/process_keycode/process_music.c => quantum/process_keycode/process_music.c +73 -8
@@ 25,6 25,7 @@
#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))

bool music_activated = false;
bool midi_activated = false;
uint8_t music_starting_note = 0x0C;
int music_offset = 7;
uint8_t music_mode = MUSIC_MODE_CHROMATIC;


@@ 47,6 48,12 @@ static uint16_t music_sequence_interval = 100;
  #ifndef MUSIC_OFF_SONG
    #define MUSIC_OFF_SONG SONG(MUSIC_OFF_SOUND)
  #endif
  #ifndef MIDI_ON_SONG
    #define MIDI_ON_SONG SONG(MUSIC_ON_SOUND)
  #endif
  #ifndef MIDI_OFF_SONG
    #define MIDI_OFF_SONG SONG(MUSIC_OFF_SOUND)
  #endif
  #ifndef CHROMATIC_SONG
    #define CHROMATIC_SONG SONG(CHROMATIC_SOUND)
  #endif


@@ 67,6 74,8 @@ static uint16_t music_sequence_interval = 100;
  };
  float music_on_song[][2] = MUSIC_ON_SONG;
  float music_off_song[][2] = MUSIC_OFF_SONG;
  float midi_on_song[][2] = MIDI_ON_SONG;
  float midi_off_song[][2] = MIDI_OFF_SONG;
#endif

#ifndef MUSIC_MASK


@@ 75,28 84,34 @@ static uint16_t music_sequence_interval = 100;

static void music_noteon(uint8_t note) {
    #ifdef AUDIO_ENABLE
    process_audio_noteon(note);
    if (music_activated)
      process_audio_noteon(note);
    #endif
    #if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
    process_midi_basic_noteon(note);
    if (midi_activated)
      process_midi_basic_noteon(note);
    #endif
}

static void music_noteoff(uint8_t note) {
    #ifdef AUDIO_ENABLE
    process_audio_noteoff(note);
    if (music_activated)
      process_audio_noteoff(note);
    #endif
    #if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
    process_midi_basic_noteoff(note);
    if (midi_activated)
      process_midi_basic_noteoff(note);
    #endif
}

void music_all_notes_off(void) {
    #ifdef AUDIO_ENABLE
    process_audio_all_notes_off();
    if (music_activated)
      process_audio_all_notes_off();
    #endif
    #if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
    process_midi_all_notes_off();
    if (midi_activated)
      process_midi_all_notes_off();
    #endif
}



@@ 105,7 120,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
    if (keycode == MU_ON && record->event.pressed) {
        music_on();
        return false;
    }
    }    

    if (keycode == MU_OFF && record->event.pressed) {
        music_off();


@@ 121,12 136,31 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
        return false;
    }

    if (keycode == MI_ON && record->event.pressed) {
        midi_on();
        return false;
    }    

    if (keycode == MI_OFF && record->event.pressed) {
        midi_off();
        return false;
    }

    if (keycode == MI_TOG && record->event.pressed) {
        if (midi_activated) {
            midi_off();
        } else {
            midi_on();
        }
        return false;
    }

    if (keycode == MU_MOD && record->event.pressed) {
      music_mode_cycle();
      return false;
    }

    if (music_activated) {
    if (music_activated || midi_activated) {
      if (record->event.pressed) {
        if (keycode == KC_LCTL) { // Start recording
          music_all_notes_off();


@@ 224,6 258,34 @@ void music_off(void) {
    #endif
}

bool is_midi_on(void) {
    return (midi_activated != 0);
}

void midi_toggle(void) {
    if (!midi_activated) {
        midi_on();
    } else {
        midi_off();
    }
}

void midi_on(void) {
    midi_activated = 1;
    #ifdef AUDIO_ENABLE
      PLAY_SONG(midi_on_song);
    #endif
    midi_on_user();
}

void midi_off(void) {
    process_midi_all_notes_off();
    midi_activated = 0;
    #ifdef AUDIO_ENABLE
      PLAY_SONG(midi_off_song);
    #endif
}

void music_mode_cycle(void) {
  music_all_notes_off();
  music_mode = (music_mode + 1) % NUMBER_OF_MODES;


@@ 249,6 311,9 @@ __attribute__ ((weak))
void music_on_user() {}

__attribute__ ((weak))
void midi_on_user() {}

__attribute__ ((weak))
void music_scale_user() {}

#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
\ No newline at end of file

M quantum/process_keycode/process_music.h => quantum/process_keycode/process_music.h +6 -0
@@ 36,7 36,13 @@ void music_toggle(void);
void music_on(void);
void music_off(void);

bool is_midi_on(void);
void midi_toggle(void);
void midi_on(void);
void midi_off(void);

void music_on_user(void);
void midi_on_user(void);
void music_scale_user(void);
void music_all_notes_off(void);
void music_mode_cycle(void);

M quantum/quantum.c => quantum/quantum.c +1 -1
@@ 132,7 132,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {

void reset_keyboard(void) {
  clear_keyboard();
#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_ENABLE_BASIC))
#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
  music_all_notes_off();
  uint16_t timer_start = timer_read();
  PLAY_SONG(goodbye_song);

M quantum/quantum_keycodes.h => quantum/quantum_keycodes.h +3 -2
@@ 152,8 152,9 @@ enum quantum_keycodes {

    // Midi
#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
    MI_ON,  // send midi notes when music mode is enabled
    MI_OFF, // don't send midi notes when music mode is enabled
    MI_ON,
    MI_OFF,
    MI_TOG,
#endif

#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_ADVANCED))