[Jack-Devel] Fwd: Possible error codes for jack_midi_event_get()?
Hanspeter Portner
dev at open-music-kontrollers.ch
Sat Jul 28 20:21:59 CEST 2018
On 28.07.2018 16:55, Matthias Geier wrote:
> Dear list.
>
> I'm the author of one of the Python bindings for JACK:
> https://jackclient-python.readthedocs.io/
>
> I was a bit lazy when implementing a generator function that's
> supposed to yield all incoming MIDI events one-by-one.
>
> Here's the code if somebody is interested (it's using CFFI and the
> _lib object is a wrapper for the JACK API):
>
>
> def incoming_midi_events(self):
> event = self._event
> buf = _lib.jack_port_get_buffer(
> self._ptr, self._client.blocksize)
> for i in range(_lib.jack_midi_get_event_count(buf)):
> err = _lib.jack_midi_event_get(event, buf, i)
> # TODO: proper error handling if this ever happens:
> assert not err, err
> yield event.time, _ffi.buffer(event.buffer, event.size)
>
>
> As you can see, I didn't check the return value of
> jack_midi_event_get(), I just added an "assert" statement hoping that
> somebody would report it if the call to jack_midi_event_get() would
> ever fail.
>
> I didn't hear anything for a long time, but recently I got a bug
> report where the assertion was violated:
> https://github.com/spatialaudio/jackclient-python/issues/54
>
> This shows that jack_midi_event_get() can raise an error, even if I
> check with jack_midi_get_event_count() beforehand.
>
> My question is now: how should I react to this error?
For JACK1 error is only returned if midi_event_index >= midi_event_count [1].
For JACK2 the same is true; additionally it can fail if the MIDI port buffer is
invalid (whatever that means...) [2].
[1] https://github.com/jackaudio/jack1/blob/master/libjack/midiport.c#L96
[2] https://github.com/jackaudio/jack2/blob/master/common/JackMidiAPI.cpp#L67
>
> Shall I ...
>
> * discard the current event and continue reading further events?
>
> * discard the current and all following events in this block?
>
> * raise an error?
>
> * do something else?
Well, there is no valid event, so ignore it ?
>
> Can I guarantee that no incoming MIDI events get lost?
>
MIDI events can only get lost while multiplexed down from multiple ports into
one (and the latter can not take them all), iirc.
> Another related question: what error code is supposed to be returned?
> The documentation
> (http://www.jackaudio.org/api/group__MIDIAPI.html#ga838c794bd1451bfd47edde1c7cd1ff4f)
> mentions ENODATA, but according to my bug report, ENOBUFS (-105) was
> returned.
>
> Is this a bug in JACK or an omission in the documentation?
It is in the documentation, that it can fail [3].
[3] http://jackaudio.org/api/group__MIDIAPI.html#ga838c794bd1451bfd47edde1c7cd1ff4f
>
> I don't know which JACK version was used, the OS was Ubuntu 18.04 LTS 64 bits.
>
> cheers,
> Matthias
More information about the Jackaudio
mailing list