mirror of
https://github.com/jhbruhn/eurorack.git
synced 2025-03-14 18:55:48 +00:00
43 lines
870 B
C++
43 lines
870 B
C++
#include "voice.h"
|
|
#include "stmlib/algorithms/note_stack.h"
|
|
|
|
using namespace stmlib;
|
|
|
|
void Voice::NoteOn(uint8_t note, uint8_t velocity)
|
|
{
|
|
this->noteStack.NoteOn(note, velocity);
|
|
}
|
|
|
|
void Voice::NoteOff(uint8_t note, uint8_t velocity)
|
|
{
|
|
this->noteStack.NoteOff(note);
|
|
}
|
|
|
|
void Voice::PitchBend(uint16_t pitch_bend)
|
|
{
|
|
this->pitchBend = pitch_bend;
|
|
}
|
|
|
|
float Voice::PitchOutputSemitones()
|
|
{
|
|
if (this->noteStack.size() == 0)
|
|
return 0;
|
|
|
|
NoteEntry note = this->noteStack.note_by_priority(NOTE_STACK_PRIORITY_LAST);
|
|
|
|
// insanely temporary stuff ahead
|
|
|
|
// ULTRA NAIVE pitch to cv assuming max value is 10V
|
|
float semitones = note.note;
|
|
|
|
float pitch_bend = (this->pitchBend - 32768.0) / 65536.0 * 2.0; // -1 to 1
|
|
|
|
semitones += pitch_bend * 1.5f; // pitch bend range: 1.5 semitones
|
|
|
|
return semitones;
|
|
};
|
|
|
|
void Voice::Reset()
|
|
{
|
|
this->noteStack.Clear();
|
|
}
|