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 )