signal timing needs work
This commit is contained in:
@@ -62,12 +62,10 @@ namespace VISEQ::MIDI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Midi::note(int midi_out, int channel, int note, int velocity, int gate){
|
void Midi::note(int midi_out, int channel, int note, int velocity, int gate){
|
||||||
std::cout << "note on " << midi_out << " " << midi_outs.contains(midi_out) << std::endl;
|
|
||||||
if(midi_outs.contains(midi_out)){
|
if(midi_outs.contains(midi_out)){
|
||||||
if(midi_outs[midi_out]->is_port_open()){
|
if(midi_outs[midi_out]->is_port_open()){
|
||||||
midi_outs[midi_out]->send_message(libremidi::channel_events::note_on(channel, note, velocity));
|
midi_outs[midi_out]->send_message(libremidi::channel_events::note_on(channel, note, velocity));
|
||||||
notes.emplace_back(midi_out, channel, note, velocity, GetTime(), gate);
|
notes.emplace_back(midi_out, channel, note, velocity, GetTime(), gate);
|
||||||
std::cout << "note on " << midi_out << std::endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,21 +86,21 @@ namespace VISEQ::SIGNAL {
|
|||||||
auto last = std::chrono::high_resolution_clock::now();
|
auto last = std::chrono::high_resolution_clock::now();
|
||||||
while(loop){
|
while(loop){
|
||||||
std::chrono::duration<double, std::micro> diff = std::chrono::high_resolution_clock::now() - last;
|
std::chrono::duration<double, std::micro> diff = std::chrono::high_resolution_clock::now() - last;
|
||||||
if((int)diff.count() >= 250){
|
if((int)diff.count() >= 100){
|
||||||
mutex->lock();
|
mutex->lock();
|
||||||
if(play){
|
if(play){
|
||||||
for(auto& s : signals){
|
for(auto& s : signals){
|
||||||
s->direction = (s->next.lock()->position - s->position).norm();
|
s->direction = (s->next.lock()->position - s->position).norm();
|
||||||
s->update(diff.count());
|
s->update(diff.count());
|
||||||
if(s->position.dist(s->next.lock()->position) < 0.6f) {
|
if(round(s->position.dist(s->next.lock()->position)) == 0) {
|
||||||
WPTR_Node next_node = gm->next(s->next, s->last);
|
WPTR_Node next_node = gm->next(s->next, s->last);
|
||||||
s->next.lock()->trigger();
|
s->next.lock()->trigger();
|
||||||
|
|
||||||
if(next_node.lock() != s->next.lock() && !next_node.expired() && s->next.lock()->getNodeType() == NodeType::MIDINODE) {
|
if(next_node.lock() != s->next.lock() && !next_node.expired() && s->next.lock()->getNodeType() == NodeType::MIDINODE) {
|
||||||
auto midinode = std::dynamic_pointer_cast<MidiNode>(s->next.lock());
|
auto midinode = std::dynamic_pointer_cast<MidiNode>(s->next.lock());
|
||||||
for(auto &m : midinode->selected_midi_outs){
|
for(auto &m : midinode->selected_midi_outs){
|
||||||
std::cout << m.second.name << " " << m.second.i << " " << m.second.enabled << std::endl;
|
|
||||||
if(m.second.enabled) {
|
if(m.second.enabled) {
|
||||||
|
std::cout << std::chrono::high_resolution_clock::now() << " : " << diff.count() << " " << m.second.name << " " << m.second.i << " " << m.second.enabled << std::endl;
|
||||||
if(midinode->send_note) midi.note(m.second.i, midinode->getNotes().channel, (int)Clamp(midinode->getNotes().note + s->midi_note_offset, 0, 127), midinode->getNotes().velocity, midinode->getNotes().gate);
|
if(midinode->send_note) midi.note(m.second.i, midinode->getNotes().channel, (int)Clamp(midinode->getNotes().note + s->midi_note_offset, 0, 127), midinode->getNotes().velocity, midinode->getNotes().gate);
|
||||||
if(midinode->send_cc) midi.cc(m.second.i, midinode->getCC().channel, midinode->getCC().control, (int)Clamp(midinode->getCC().value + s->midi_cc_offset, 0, 127));
|
if(midinode->send_cc) midi.cc(m.second.i, midinode->getCC().channel, midinode->getCC().control, (int)Clamp(midinode->getCC().value + s->midi_cc_offset, 0, 127));
|
||||||
if(midinode->send_pc) midi.pc(m.second.i, midinode->getPC().channel, midinode->getPC().value);
|
if(midinode->send_pc) midi.pc(m.second.i, midinode->getPC().channel, midinode->getPC().value);
|
||||||
|
|||||||
+3
-1
@@ -79,9 +79,11 @@ namespace VISEQ::APP::UI{
|
|||||||
s->multiplier = state->settings.bpm / 120.0f;
|
s->multiplier = state->settings.bpm / 120.0f;
|
||||||
float signal_bpm = round(state->settings.bpm * s->multiplier * (s->speed / state->settings.speed));
|
float signal_bpm = round(state->settings.bpm * s->multiplier * (s->speed / state->settings.speed));
|
||||||
if(GuiSpinner((Rectangle){70, (float)s_signal+70 + signal_configs*20, 100, 20}, "", &s_speed, 1, 16 * state->settings.grid * 4, s->ui_edit_speed)) s->ui_edit_speed = !s->ui_edit_speed;
|
if(GuiSpinner((Rectangle){70, (float)s_signal+70 + signal_configs*20, 100, 20}, "", &s_speed, 1, 16 * state->settings.grid * 4, s->ui_edit_speed)) s->ui_edit_speed = !s->ui_edit_speed;
|
||||||
|
|
||||||
|
GuiLabel((Rectangle){175, (float)s_signal+70 + signal_configs*20, 40, 20}, std::format("{}",signal_bpm).c_str());
|
||||||
|
|
||||||
if(GuiButton((Rectangle){200,(float)s_signal+70 + signal_configs*20, 30, 20}, "1/2")) s_speed = state->settings.speed / 2;
|
if(GuiButton((Rectangle){200,(float)s_signal+70 + signal_configs*20, 30, 20}, "1/2")) s_speed = state->settings.speed / 2;
|
||||||
//if(GuiButton((Rectangle){200,(float)s_signal+70 + signal_configs*20, 30, 20},"1/4")) s_speed = state->settings.speed / 4;
|
//if(GuiButton((Rectangle){200,(float)s_signal+70 + signal_configs*20, 30, 20},"1/4")) s_speed = state->settings.speed / 4;
|
||||||
GuiLabel((Rectangle){195, (float)s_signal+70 + signal_configs*20, 30, 20}, std::format("{}",signal_bpm).c_str());
|
|
||||||
GuiToggle((Rectangle){240, (float)s_signal+70 + signal_configs*20, 20, 20},"P", &s->run);
|
GuiToggle((Rectangle){240, (float)s_signal+70 + signal_configs*20, 20, 20},"P", &s->run);
|
||||||
s->speed = s_speed;
|
s->speed = s_speed;
|
||||||
signal_configs++;
|
signal_configs++;
|
||||||
|
|||||||
Reference in New Issue
Block a user