Browse Source

midi-program changes for DSSI

tags/v0.9.0
falkTX 13 years ago
parent
commit
056f89e5f8
1 changed files with 29 additions and 5 deletions
  1. +29
    -5
      src/carla/dssi.cpp

+ 29
- 5
src/carla/dssi.cpp View File

@@ -173,6 +173,8 @@ public:
{
//osc_send_set_program_count(&global_osc_data, m_id, midiprog.count);

// FIXME

// Parse names
int j, k, last_str_n = 0;
int str_len = strlen(value);
@@ -747,6 +749,10 @@ public:
jack_midi_event_t pin_event;
uint32_t n_pin_events = jack_midi_get_event_count(pin_buffer);

unsigned char next_bank_id = 0;
if (midiprog.current > 0 && midiprog.count > 0)
next_bank_id = midiprog.data[midiprog.current].bank;

for (i=0; i<n_pin_events; i++)
{
if (jack_midi_event_get(&pin_event, pin_buffer, i) != 0)
@@ -762,6 +768,13 @@ public:
unsigned char velo = pin_event.buffer[2] & 0x7F;
double value, velo_per = double(velo)/127;

// Bank Select
if (status == 0x00)
{
next_bank_id = velo;
continue;
}

// Control GUI stuff (channel 0 only)
if (channel == 0)
{
@@ -829,7 +842,18 @@ public:
// Program change
else if (mode == 0xC0)
{
// TODO
uint32_t mbank_id = next_bank_id;
uint32_t mprog_id = pin_event.buffer[1] & 0x7F;

for (k=0; k < midiprog.count; k++)
{
if (midiprog.data[k].bank == mbank_id && midiprog.data[k].program == mprog_id)
{
set_midi_program(k, false, false, false, false);
postpone_event(PostEventMidiProgramChange, k, 0.0);
break;
}
}
}
}
} // End of Parameters Input
@@ -904,8 +928,8 @@ public:
if (mode == 0x80)
{
midi_event->type = SND_SEQ_EVENT_NOTEOFF;
midi_event->data.note.channel = channel;
midi_event->data.note.note = note;
midi_event->data.note.channel = channel;
midi_event->data.note.note = note;
midi_event->data.note.velocity = velo;
midi_event->time.tick = min_event.time;
postpone_event(PostEventNoteOff, note, velo);
@@ -913,8 +937,8 @@ public:
else if (mode == 0x90)
{
midi_event->type = SND_SEQ_EVENT_NOTEON;
midi_event->data.note.channel = channel;
midi_event->data.note.note = note;
midi_event->data.note.channel = channel;
midi_event->data.note.note = note;
midi_event->data.note.velocity = velo;
midi_event->time.tick = min_event.time;
postpone_event(PostEventNoteOn, note, velo);


Loading…
Cancel
Save