envy24control midi updates

I have enhanced the midi control of envy24control.

1) I have fixed midi feedback, where issuing a controller event resulted in
the controller value beeing sent to the midi port again.

2) I have added midi controllers for the "mute" buttons, which can now be
controller via midi.

3) and while rewriting the midi code to support the mute buttons several
off-by-one errors have been fixed.
From: Dirk Jagdmann <doj@cubic.org>
This commit is contained in:
Jaroslav Kysela 2005-07-26 11:37:11 +00:00
parent d8758b8482
commit 632a2ae802
3 changed files with 72 additions and 20 deletions

View file

@ -63,8 +63,8 @@ void mixer_update_stream(int stream, int vol_flag, int sw_flag)
toggle_set(mixer_stereo_toggle[stream-1], FALSE);
gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][0]), 96 - v[0]);
gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][1]), 96 - v[1]);
midi_controller(stream*2-1, v[0]);
midi_controller(stream*2, v[1]);
midi_controller((stream-1)*2, v[0]);
midi_controller((stream-1)*2+1, v[1]);
}
if (sw_flag) {
snd_ctl_elem_value_t *sw;
@ -81,6 +81,8 @@ void mixer_update_stream(int stream, int vol_flag, int sw_flag)
toggle_set(mixer_stereo_toggle[stream-1], FALSE);
toggle_set(mixer_mute_toggle[stream-1][0], !v[0] ? TRUE : FALSE);
toggle_set(mixer_mute_toggle[stream-1][1], !v[1] ? TRUE : FALSE);
midi_button((stream-1)*2, v[0]);
midi_button((stream-1)*2+1, v[1]);
}
}
@ -98,10 +100,12 @@ static void set_switch1(int stream, int left, int right)
if (left >= 0 && left != snd_ctl_elem_value_get_boolean(sw, 0)) {
snd_ctl_elem_value_set_boolean(sw, 0, left);
changed = 1;
midi_button((stream-1)*2, left);
}
if (right >= 0 && right != snd_ctl_elem_value_get_boolean(sw, 1)) {
snd_ctl_elem_value_set_boolean(sw, 1, right);
changed = 1;
midi_button((stream-1)*2+1, right);
}
if (changed) {
err = snd_ctl_elem_write(ctl, sw);
@ -127,6 +131,15 @@ void mixer_toggled_mute(GtkWidget *togglebutton, gpointer data)
set_switch1(stream, vol[0], vol[1]);
}
void mixer_set_mute(int stream, int left, int right)
{
if (left >= 0)
toggle_set(mixer_mute_toggle[stream-1][0], left ? TRUE : FALSE);
if (right >= 0)
toggle_set(mixer_mute_toggle[stream-1][1], right ? TRUE : FALSE);
set_switch1(stream, left, right);
}
static void set_volume1(int stream, int left, int right)
{
snd_ctl_elem_value_t *vol;
@ -142,12 +155,12 @@ static void set_volume1(int stream, int left, int right)
if (left >= 0) {
change |= (snd_ctl_elem_value_get_integer(vol, 0) != left);
snd_ctl_elem_value_set_integer(vol, 0, left);
midi_controller(stream*2-1, left);
midi_controller((stream-1)*2, left);
}
if (right >= 0) {
change |= (snd_ctl_elem_value_get_integer(vol, 1) != right);
snd_ctl_elem_value_set_integer(vol, 1, right);
midi_controller(stream*2, right);
midi_controller((stream-1)*2+1, right);
}
if (change) {
if ((err = snd_ctl_elem_write(ctl, vol)) < 0 && err != -EBUSY)