mirror of
https://github.com/alsa-project/alsa-tools.git
synced 2025-10-29 05:40:25 -04:00
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:
parent
d8758b8482
commit
632a2ae802
3 changed files with 72 additions and 20 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue