Use new Jack Metadata API to mark CV ports.
By adding metadata key "http://jackaudio.org/metadata/signal-type" value "CV" pair to CV ports, patch bays can discriminate between audio and CV ports (SVN patchage e.g. can already do so). Metadata API is only implemented in Jack1 for now, this patch will thus have no effect when linked to Jack1/2 without support for metadata.
This commit is contained in:
parent
467e369cd1
commit
2d43a8abe7
|
@ -221,7 +221,7 @@ Controller_Module::mode ( Mode m )
|
|||
char prefix[512];
|
||||
snprintf( prefix, sizeof(prefix), "CV-%s", p->name() );
|
||||
|
||||
add_aux_audio_input( prefix, 0 );
|
||||
add_aux_cv_input( prefix, 0 );
|
||||
|
||||
chain()->client()->unlock();
|
||||
}
|
||||
|
|
|
@ -1270,7 +1270,7 @@ Module::set_latency ( JACK::Port::direction_e dir, nframes_t min, nframes_t max
|
|||
|
||||
|
||||
bool
|
||||
Module::add_aux_port ( bool input, const char *prefix, int i )
|
||||
Module::add_aux_port ( bool input, const char *prefix, int i, JACK::Port::type_e type )
|
||||
{
|
||||
const char *trackname = chain()->strip()->group()->single() ? NULL : chain()->name();
|
||||
|
||||
|
@ -1278,7 +1278,7 @@ Module::add_aux_port ( bool input, const char *prefix, int i )
|
|||
|
||||
char *portname = generate_port_name( prefix, direction, i );
|
||||
|
||||
JACK::Port *po = new JACK::Port( chain()->client(), trackname, portname, direction, JACK::Port::Audio );
|
||||
JACK::Port *po = new JACK::Port( chain()->client(), trackname, portname, direction, type );
|
||||
|
||||
free(portname);
|
||||
|
||||
|
@ -1319,7 +1319,7 @@ Module::add_aux_port ( bool input, const char *prefix, int i )
|
|||
bool
|
||||
Module::add_aux_audio_output( const char *prefix, int i )
|
||||
{
|
||||
bool r = add_aux_port ( false, prefix, i );
|
||||
bool r = add_aux_port ( false, prefix, i , JACK::Port::Audio);
|
||||
|
||||
if ( r )
|
||||
mixer->maybe_auto_connect_output( &aux_audio_output.back() );
|
||||
|
@ -1330,7 +1330,13 @@ Module::add_aux_audio_output( const char *prefix, int i )
|
|||
bool
|
||||
Module::add_aux_audio_input( const char *prefix, int i )
|
||||
{
|
||||
return add_aux_port ( true, prefix, i );
|
||||
return add_aux_port ( true, prefix, i , JACK::Port::Audio);
|
||||
}
|
||||
|
||||
bool
|
||||
Module::add_aux_cv_input( const char *prefix, int i )
|
||||
{
|
||||
return add_aux_port ( true, prefix, i , JACK::Port::CV);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -499,7 +499,7 @@ protected:
|
|||
virtual void get ( Log_Entry &e ) const;
|
||||
virtual void set ( Log_Entry &e );
|
||||
|
||||
bool add_aux_port ( bool input, const char *prefix, int n );
|
||||
bool add_aux_port ( bool input, const char *prefix, int n , JACK::Port::type_e type );
|
||||
|
||||
public:
|
||||
nframes_t sample_rate ( void ) const { return Module::_sample_rate; }
|
||||
|
@ -513,6 +513,7 @@ public:
|
|||
|
||||
bool add_aux_audio_output ( const char *prefix, int n );
|
||||
bool add_aux_audio_input ( const char *prefix, int n );
|
||||
bool add_aux_cv_input ( const char *prefix, int n );
|
||||
|
||||
static void set_sample_rate ( nframes_t srate ) { _sample_rate = srate; }
|
||||
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
|
||||
#include <jack/jack.h>
|
||||
#include <jack/midiport.h>
|
||||
#ifdef HAVE_JACK_METADATA
|
||||
# include <jack/metadata.h>
|
||||
#endif
|
||||
#include <Mutex.H>
|
||||
|
||||
typedef jack_nframes_t nframes_t;
|
||||
|
|
|
@ -71,6 +71,8 @@ namespace JACK
|
|||
_type = Audio;
|
||||
if ( strstr( type, "MIDI") )
|
||||
_type = MIDI;
|
||||
else if ( strstr( type, "CV)") )
|
||||
_type = CV;
|
||||
|
||||
_client->port_added( this );
|
||||
|
||||
|
@ -190,10 +192,18 @@ namespace JACK
|
|||
|
||||
DMESSAGE( "Activating port name %s", jackname );
|
||||
_port = jack_port_register( _client->jack_client(), jackname,
|
||||
_type == Audio ? JACK_DEFAULT_AUDIO_TYPE : JACK_DEFAULT_MIDI_TYPE,
|
||||
( _type == Audio ) || ( _type == CV ) ? JACK_DEFAULT_AUDIO_TYPE : JACK_DEFAULT_MIDI_TYPE,
|
||||
flags,
|
||||
0 );
|
||||
|
||||
#ifdef HAVE_JACK_METADATA
|
||||
if ( _type == CV )
|
||||
{
|
||||
jack_uuid_t uuid = jack_port_uuid( _port );
|
||||
jack_set_property( _client->jack_client(), uuid, "http://jackaudio.org/metadata/signal-type", "CV", "text/plain" );
|
||||
}
|
||||
#endif
|
||||
|
||||
DMESSAGE( "Port = %p", _port );
|
||||
|
||||
if ( ! _port )
|
||||
|
@ -266,7 +276,16 @@ namespace JACK
|
|||
Port::deactivate ( void )
|
||||
{
|
||||
if ( _port )
|
||||
{
|
||||
#ifdef HAVE_JACK_METADATA
|
||||
if ( _type == CV )
|
||||
{
|
||||
jack_uuid_t uuid = jack_port_uuid(_port);
|
||||
jack_remove_property(_client->jack_client(), uuid, "http://jackaudio.org/metadata/signal-type");
|
||||
}
|
||||
#endif
|
||||
jack_port_unregister( _client->jack_client(), _port );
|
||||
}
|
||||
|
||||
_port = 0;
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace JACK
|
|||
bool operator < ( const Port & rhs ) const;
|
||||
|
||||
enum direction_e { Output, Input };
|
||||
enum type_e { Audio, MIDI };
|
||||
enum type_e { Audio, MIDI, CV };
|
||||
|
||||
static int max_name ( void );
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ Control_Sequence::update_port_name ( void )
|
|||
|
||||
if ( ! _output )
|
||||
{
|
||||
_output = new JACK::Port( engine, track()->name(), s, JACK::Port::Output, JACK::Port::Audio );
|
||||
_output = new JACK::Port( engine, track()->name(), s, JACK::Port::Output, JACK::Port::CV );
|
||||
_output->terminal( true );
|
||||
needs_activation = true;
|
||||
}
|
||||
|
|
6
wscript
6
wscript
|
@ -61,6 +61,12 @@ def configure(conf):
|
|||
define_name='HAVE_JACK_PORT_GET_LATENCY_RANGE',
|
||||
fragment='#include <jack/jack.h>\nint main (int argc, char**argv) { jack_port_get_latency_range( (jack_port_t*)0, JackCaptureLatency, (jack_latency_range_t *)0 ); }',
|
||||
mandatory=False);
|
||||
|
||||
conf.check(function_name='jack_get_property',
|
||||
header_name='jack/metadata.h',
|
||||
define_name='HAVE_JACK_METADATA',
|
||||
uselib='JACK',
|
||||
mandatory=False)
|
||||
|
||||
conf.check_cfg(package='x11', uselib_store='XLIB',args="--cflags --libs",
|
||||
mandatory=True)
|
||||
|
|
Loading…
Reference in New Issue