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 )