state save/load working! signal pause/play button added, and speed control is now better.
This commit is contained in:
+17
-8
@@ -7,6 +7,7 @@
|
||||
#include "midi.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <locale>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
|
||||
@@ -30,6 +31,8 @@ namespace VISEQ::SIGNAL {
|
||||
|
||||
VEC_SPTR_Signal signals;
|
||||
|
||||
VEC_SPTR_Signal erase_signals;
|
||||
|
||||
bool loop = true;
|
||||
bool play = false;
|
||||
|
||||
@@ -72,8 +75,8 @@ namespace VISEQ::SIGNAL {
|
||||
signals.back()->start = node;
|
||||
}
|
||||
|
||||
void removeSignal(int n){
|
||||
signals.erase(signals.begin() + n);
|
||||
void removeSignal(std::shared_ptr<Signal> s){
|
||||
erase_signals.push_back(s);
|
||||
}
|
||||
|
||||
void updateSignals(){
|
||||
@@ -94,8 +97,8 @@ namespace VISEQ::SIGNAL {
|
||||
auto midinode = std::dynamic_pointer_cast<MidiNode>(s->next);
|
||||
for(auto &m : midinode->midi_outs){
|
||||
if(m.second.enabled) {
|
||||
if(midinode->send_note) midi.note(m.second.i, midinode->midi_note_channel, midinode->midi_note, midinode->midi_velocity, midinode->midi_gate);
|
||||
if(midinode->send_cc) midi.cc(m.second.i, midinode->midi_cc_channel, midinode->midi_cc, midinode->midi_cc_value);
|
||||
if(midinode->send_note) midi.note(m.second.i, midinode->midi_note_channel, (int)Clamp(midinode->midi_note + s->midi_note_offset, 0, 127), midinode->midi_velocity, midinode->midi_gate);
|
||||
if(midinode->send_cc) midi.cc(m.second.i, midinode->midi_cc_channel, midinode->midi_cc, (int)Clamp(midinode->midi_cc_value + s->midi_cc_offset, 0, 127));
|
||||
if(midinode->send_pitch_bend) midi.pitch_bend(m.second.i, midinode->midi_pitch_bend_channel, midinode->midi_pitch_bend);
|
||||
}
|
||||
}
|
||||
@@ -113,11 +116,17 @@ namespace VISEQ::SIGNAL {
|
||||
}
|
||||
|
||||
void drawSignals(Vec2Df mouse_pos, Camera2D camera){
|
||||
for(auto s : signals){
|
||||
mutex->lock();
|
||||
s->draw(mouse_pos, camera);
|
||||
mutex->unlock();
|
||||
mutex->lock();
|
||||
if(!erase_signals.empty()){
|
||||
for(auto s: erase_signals){
|
||||
std::erase(signals, s);
|
||||
}
|
||||
erase_signals.clear();
|
||||
}
|
||||
for(auto s : signals){
|
||||
s->draw(mouse_pos, camera);
|
||||
}
|
||||
mutex->unlock();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user