Audio-Nama
view release on metacpan or search on metacpan
lib/Audio/Nama/Effect.pm view on Meta::CPAN
logpkg(__FILE__,__LINE__,'debug', "ready to remove from chain $n, operator id $id, index $index");
logpkg(__FILE__,__LINE__,'debug',sub{ecasound_iam("cs")});
$this_engine->current_chain_operator($self->ecasound_effect_index);
logpkg(__FILE__,__LINE__,'debug',sub{"selected operator: ". ecasound_iam("cop-selected")});
$this_engine->ecasound_iam("cop-remove");
$this_engine->reset_ecasound_selections_cache();
logpkg(__FILE__,__LINE__,'debug',sub{ecasound_iam("cs")});
} else { # controller
logpkg(__FILE__,__LINE__,'debug', "has parent, assuming controller");
my $ctrl_index = $self->ecasound_controller_index;
logpkg(__FILE__,__LINE__,'debug', ecasound_iam("cs"));
$this_engine->current_chain_operator($self->root_parent->ecasound_controller_index);
logpkg(__FILE__,__LINE__,'debug', "selected operator: ". ecasound_iam("cop-selected"));
$this_engine->current_controller($ctrl_index);
$this_engine->ecasound_iam("ctrl-remove");
logpkg(__FILE__,__LINE__,'debug', ecasound_iam("cs"));
}
}
# Track sax effects: A B C GG HH II D E F
# GG HH and II are controllers applied to chain operator C
#
# to remove controller HH:
#
# for Ecasound, chain op index = 3,
# ctrl index = 2
# = track_effect_index HH - track_effect_index C
#
#
# for Nama, chain op array index 2,
# ctrl arrray index = chain op array index + ctrl_index
# = effect index - 1 + ctrl_index
#
#
## Nama effects
## have a unique ID from capital letters
## IDs are kept in the $track->ops
## Rules for allocating IDs
## new_effect_id() - issues a new ID
## effect_init() - initializes a Nama effect, should be called effect_init()
## add_effect
sub new_effect_id {
# increment $fx->{id_counter} if necessary
# to find an unused effect_id
while( fxn($fx->{id_counter})){ $fx->{id_counter}++};
$fx->{id_counter}
}
## synchronize Ecasound chain operator parameters
# with Nama effect parameter
sub update_ecasound_effect {
local $config->{category} = 'ECI_FX';
# update the parameters of the Ecasound chain operator
# referred to by a Nama operator_id
#logsub((caller(0))[3]);
return unless $this_engine->valid_setup;
#my $es = ecasound_iam("engine-status");
#logpkg(__FILE__,__LINE__,'debug', "engine is $es");
#return if $es !~ /not started|stopped|running/;
my ($id, $param, $val) = @_;
my $FX = fxn($id) or carp("$id: effect not found. skipping...\n"), return;
$param++; # so the value at $p[0] is applied to parameter 1
my $chain = $FX->chain;
return unless Audio::Nama::ChainSetup::is_ecasound_chain($chain);
logpkg(__FILE__,__LINE__,'debug', "chain $chain id $id param $param value $val");
# $param is zero-based.
# $FX->params is zero-based.
$this_engine->current_chain($chain);
# update Ecasound's copy of the parameter
if( $FX->is_controller ){
my $i = $FX->ecasound_controller_index;
logpkg(__FILE__,__LINE__,'debug', "controller $id: track: $chain, index: $i, param: $param, value: $val");
$this_engine->current_controller($i);
$this_engine->current_controller_parameter($param);
$this_engine->ecasound_iam("ctrlp-set $val");
}
else { # is operator
my $i = $FX->ecasound_effect_index;
logpkg(__FILE__,__LINE__,'debug', "operator $id: track $chain, index: $i, offset: ". $FX->offset . " param $param, value $val");
$this_engine->current_chain_operator($i);
$this_engine->current_chain_operator_parameter($param);
$this_engine->ecasound_iam("copp-set $val");
}
}
# set both Nama effect and Ecasound chain operator
# parameters
sub update_effect {
my ($id, $param, $val) = @_;
return if ! defined fxn($id);
fxn($id)->params->[$param] = $val;
update_ecasound_effect( @_ );
}
sub sync_effect_parameters {
logsub((caller(0))[3]);
local $config->{category} = 'ECI_FX';
( run in 0.781 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )