main process: provisional decoding of midi messages
This commit is contained in:
parent
847af03dc7
commit
804e1cb738
2 changed files with 31 additions and 9 deletions
2
delay.c
2
delay.c
|
@ -8,7 +8,7 @@ void delay_init(
|
|||
struct delay * delay
|
||||
) {
|
||||
delay->mix = 0.8;
|
||||
delay->feedback = 0.6;
|
||||
delay->feedback = 0.8;
|
||||
delay->duration = 0;
|
||||
delay->buf_idx = 0;
|
||||
delay->buf_capacity = 0;
|
||||
|
|
38
guitfx.c
38
guitfx.c
|
@ -75,15 +75,37 @@ static void on_process(void *userdata, struct spa_io_position *position)
|
|||
char * midi_data = SPA_POD_BODY(&c->value);
|
||||
unsigned size = SPA_POD_BODY_SIZE(&c->value);
|
||||
|
||||
uint64_t cur_tap = frame + c->offset;
|
||||
uint64_t duration = cur_tap - data->last_tap;
|
||||
data->last_tap = cur_tap;
|
||||
|
||||
printf("duration = %lu\n", duration);
|
||||
if( duration < (4*position->clock.rate.denom) ) {
|
||||
delay_set_time( &data->delay, duration );
|
||||
}
|
||||
printf("[%d] MIDI message (%d bytes) : %x, %x, %x\n", sec, size, midi_data[0], midi_data[1], midi_data[2]);
|
||||
|
||||
switch( midi_data[0] & 0xff ) {
|
||||
case 0xb0:
|
||||
switch( midi_data[1] ) {
|
||||
case 0x0b:
|
||||
// expr pedal
|
||||
float val_f = ((float)midi_data[2]) / 128.0;
|
||||
printf("Expr Pedal %f\n", val_f);
|
||||
|
||||
data->delay.mix = val_f;
|
||||
break;
|
||||
|
||||
case 0x42:
|
||||
// sust pedal
|
||||
|
||||
uint64_t cur_tap = frame + c->offset;
|
||||
uint64_t duration = cur_tap - data->last_tap;
|
||||
data->last_tap = cur_tap;
|
||||
if( duration < (4*position->clock.rate.denom) ) {
|
||||
delay_set_time( &data->delay, duration/4 );
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xc0:
|
||||
// program change
|
||||
printf("program change: %u\n", midi_data[1]);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
printf("on_process(): non midi-control\n");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue