Audio-Nama
view release on metacpan or search on metacpan
lib/Audio/Nama/Project.pm view on Meta::CPAN
$ui->create_master_and_mix_tracks();
}
sub dig_ruins {
logsub((caller(0))[3]);
return if user_tracks_present();
logpkg(__FILE__,__LINE__,'debug', "looking for audio files");
my $d = this_wav_dir();
opendir my $wav, $d or carp "couldn't open directory $d: $!";
# remove version numbers
my @wavs = grep{s/(_\d+)?\.wav$//i} readdir $wav;
closedir $wav if $wav;
my %wavs;
map{ $wavs{$_}++ } @wavs;
@wavs = keys %wavs;
logpkg(__FILE__,__LINE__,'debug', "tracks found: @wavs");
map{add_track($_)}@wavs;
}
sub remove_riff_header_stubs {
# 44 byte stubs left by a recording chainsetup that is
# connected by not started
logsub((caller(0))[3]);
logpkg(__FILE__,__LINE__,'debug', "this wav dir: ", this_wav_dir());
return unless this_wav_dir();
my @wavs = File::Find::Rule ->name( qr/\.wav$/i )
->file()
->size(44)
->extras( { follow => 1} )
->in( this_wav_dir() )
if -d this_wav_dir();
logpkg(__FILE__,__LINE__,'debug', join $/, @wavs);
map { unlink $_ } @wavs;
}
sub create_system_buses {
logsub((caller(0))[3]);
my $buses = q(
Main Audio::Nama::SubBus send_type track send_id Main # master fader track
Mixdown Audio::Nama::Bus # mixdown track
Mastering Audio::Nama::Bus # mastering network
Insert Audio::Nama::Bus # auxiliary tracks for inserts
Cooked Audio::Nama::Bus # for track caching
Temp Audio::Nama::Bus # temp tracks while generating setup
Null Audio::Nama::Bus # unrouted for Main
Midi Audio::Nama::MidiBus send_type null send_id null # all MIDI tracks
Aux Audio::Nama::SubBus send_type null # routed only from track source_* and send_* fields
);
($buses) = strip_comments($buses); # need initial parentheses
$buses =~ s/\A\s+//; # remove initial newline and whitespace
$buses =~ s/\s+\z//; # remove terminating newline and whitespace
my @buses = split "\n", $buses;
for my $bus (@buses)
{
my ($name, $class, @args) = split " ",$bus;
$class->new(name => $name, @args);
}
}
## project templates
sub new_project_template {
my ($template_name, $template_description) = @_;
my @tracks = all_tracks();
# skip if project is empty
throw("No user tracks found, aborting.\n",
"Cannot create template from an empty project."),
return if ! user_tracks_present();
# save current project status to temp state file
my $previous_state = '_previous_state.json';
save_state($previous_state);
# edit current project into a template
# No tracks are recorded, so we'll remove
# - version (still called 'active')
# - track caching
# - region start/end points
# Also
# - unmute all tracks
# - throw away any pan caching
map{ my $track = $_;
$track->unmute;
map{ $track->set($_ => undef) }
qw( version
old_pan_level
region_start
region_end
);
} @tracks;
# Buses needn't set version info either
map{$_->set(version => undef)} values %bn;
( run in 0.626 second using v1.01-cache-2.11-cpan-39bf76dae61 )