tweaks
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
|
||||
#include "MidiController.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
|
||||
MidiController::MidiController(NoteQueue& queue) : noteQueue_(queue) {
|
||||
try {
|
||||
midiIn_ = std::make_unique<RtMidiIn>();
|
||||
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<unsigned cha
|
||||
|
||||
void MidiController::handleMessage(const std::vector<unsigned char>& 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;
|
||||
|
||||
|
||||
@@ -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<ParamDefault, static_cast<size_t>(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<size_t>(ParamId::Count);
|
||||
|
||||
@@ -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<float>(sampleRate);
|
||||
|
||||
float gain = gainEnv * getParam(ParamId::Osc1VolumeDepth);
|
||||
|
||||
Reference in New Issue
Block a user