state save/load working! signal pause/play button added, and speed control is now better.

This commit is contained in:
Sebastian
2024-11-04 01:00:59 +01:00
parent bfd8bb192e
commit 374efbe47c
10 changed files with 115 additions and 30 deletions
+17 -8
View File
@@ -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();
}
};