diff --git a/src/MidiController.cpp b/src/MidiController.cpp index bd5fdcb..fce6773 100644 --- a/src/MidiController.cpp +++ b/src/MidiController.cpp @@ -1,15 +1,17 @@ #include "MidiController.h" + #include +#include MidiController::MidiController(NoteQueue& queue) : noteQueue_(queue) { try { midiIn_ = std::make_unique(); - midiIn_->ignoreTypes(false, true, false); + midiIn_->ignoreTypes(true, true, true); } catch (RtMidiError& e) { std::cerr << "RtMidi init failed: " << e.getMessage() << std::endl; } - + // TODO: this still doesnt work on windows } MidiController::~MidiController() { @@ -54,6 +56,10 @@ void MidiController::midiCallback(double /*deltaTime*/, std::vector& msg) { unsigned char status = msg[0] & 0xF0; + + if (status == 0xFE) return; + if (status == 0xF8) return; + unsigned char note = msg.size() > 1 ? msg[1] : 0; unsigned char vel = msg.size() > 2 ? msg[2] : 0; diff --git a/src/ParameterStore.h b/src/ParameterStore.h index 3923b81..bef7002 100644 --- a/src/ParameterStore.h +++ b/src/ParameterStore.h @@ -64,23 +64,23 @@ struct ParamDefault { // later TODO: and then when I have full on profile saving there will be a default profile to load from constexpr std::array(ParamId::Count)> PARAM_DEFS {{ { 100.0f, 20.0f, 600.0f}, // Osc1Freq - { 0.0f, 0.0f, 0.0f}, // Osc1WaveSelector1 + { 2.0f, 0.0f, 0.0f}, // Osc1WaveSelector1 { 1.0f, 0.0f, 0.0f}, // Osc1WaveSelector2 { 1.0f, 0.0f, 2.0f}, // Osc1VolumeDepth { 0.05f, 0.0f, 2.0f}, // Osc1VolumeEnvA { 0.2f, 0.0f, 2.0f}, // Osc1VolumeEnvD { 0.7f, 0.0f, 1.0f}, // Osc1VolumeEnvS { 0.2f, 0.0f, 2.0f}, // Osc1VolumeEnvR - { 1.0f, 0.0f, 8.0f}, // FilterCutoffDepth + { 4.0f, 0.0f, 8.0f}, // FilterCutoffDepth { 0.05f, 0.0f, 2.0f}, // FilterCutoffEnvA - { 0.05f, 0.0f, 2.0f}, // FilterCutoffEnvD - { 2.0f, 0.0f, 1.0f}, // FilterCutoffEnvS - { 0.08f, 0.0f, 2.0f}, // FilterCutoffEnvR - { 1.414f, 0.0f, 8.0f}, // FilterResonanceDepth + { 0.20f, 0.0f, 2.0f}, // FilterCutoffEnvD + { 0.2f, 0.0f, 1.0f}, // FilterCutoffEnvS + { 0.25f, 0.0f, 2.0f}, // FilterCutoffEnvR + { 3.0f, 0.0f, 8.0f}, // FilterResonanceDepth { 0.05f, 0.0f, 2.0f}, // FilterResonanceEnvA - { 0.05f, 0.0f, 2.0f}, // FilterResonanceEnvD + { 0.20f, 0.0f, 2.0f}, // FilterResonanceEnvD { 0.5f, 0.0f, 1.0f}, // FilterResonanceEnvS - { 0.10f, 0.0f, 2.0f}, // FilterResonanceEnvR + { 0.30f, 0.0f, 2.0f}, // FilterResonanceEnvR }}; constexpr size_t PARAM_COUNT = static_cast(ParamId::Count); diff --git a/src/synth/Synth.cpp b/src/synth/Synth.cpp index 700c658..f4febfe 100644 --- a/src/synth/Synth.cpp +++ b/src/synth/Synth.cpp @@ -9,7 +9,7 @@ #endif // TODO: you get it, also in a yml config -#define SYNTH_PITCH_STANDARD 432.0f // frequency of home pitch +#define SYNTH_PITCH_STANDARD 440.0f // frequency of home pitch #define SYNTH_MIDI_HOME 69 // midi note index of home pitch #define SYNTH_NOTES_PER_OCTAVE 12 @@ -104,7 +104,7 @@ void Synth::process(float* out, uint32_t nFrames, uint32_t sampleRate) { } // TODO: make pitchOffset variable for each oscillator (maybe three values like octave, semitone offset, and pitch offset in cents) - float pitchOffset = 0.5f; + float pitchOffset = 1.0f; float phaseInc = pitchOffset * 2.0f * M_PI * frequency_ / static_cast(sampleRate); float gain = gainEnv * getParam(ParamId::Osc1VolumeDepth);