Audio-Nama

 view release on metacpan or  search on metacpan

lib/Audio/Nama/Insert.pm  view on Meta::CPAN

	
	if ( $self->is_local_effects_host )
	{
		$g->add_path($name, $loop, $wet->name, $successor);

	}
	else

	{	
		# wet send path (no extra track): track -> loop -> output

		my @edge = ($loop, output_node($self->{send_type}));
		Audio::Nama::logpkg(__FILE__,__LINE__,'debug', "edge: @edge");
		$g->add_path( $name, @edge);
		$g->set_vertex_attributes($loop, {n => $t->n});
		$g->set_edge_attributes(@edge, { 
			send_id => $self->{send_id},
			width => 2,
		});
		# wet return path: input -> wet_track (slave) -> successor
		
		# we override the input with the insert's return source

		$g->set_vertex_attributes($wet->name, {
					width => 2, # default for cooked
					mono_to_stereo => '', # override
					source_type => $self->{return_type},
					source_id => $self->{return_id},
		});
		$g->add_path(input_node($self->{return_type}), $wet->name, $successor);

	}

	# connect dry track to graph
	
	$g->add_path($loop, $dry->name, $successor);
	}
	
sub remove {
	my $self = shift;
	$Audio::Nama::tn{ $self->wet_name }->remove;
	$Audio::Nama::tn{ $self->dry_name }->remove;
	delete $Audio::Nama::Insert::by_index{$self->n};
}
}
{
package Audio::Nama::PreFaderInsert;
use v5.36; use Carp; our @ISA = qw(Audio::Nama::Insert);
our $VERSION = 1.0;
use Audio::Nama::Util qw(input_node output_node dest_type);
use Audio::Nama::Log qw(logpkg);
use Audio::Nama::Globals qw(:trackrw);


# --- source ---------- wet_send_track  wet_return_track -+-- insert_pre -- track
#                                                         |
# --- source ------------------ dry track ----------------+

sub new {
	my ($class, %args) = @_;
	my $self = $class->SUPER::new(%args);

	my $wet_send = Audio::Nama::SlaveTrack->new( 
				name => $self->wet_send_name,
				target => $self->track,
				group => 'Insert',
				hide => 1,
				rw => REC
	);
	if ($wet_send->width == 1){
		Audio::Nama::add_effect({
			track  => $wet_send, 
			type   => 'chcopy',
			params => [1,2]
		});
	}
	map{ Audio::Nama::remove_effect($_)} $wet_send->vol, $wet_send->pan;
	map{ my $track = $_;  map{ delete $track->{$_} } qw(vol pan) } $wet_send;
	$self
} 
sub wet_send_name {
	my $self = shift;
	join('-', $self->track, $self->n, 'wet-send'); 
}
	
	

sub add_paths {
	my ($self, $g, $name) = @_;
	no warnings qw(uninitialized);
	Audio::Nama::logpkg(__FILE__,__LINE__,'debug', "add_insert for track: $name");

	my $t = $Audio::Nama::tn{$name}; 


	Audio::Nama::logpkg(__FILE__,__LINE__,'debug', "insert structure:", sub{$self->dump});

		# get track source
		
		my ($predecessor) = $g->predecessors($name);

		# delete source connection to track
		
		$g->delete_edge($predecessor, $name);
		my $loop = "$name\_insert_pre";

		my $wet 		= $Audio::Nama::tn{$self->wet_name};
		my $dry 		= $Audio::Nama::tn{$self->dry_name};
		my $wet_send 	= $Audio::Nama::tn{$self->wet_send_name};

		Audio::Nama::logpkg(__FILE__,__LINE__,'debug', "found wet: ", $wet->name, " dry: ",$dry->name);

		#pre:  wet send path: wet_send_name (slave) -> output

		my @edge = ($self->wet_send_name, output_node($self->send_type));
		$g->add_path($predecessor, @edge);
		Audio::Nama::logpkg(__FILE__,__LINE__,'debug', "edge: @edge");
		$g->set_vertex_attributes($self->wet_send_name, { 
			send_id => $self->{send_id},
			send_type => $self->{send_type},
			mono_to_stereo => '', # disable for prefader send path 



( run in 1.417 second using v1.01-cache-2.11-cpan-8dfa8b56332 )