self.slider_adjustment.connect("volume-changed", self.on_volume_changed)
self.balance_adjustment.connect("value-changed", self.on_balance_changed)
- self.connect('midi-event-received', self.on_midi_event_received)
self.slider = None
self.create_slider_widget()
return True
return False
+ def midi_events_check(self):
+ if self.channel.midi_got_events:
+ self.slider_adjustment.set_value_db(self.channel.volume)
+ self.balance_adjustment.set_value(self.channel.balance)
+
def on_midi_event_received(self, *args):
self.slider_adjustment.set_value_db(self.channel.volume)
self.balance_adjustment.set_value(self.channel.balance)
- def midi_change_callback(self, *args):
- # the changes are not applied directly to the widgets as they
- # absolutely have to be done from the gtk thread.
- self.emit('midi-event-received')
-
def on_monitor_button_toggled(self, button):
if not button.get_active():
self.app.main_mix.monitor_button.set_active(True)
self.app.set_monitored_channel(self)
self.monitor_button.set_active(True)
-gobject.signal_new('midi-event-received', Channel,
- gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
- gobject.TYPE_NONE, ())
-
class InputChannel(Channel):
post_fader_output_channel = None
if self.future_balance_midi_cc:
self.channel.balance_midi_cc = self.future_balance_midi_cc
self.channel.midi_scale = self.slider_scale.scale
- self.channel.midi_change_callback = self.midi_change_callback
self.on_volume_changed(self.slider_adjustment)
self.on_balance_changed(self.balance_adjustment)
Channel.realize(self)
self.channel.midi_scale = self.slider_scale.scale
- self.channel.midi_change_callback = self.midi_change_callback
self.on_volume_changed(self.slider_adjustment)
self.on_balance_changed(self.balance_adjustment)
Channel.realize(self)
self.channel = self.mixer.main_mix_channel
self.channel.midi_scale = self.slider_scale.scale
- self.channel.midi_change_callback = self.midi_change_callback
self.on_volume_changed(self.slider_adjustment)
self.on_balance_changed(self.balance_adjustment)
jack_default_audio_sample_t * left_buffer_ptr;
jack_default_audio_sample_t * right_buffer_ptr;
+ bool midi_got_events;
void (*midi_change_callback) (void*);
void *midi_change_callback_data;
channel_ptr->midi_change_callback_data = user_data;
}
+bool
+channel_get_midi_got_events(
+ jack_mixer_channel_t channel)
+{
+ bool t = channel_ptr->midi_got_events;
+ channel_ptr->midi_got_events = false;
+ return t;
+}
+
#undef channel_ptr
/* process input channels and mix them into main mix */
calc_channel_volumes(channel_ptr);
+ channel_ptr->midi_got_events = true;
if (channel_ptr->midi_change_callback)
channel_ptr->midi_change_callback(channel_ptr->midi_change_callback_data);
gobject.timeout_add(200, self.lash_check_events)
+ gobject.timeout_add(50, self.midi_events_check)
+
def sighandler(self, signum, frame):
#print "Signal %d received" % signum
if signum == signal.SIGUSR1:
channel.read_meter()
return True
+ def midi_events_check(self):
+ for channel in self.channels + [self.main_mix] + self.output_channels:
+ channel.midi_events_check()
+ return True
+
def add_output_channel(self, name, stereo, volume_cc, balance_cc, display_solo_buttons):
try:
channel = OutputChannel(self, name, stereo)
return -1;
}
+static PyObject*
+Channel_get_midi_got_events(ChannelObject *self, void *closure)
+{
+ PyObject *result;
+
+ if (channel_get_midi_got_events(self->channel)) {
+ result = Py_True;
+ } else {
+ result = Py_False;
+ }
+ Py_INCREF(result);
+ return result;
+}
+
+
static PyGetSetDef Channel_getseters[] = {
{"is_stereo",
(getter)Channel_get_is_stereo, NULL,
(getter)Channel_get_volume_midi_cc,
(setter)Channel_set_volume_midi_cc,
"Volume MIDI CC", NULL},
+ {"midi_got_events",
+ (getter)Channel_get_midi_got_events, NULL,
+ "Got new MIDI events", NULL},
{NULL}
};