Audio-Nama
view release on metacpan or search on metacpan
lib/Audio/Nama.pm view on Meta::CPAN
####### Nama Roles - loaded by another class
# use Audio::Nama::Wav;
####### Nama subroutines ######
#
# The following modules serve only to define and segregate subroutines.
# They occupy the root namespace (except Audio::Nama::ChainSetup)
# and do not execute any code when use'd.
use Audio::Nama::AnalyseLV2;
use Audio::Nama::Initializations ();
use Audio::Nama::Options ();
use Audio::Nama::Config ();
use Audio::Nama::Custom ();
use Audio::Nama::Terminal ();
use Audio::Nama::Grammar ();
use Audio::Nama::Help ();
use Audio::Nama::Project ();
use Audio::Nama::Persistence ();
use Audio::Nama::Git;
use Audio::Nama::ChainSetup (); # separate namespace
use Audio::Nama::Graph ();
use Audio::Nama::Modes ();
use Audio::Nama::Mix ();
use Audio::Nama::Memoize ();
use Audio::Nama::StatusSnapshot ();
use Audio::Nama::EngineSetup ();
use Audio::Nama::EffectsRegistry ();
use Audio::Nama::Effect q(:all);
use Audio::Nama::MuteSoloFade ();
use Audio::Nama::Jack ();
use Audio::Nama::Regions ();
use Audio::Nama::CacheTrack ();
use Audio::Nama::Bunch ();
use Audio::Nama::Wavinfo ();
use Audio::Nama::Midi ();
use Audio::Nama::Latency ();
use Audio::Nama::Log qw(logit logpkg logsub initialize_logger);
use Audio::Nama::TrackUtils ();
use Audio::Nama::Tempo ();
sub main {
say eval join(get_data_section('banner'), qw(" "));
bootstrap_environment() ;
load_project(name => shift @ARGV,
create => delete $config->{opts}->{c});
# remove option for next project load
nama_cmd($config->{execute_on_project_load});
nama_cmd($config->{opts}->{X});
reconfigure_engine();
if (not $ti{3}){ # no user tracks
say "Enter command to begin or type 'h' for help.";
$this_track = $tn{Main};
}
show_prompt();
$ui->loop();
}
sub bootstrap_environment {
definitions();
process_command_line_options();
start_logging();
setup_grammar();
initialize_interfaces();
redirect_stdout() unless $config->{opts}->{T};
}
sub kill_and_reap {
my @pids = @_;
map{ my $pid = $_;
map{ my $signal = $_;
kill $signal, $pid;
sleeper(0.2);
} (15,9);
waitpid $pid, 1;
} @pids;
}
sub cleanup_exit {
logsub((caller(0))[3]);
remove_riff_header_stubs();
trigger_rec_cleanup_hooks();
# for each process:
# - SIGINT (1st time)
# - allow time to close down
# - SIGINT (2nd time)
# - allow time to close down
# - SIGKILL
#project_snapshot();
Audio::Nama::Engine::sync_action('kill_and_reap');
$text->{term}->teardown;
restore_stdout();
say;
exit;
}
END { }
1;
__DATA__
@@ commands_yml
---
help:
type: help
what: Display help on Nama commands.
short: h
parameters: [ <integer:help_topic_index> | <string:help_topic_name> | <string:command_name> ]
example: |
help marks # display the help category marks and all commands containing marks
help 6 # display help on the effects category
help mfx # display help on modify-effect - shortcut mfx
help_effect:
type: help
what: Display detailed help on LADSPA or LV2 effects.
short: hfx he
parameters: <string:label> | <integer:unique_id>
example: |
lib/Audio/Nama.pm view on Meta::CPAN
short: nep
parameters: <string:bunch_name> [ <string:effect_profile_name> ]
example: |
add-bunch Drums snare toms kick # Create a buch called Drums.
nep Drums my_drum_effects # Create an effect profile, call my_drum_effects
# containing all effects from snare toms and kick.
apply_effect_profile:
type: effect
what: Apply an effect profile. this will add all the effects in it to the list of tracks stored in the effect profile. Note: You must give the tracks the same names as in the original project, where you created the effect profile.
short: aep
parameters: <string:effect_profile_name>
destroy_effect_profile:
type: effect
what: Delete an effect profile. This will delete the effect profile definition from your disk. All projects, which use this effect profile will NOT be affected.
parameters: <string:effect_profile_name>
list_effect_profiles:
type: effect
what: List all effect profiles.
short: lep
parameters: none
show_effect_profiles:
type: effect
what: List effect profile.
short: sepr
parameters: none
full_effect_profiles:
type: effect
what: Dump effect profile data structure.
short: fep
parameters: none
cache_track:
type: track
what: |
Cache the current track. Same as freezing or bouncing. This
is useful for larger projects or low-power CPUs, since
effects do not have to be recomputed for subsequent engine
runs.
Cache_track stores the effects-processed output of the
current track as a new version (WAV file) which becomes the
current version. The current effects, inserts and region
definition are removed and stored.
To go back to the original track state, use the
uncache-track command. The show-track display appends a "c"
to version numbers created by cache-track (and therefore
reversible by uncache)
short: cache ct bounce freeze
parameters: [ <float:additional_processing_time> ]
example: |
cache 10 # Cache the curent track and append 10 seconds extra time,
# to allow a reverb or delay to fade away without being cut.
uncache_track:
type: effect
what: Select the uncached track version. This restores effects, but not inserts.
short: uncache unc
parameters: none
do_script:
type: general
what: Execute Nama commands from a file in the main project's directory or in the Nama project root directory. A script is a list of Nama commands, just as you would type them on the Nama prompt.
short: do
parameters: <string:filename>
example: |
do prepare_my_drums # Execute the script prepare_my_drums.
scan:
type: general
what: Re-read the project's .wav directory. Mainly useful for troubleshooting.
parameters: none
add_fade:
type: effect
what: Add a fade-in or fade-out to the current track.
short: afd fade
parameters: ( in | out ) marks/times (see examples)
example: |
fade in mark1 # Fade in,starting at mark1 and using the
! # default fade time of 0.5 seconds.
fade out mark2 2 # Fade out over 2 seconds, starting at mark2 .
fade out 2 mark2 # Fade out over 2 seconds, ending at mark2 .
fade in mark1 mark2 # Fade in starting at mark1, ending at mark2 .
remove_fade:
type: effect
what: Remove a fade from the current track.
short: rfd
parameters: <integer:fade_index_1> [ <integer:fade_index_2> ] ...
example: |
list-fade # Print a list of all fades and their tracks.
rfd 2 # Remove the fade with the index (n) 2.
list_fade:
type: effect
what: List all fades.
short: lfd
parameters: none
add_comment:
type: track
what: Add a comment to the current track (replacing any previous comment). A comment maybe a short discription, notes on instrument settings, etc.
short: comment ac
parameters: <string:comment>
example: ac "Guitar, treble on 50%"
remove_comment:
type: track
what: Remove a comment from the current track.
short: rc
parameters: none
show_comment:
type: track
what: Show the comment for the current track.
short: sc
parameters: none
show_comments:
type: track
what: Show all track comments.
short: sca
parameters: none
add_version_comment:
type: track
what: Add a version comment (replacing any previous user comment). This will add a comment for the current version of the current track.
short: avc
parameters: <string:comment>
example: avc "The good take with the clear 6/8"
remove_version_comment:
lib/Audio/Nama.pm view on Meta::CPAN
realtime_profile: nonrealtime # other choices: realtime or auto
press_space_to_start_transport: 1
# The buffer size settings below apply only when JACK is *not* used
ecasound_buffersize:
realtime:
default: 256
nonrealtime:
default: 1024
ecasound_globals:
common: -z:mixmode,sum
realtime: -z:db,100000 -z:nointbuf
nonrealtime: -z:nodb -z:intbuf
# ecasound_tcp_port: 2868
# effects for use in mastering mode
eq: Parametric1 1 0 0 40 1 0 0 200 1 0 0 600 1 0 0 3300 1 0
low_pass: lowpass_iir 106 2
mid_pass: bandpass_iir 520 800 2
high_pass: highpass_iir 1030 2
compressor: sc4 0 3 16 0 1 3.25 0
spatialiser: matrixSpatialiser 0
limiter: tap_limiter 0 0
alias:
command:
mbs: move_to_bus
pcv: promote_current_version
djp: disable_jack_polling
effect:
reverb: gverb
# end
@@ custom_pl
### customize.pl - user code
# test this by typing:
#
# perl customize.pl
#
# or, if you are running from your build directory, e.g.
#
# perl -I ~/build/nama/lib customize.pl
use v5.36;
use Audio::Nama::Globals qw(:all);
my @user_customization = (
prompt => sub {
no warnings 'uninitialized';
join ' ', 'nama', git_branch_display(), bus_track_display(), '> '
},
## user defined commands
commands =>
{
# usage: greet <name> <adjective>
greet => sub {
my ($name,$adjective) = @_;
pager("Hello $name! You look $adjective today!!");
},
disable_jack_polling => sub{ stop_event('poll_jack')},
promote_current_version => sub {
my $v = $this_track->playback_version;
promote_version_to_track($this_track, $v);
},
},
);
@@ fake_jack_lsp
system:capture_1
alsa_pcm:capture_1
properties: output,can-monitor,physical,terminal,
system:capture_2
alsa_pcm:capture_2
properties: output,can-monitor,physical,terminal,
system:capture_3
alsa_pcm:capture_3
properties: output,can-monitor,physical,terminal,
system:capture_4
alsa_pcm:capture_4
properties: output,can-monitor,physical,terminal,
system:capture_5
alsa_pcm:capture_5
properties: output,can-monitor,physical,terminal,
system:capture_6
alsa_pcm:capture_6
properties: output,can-monitor,physical,terminal,
system:capture_7
alsa_pcm:capture_7
properties: output,can-monitor,physical,terminal,
system:capture_8
alsa_pcm:capture_8
properties: output,can-monitor,physical,terminal,
system:capture_9
alsa_pcm:capture_9
properties: output,can-monitor,physical,terminal,
system:capture_10
alsa_pcm:capture_10
properties: output,can-monitor,physical,terminal,
system:capture_11
alsa_pcm:capture_11
properties: output,can-monitor,physical,terminal,
system:capture_12
alsa_pcm:capture_12
( run in 0.864 second using v1.01-cache-2.11-cpan-0b5f733616e )