Redox wireless =======

Redox logo

**Redox**: the **R**educed **E**rgo**dox** project. More information and building instruction [here](https://github.com/mattdibi/redox-keyboard). A wireless version of the Redox keyboard. - Keyboard Maintainer: [@mattdibi](https://github.com/mattdibi) - Hardware Supported: Redox-w rev1.0W PCB - Hardware Availability: Falbatech Make example for this keyboard (after setting up your build environment): ```sh make redox_w:default ``` Example of flashing this keyboard: ```sh make redox_w:default:avrdude ``` See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). For nRF51822 firmware upload instruction and development see [the Redox wireless firmware repository](https://github.com/mattdibi/redox-w-firmware). ## Redox-w Notes These configuration files were based off the [Mitosis](https://github.com/qmk/qmk_firmware/tree/master/keyboards/mitosis) and [Atreus](https://github.com/technomancy/atreus) keyboard. It assumes a Pro Micro is being used, however retains the 'make upload' feature from the Atreus branch. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves. The matrix.c file contains the code to poll the external microcontroller for the key matrix. As long as this file is not changed, all other QMK features are supported. ommitdiffstats
path: root/quantum/process_keycode/process_audio.c
blob: 3b5fa8490b93ae76c8eb7e9a221bb6687570c3dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "audio.h"
#include "process_audio.h"

#ifndef VOICE_CHANGE_SONG
#    define VOICE_CHANGE_SONG SONG(VOICE_CHANGE_SOUND)
#endif
float voice_change_song[][2] = VOICE_CHANGE_SONG;

#ifndef PITCH_STANDARD_A
#    define PITCH_STANDARD_A 440.0f
#endif

float compute_freq_for_midi_note(uint8_t note) {
    // https://en.wikipedia.org/wiki/MIDI_tuning_standard
    return pow(2.0, (note - 69) / 12.0) * PITCH_STANDARD_A;
}

bool process_audio(uint16_t keycode, keyrecord_t *record) {
    if (keycode == AU_ON && record->event.pressed) {
        audio_on();
        return false;
    }

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

    if (keycode == AU_TOG && record->event.pressed) {
        if (is_audio_on()) {
            audio_off();
        } else {
            audio_on();
        }
        return false;
    }

    if (keycode == MUV_IN && record->event.pressed) {
        voice_iterate();
        PLAY_SONG(voice_change_song);
        return false;
    }

    if (keycode == MUV_DE && record->event.pressed) {
        voice_deiterate();
        PLAY_SONG(voice_change_song);
        return false;
    }

    return true;
}

void process_audio_noteon(uint8_t note) { play_note(compute_freq_for_midi_note(note), 0xF); }

void process_audio_noteoff(uint8_t note) { stop_note(compute_freq_for_midi_note(note)); }

void process_audio_all_notes_off(void) { stop_all_notes(); }

__attribute__((weak)) void audio_on_user() {}