Browse Source

Attempt to create control output ports properly.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
e637da4b77
6 changed files with 79 additions and 26 deletions
  1. +4
    -2
      Timeline/Control_Sequence.C
  2. +4
    -2
      Timeline/Control_Sequence.H
  3. +46
    -5
      Timeline/Port.C
  4. +6
    -0
      Timeline/Port.H
  5. +17
    -17
      Timeline/Track.C
  6. +2
    -0
      Timeline/Track.H

+ 4
- 2
Timeline/Control_Sequence.C View File

@@ -27,7 +27,7 @@ bool Control_Sequence::draw_with_gradient = true;
bool Control_Sequence::draw_with_polygon = true;
bool Control_Sequence::draw_with_grid = true;

Control_Sequence::Control_Sequence ( Track *track ) : Sequence( 0, 0, 0, 0 ), output( "foo", Port::Output )
Control_Sequence::Control_Sequence ( Track *track ) : Sequence( 0, 0, 0, 0 )
{
init();

@@ -36,6 +36,8 @@ Control_Sequence::Control_Sequence ( Track *track ) : Sequence( 0, 0, 0, 0 ), ou
if ( track )
track->add( this );

// output.activate( track->name(),

log_create();
}

@@ -335,7 +337,7 @@ Control_Sequence::play ( sample_t *buf, nframes_t frame, nframes_t nframes )
nframes_t
Control_Sequence::process ( nframes_t nframes )
{
void *buf = output.buffer( nframes );
void *buf = _output->buffer( nframes );

return play( (sample_t*)buf, transport->frame, nframes );
}

+ 4
- 2
Timeline/Control_Sequence.H View File

@@ -26,11 +26,12 @@
class Control_Sequence : public Sequence
{

Port *_output;

bool _highlighted;

void init ( void );

Port output;

protected:

@@ -38,7 +39,7 @@ protected:
virtual void get ( Log_Entry &e ) const;
void set ( Log_Entry &e );

Control_Sequence ( ) : Sequence( 0, 0, 0, 1 ), output( "foo", Port::Output )
Control_Sequence ( ) : Sequence( 0, 0, 0, 1 )
{
init();
}
@@ -65,6 +66,7 @@ public:


/* Engine */
void output ( Port *p ) { _output = p; }
nframes_t play ( sample_t *buf, nframes_t frame, nframes_t nframes );
nframes_t process ( nframes_t nframes );



+ 46
- 5
Timeline/Port.C View File

@@ -23,6 +23,8 @@

#include "Engine.H"

#include <stdio.h> // sprintf

/* nframes is the number of frames to buffer */
Port::Port ( jack_port_t *port )
{
@@ -32,14 +34,37 @@ Port::Port ( jack_port_t *port )

Port::Port ( const char *name, type_e dir )
{
_name = name;
activate( name, dir );
}

_port = jack_port_register( engine->client(), _name,
JACK_DEFAULT_AUDIO_TYPE,
dir == Output ? JackPortIsOutput : JackPortIsInput,
0 );
static const char *
name_for_port ( Port::type_e dir, const char *base, int n, const char *type )
{
static char pname[256];

const char *dir_s = dir == Port::Output ? "out" : "in";

if ( type )
snprintf( pname, sizeof( pname ), "%s/%s-%s-%d", base, type, dir_s, n + 1 );
else
snprintf( pname, sizeof( pname ), "%s/%s-%d", base, dir_s, n + 1 );

return pname;
}

Port::Port ( type_e dir, const char *base, int n, const char *type )
{
const char *name = name_for_port( dir, base, n, type );

activate( name, dir );
}

/* Port::Port ( ) */
/* { */
/* _name = NULL; */
/* _port = NULL; */
/* } */

Port::~Port ( )
{

@@ -48,6 +73,16 @@ Port::~Port ( )

}

void
Port::activate ( const char *name, type_e dir )
{
_name = name;
_port = jack_port_register( engine->client(), _name,
JACK_DEFAULT_AUDIO_TYPE,
dir == Output ? JackPortIsOutput : JackPortIsInput,
0 );
}

void
Port::shutdown ( void )
{
@@ -64,6 +99,12 @@ Port::name ( const char *name )
return 0 == jack_port_set_name( _port, name );
}

bool
Port::name ( const char *base, int n, const char *type )
{
return name( name_for_port( this->type(), base, n, type ) );
}

void
Port::write ( sample_t *buf, nframes_t nframes )
{


+ 6
- 0
Timeline/Port.H View File

@@ -34,6 +34,9 @@ public:

Port ( jack_port_t *port );
Port ( const char *name, type_e dir );
Port ( type_e dir, const char *base, int n, const char *type=0 );

// Port ( );
~Port ( );

/* Port ( const Port & rhs ) */
@@ -51,7 +54,10 @@ public:
}
const char * name ( void ) const { return _name; }
bool name ( const char *name );
bool name ( const char *base, int n, const char *type=0 );


void activate ( const char *name, type_e dir );
void shutdown ( void );
void write ( sample_t *buf, nframes_t nframes );
void read ( sample_t *buf, nframes_t nframes );


+ 17
- 17
Timeline/Track.C View File

@@ -357,6 +357,10 @@ Track::add ( Control_Sequence *t )

control->add( t );

control_out.push_back( Port( Port::Output, name(), control_out.size(), "cv" ) );

t->output( &control_out.back() );

resize();
}

@@ -498,27 +502,23 @@ Track::handle ( int m )
/* Engine */
/**********/

const char *
Track::name_for_port ( Port::type_e type, int n )
{
static char pname[256];

snprintf( pname, sizeof( pname ), "%s/%s-%d",
name(),
type == Port::Output ? "out" : "in",
n + 1 );

return pname;
}

void
Track::update_port_names ( void )
{
for ( int i = 0; i < output.size(); ++i )
output[ i ].name( name_for_port( output[ i ].type(), i ) );
output[ i ].name( name(), i );

for ( int i = 0; i < input.size(); ++i )
input[ i ].name( name_for_port( input[ i ].type(), i ) );
input[ i ].name( name(), i );

for ( int i = 0; i < control_out.size(); ++i )
control_out[ i ].name( name(), i, "cv" );


/* /\* tell any attached control sequences to do the same *\/ */
/* for ( int i = control->children(); i-- ) */
/* ((Control_Sequence*)control->child( i ))->update_port_names(); */

}

bool
@@ -541,7 +541,7 @@ Track::configure_outputs ( int n )
{
for ( int i = on; i < n; ++i )
{
Port p( strdup( name_for_port( Port::Output, i ) ), Port::Output );
Port p( Port::Output, name(), i );

if ( p.valid() )
output.push_back( p );
@@ -586,7 +586,7 @@ Track::configure_inputs ( int n )
{
for ( int i = on; i < n; ++i )
{
Port p( strdup( name_for_port( Port::Input, i ) ), Port::Input );
Port p( Port::Input, name(), i );

if ( p.valid() )
input.push_back( p );


+ 2
- 0
Timeline/Track.H View File

@@ -109,6 +109,8 @@ public:

vector<Port> input; /* input ports... */
vector<Port> output; /* output ports... */
vector<Port> control_out; /* control ports... */


Playback_DS *playback_ds;
Record_DS *record_ds;


Loading…
Cancel
Save