diff --git a/ChangeLog b/ChangeLog index a3722932..da6e0606 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,7 @@ Tom Szilagyi * Linux Makefile now install jack headers. * Use of JACK_CLIENT_DEBUG environment variable to activate debug client mode. * Definition of JACK_LOCATION variable using -D in the Makefile. + * Restore jack 0.103.0 MIDI API version. 2007-10-25 Stephane Letz diff --git a/common/JackMidiAPI.cpp b/common/JackMidiAPI.cpp index f6abb56c..a276c475 100644 --- a/common/JackMidiAPI.cpp +++ b/common/JackMidiAPI.cpp @@ -28,6 +28,9 @@ This program is free software; you can redistribute it and/or modify #define ENOBUFS 55 #endif +/* +Post jack 0.103.0 version + #ifdef __cplusplus extern "C" { #endif @@ -131,3 +134,108 @@ jack_nframes_t jack_midi_get_lost_event_count(void* port_buffer) return buf->lost_events; return 0; } +*/ + +#ifdef __cplusplus +extern "C" { +#endif + + EXPORT jack_nframes_t jack_midi_get_event_count(void* port_buffer, jack_nframes_t nframes); + + EXPORT int jack_midi_event_get(jack_midi_event_t* event, + void* port_buffer, jack_nframes_t event_index, jack_nframes_t nframes); + + EXPORT void jack_midi_clear_buffer(void* port_buffer, jack_nframes_t nframes); + + EXPORT size_t jack_midi_max_event_size(void* port_buffer, jack_nframes_t nframes); + + EXPORT jack_midi_data_t* jack_midi_event_reserve(void* port_buffer, + jack_nframes_t time, size_t data_size, jack_nframes_t nframes); + + EXPORT int jack_midi_event_write(void* port_buffer, + jack_nframes_t time, const jack_midi_data_t* data, size_t data_size, jack_nframes_t nframes); + + EXPORT jack_nframes_t jack_midi_get_lost_event_count(void* port_buffer, jack_nframes_t nframes); + +#ifdef __cplusplus +} +#endif + +using namespace Jack; + +EXPORT +jack_nframes_t jack_midi_get_event_count(void* port_buffer, jack_nframes_t) +{ + JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; + if (!buf || !buf->IsValid()) + return 0; + return buf->event_count; +} + +EXPORT +int jack_midi_event_get(jack_midi_event_t *event, void* port_buffer, jack_nframes_t event_index, jack_nframes_t) +{ + JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; + if (!buf || !buf->IsValid()) + return -EINVAL; + if (event_index < 0 || event_index >= buf->event_count) + return -ENOBUFS; + JackMidiEvent* ev = &buf->events[event_index]; + event->time = ev->time; + event->size = ev->size; + event->buffer = ev->GetData(buf); + return 0; +} + +EXPORT +void jack_midi_clear_buffer(void* port_buffer, jack_nframes_t) +{ + JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; + if (buf && buf->IsValid()) + buf->Reset(buf->nframes); +} + +EXPORT +size_t jack_midi_max_event_size(void* port_buffer, jack_nframes_t) +{ + JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; + if (buf && buf->IsValid()) + return buf->MaxEventSize(); + return 0; +} + +EXPORT +jack_midi_data_t* jack_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size, jack_nframes_t) +{ + JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; + if (!buf && !buf->IsValid()) + return 0; + if (time < 0 || time >= buf->nframes || (buf->event_count && buf->events[buf->event_count - 1].time > time)) + return 0; + return buf->ReserveEvent(time, data_size); +} + +EXPORT +int jack_midi_event_write(void* port_buffer, + jack_nframes_t time, const jack_midi_data_t* data, size_t data_size, jack_nframes_t) +{ + JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; + if (!buf && !buf->IsValid()) + return -EINVAL; + if (time < 0 || time >= buf->nframes || (buf->event_count && buf->events[buf->event_count - 1].time > time)) + return -EINVAL; + jack_midi_data_t* dest = buf->ReserveEvent(time, data_size); + if (!dest) + return -ENOBUFS; + memcpy(dest, data, data_size); + return 0; +} + +EXPORT +jack_nframes_t jack_midi_get_lost_event_count(void* port_buffer, jack_nframes_t) +{ + JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; + if (buf && buf->IsValid()) + return buf->lost_events; + return 0; +} diff --git a/common/jack/midiport.h b/common/jack/midiport.h index da574f8d..3ff415ee 100644 --- a/common/jack/midiport.h +++ b/common/jack/midiport.h @@ -45,10 +45,12 @@ typedef struct _jack_midi_event /* Get number of events in a port buffer. * * @param port_buffer Port buffer from which to retrieve event. + * @param nframes Number of valid frames this cycle. * @return number of events inside @a port_buffer */ jack_nframes_t -jack_midi_get_event_count(void* port_buffer); +jack_midi_get_event_count(void* port_buffer, + jack_nframes_t nframes); /** Get a MIDI event from an event port buffer. @@ -60,12 +62,14 @@ jack_midi_get_event_count(void* port_buffer); * @param event Event structure to store retrieved event in. * @param port_buffer Port buffer from which to retrieve event. * @param event_index Index of event to retrieve. + * @param nframes Number of valid frames this cycle. * @return 0 on success, ENODATA if buffer is empty. */ int jack_midi_event_get(jack_midi_event_t *event, void *port_buffer, - jack_nframes_t event_index); + jack_nframes_t event_index, + jack_nframes_t nframes); /** Clear an event buffer. @@ -75,9 +79,11 @@ jack_midi_event_get(jack_midi_event_t *event, * function may not be called on an input port's buffer. * * @param port_buffer Port buffer to clear (must be an output port buffer). + * @param nframes Number of valid frames this cycle. */ void -jack_midi_clear_buffer(void *port_buffer); +jack_midi_clear_buffer(void *port_buffer, + jack_nframes_t nframes); /** Get the size of the largest event that can be stored by the port. @@ -86,9 +92,10 @@ jack_midi_clear_buffer(void *port_buffer); * events already stored in the port. * * @param port_buffer Port buffer to check size of. + * @param nframes Number of valid frames this cycle. */ size_t -jack_midi_max_event_size(void* port_buffer); +jack_midi_max_event_size(void* port_buffer, jack_nframes_t nframes); /** Allocate space for an event to be written to an event port buffer. @@ -103,13 +110,15 @@ jack_midi_max_event_size(void* port_buffer); * @param port_buffer Buffer to write event to. * @param time Sample offset of event. * @param data_size Length of event's raw data in bytes. + * @param nframes Number of valid frames this event. * @return Pointer to the beginning of the reserved event's data buffer, or * NULL on error (ie not enough space). */ jack_midi_data_t* jack_midi_event_reserve(void *port_buffer, jack_nframes_t time, - size_t data_size); + size_t data_size, + jack_nframes_t nframes); /** Write an event into an event port buffer. @@ -122,13 +131,15 @@ jack_midi_event_reserve(void *port_buffer, * @param time Sample offset of event. * @param data Message data to be written. * @param data_size Length of @a data in bytes. + * @param nframes Number of valid frames this event. * @return 0 on success, ENOBUFS if there's not enough space in buffer for event. */ int jack_midi_event_write(void *port_buffer, jack_nframes_t time, const jack_midi_data_t *data, - size_t data_size); + size_t data_size, + jack_nframes_t nframes); /** Get the number of events that could not be written to @a port_buffer. @@ -137,10 +148,12 @@ jack_midi_event_write(void *port_buffer, * Currently the only way this can happen is if events are lost on port mixdown. * * @param port_buffer Port to receive count for. + * @param nframes Number of valid frames this cycle. * @returns Number of events that could not be written to @a port_buffer. */ jack_nframes_t -jack_midi_get_lost_event_count(void *port_buffer); +jack_midi_get_lost_event_count(void *port_buffer, + jack_nframes_t nframes); #ifdef __cplusplus diff --git a/example-clients/midiseq.c b/example-clients/midiseq.c index 97459aec..44f2e9af 100644 --- a/example-clients/midiseq.c +++ b/example-clients/midiseq.c @@ -45,7 +45,7 @@ int process(jack_nframes_t nframes, void *arg) int i,j; void* port_buf = jack_port_get_buffer(output_port, nframes); unsigned char* buffer; - jack_midi_clear_buffer(port_buf); + jack_midi_clear_buffer(port_buf, nframes); /*memset(buffer, 0, nframes*sizeof(jack_default_audio_sample_t));*/ for(i=0; i 1) { printf(" midisine: have %d events\n", event_count); for(i=0; i 1.0) ? ramp - 2.0 : ramp; diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index 708557d5..0e03a391 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -520,9 +520,6 @@ 4B5A1BBD0CD1CC110005BF74 /* midiseq.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midiseq.c; path = "../example-clients/midiseq.c"; sourceTree = SOURCE_ROOT; }; 4B5A1BDA0CD1CCE10005BF74 /* jack_midisine */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midisine; sourceTree = BUILT_PRODUCTS_DIR; }; 4B5A1BDC0CD1CD420005BF74 /* midisine.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midisine.c; path = "../example-clients/midisine.c"; sourceTree = SOURCE_ROOT; }; - 4B5A1D3C0CD1F4990005BF74 /* FadeConnect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = FadeConnect.cpp; path = "../example-clients/FadeConnect.cpp"; sourceTree = SOURCE_ROOT; }; - 4B5A1D3D0CD1F4990005BF74 /* FadeConnect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FadeConnect.h; path = "../example-clients/FadeConnect.h"; sourceTree = SOURCE_ROOT; }; - 4B5A1D700CD1F63F0005BF74 /* fade_connect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fade_connect.cpp; path = "../example-clients/fade_connect.cpp"; sourceTree = SOURCE_ROOT; }; 4B60CE480AAABA31004956AA /* connect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = connect.c; path = "../example-clients/connect.c"; sourceTree = SOURCE_ROOT; }; 4B66A8580934964500A89560 /* JackConstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackConstants.h; path = ../common/JackConstants.h; sourceTree = SOURCE_ROOT; }; 4B699BB1097D421600A18468 /* jackdmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jackdmp; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -962,9 +959,6 @@ 4B03383E0797E19900686131 /* Simple clients */ = { isa = PBXGroup; children = ( - 4B5A1D700CD1F63F0005BF74 /* fade_connect.cpp */, - 4B5A1D3C0CD1F4990005BF74 /* FadeConnect.cpp */, - 4B5A1D3D0CD1F4990005BF74 /* FadeConnect.h */, 4B5A1BDC0CD1CD420005BF74 /* midisine.c */, 4B5A1BBD0CD1CC110005BF74 /* midiseq.c */, 4BA692D60CBE4CC600EAD520 /* ipunload.c */,