Audio-Nama
view release on metacpan or search on metacpan
lib/Audio/Nama/Initializations.pm view on Meta::CPAN
# ----------- Initializations --------
#
#
# These routines are executed once on program startup
#
#
package Audio::Nama;
use v5.36; use Carp;
use vars '$VERSION';
use Socket qw(getnameinfo NI_NUMERICHOST) ;
use Audio::Nama::Util qw(timer start_event stop_event);
sub is_test_script { $config->{opts}->{J} }
# if we are using fake JACK client data,
# probably a test script is running
sub apply_test_args {
push @ARGV, qw(-f /dev/null), # force to use internal namarc
qw(-t), # set text mode
qw(-d), $Audio::Nama::test_dir,
q(-E), # suppress loading Ecasound
q(-J), # fake jack client data
q(-T), # don't initialize terminal
# load fake effects cache
# q(-c), 'test-project',
#qw(-L SUB); # logging
$jack->{periodsize} = 1024;
}
sub apply_ecasound_test_args {
apply_test_args();
@ARGV = grep { $_ ne q(-E) } @ARGV
}
sub definitions {
STDOUT->autoflush;
@global_effect_chain_vars = qw(
@global_effect_chain_data
$Audio::Nama::EffectChain::n
$fx->{alias}
);
@tracked_vars = qw(
@tracks_data
@bus_data
@groups_data
@marks_data
@fade_data
@edit_data
@inserts_data
@effects_data
$fx->{applied}
$fx->{params}
$fx->{params_log}
);
@persistent_vars = qw(
$project->{nama_version}
$project->{nama_commit}
$project->{timebase}
$project->{command_buffer}
$project->{track_version_comments}
$project->{track_comments}
$project->{bunch}
lib/Audio/Nama/Initializations.pm view on Meta::CPAN
eval {
$project->{remote_control_socket}->send($out);
};
$@ and throw("caught error: $@, resetting..."), reset_remote_control_socket(), revise_prompt(), return;
revise_prompt();
}
sub reset_remote_control_socket {
undef $is_connected_remote;
undef $@;
$project->{remote_control_socket}->shutdown(2);
undef $project->{remote_control_socket};
remove_remote_watcher();
start_remote_listener($config->{remote_control_port});
}
}
sub sanitize_remote_input {
my $input = shift;
my $error_msg;
do{ $input = "" ; $error_msg = "error: perl/shell code is not allowed"}
if $input =~ /(^|;)\s*(!|eval\b)/;
throw($error_msg) if $error_msg;
$input
}
sub initialize_ecasound_engine {
my %args;
my $class;
if ($config->{opts}->{A} or $config->{opts}->{E})
{
pager_newline("Starting dummy engine only");
%args = (
name => $config->{ecasound_engine_name}
);
$class = 'Audio::Nama::Engine';
}
elsif (
$config->{opts}->{l}
and can_load( modules => { 'Audio::Ecasound' => undef })
and say("loaded Audio::Ecasound")
){
%args = (
name => $config->{ecasound_engine_name},
);
$class = 'Audio::Nama::LibEngine';
}
else {
%args = (
name => $config->{ecasound_engine_name},
port => $config->{engine_tcp_port},
);
$class = 'Audio::Nama::NetEngine';
}
$class->new(%args);
}
sub choose_sleep_routine {
if ( can_load(modules => {'Time::HiRes'=> undef} ) )
{ *sleeper = *finesleep;
$config->{hires_timer}++; }
else { *sleeper = *select_sleep }
}
sub finesleep {
my $sec = shift;
Time::HiRes::usleep($sec * 1e6);
}
sub select_sleep {
my $seconds = shift;
select( undef, undef, undef, $seconds );
}
sub munge_category {
my $cat = shift;
# override undefined category by magical global setting
# default to 'ECI_OTHER'
$cat ||= ($config->{category} || 'ECI_OTHER');
# force all categories to 'ECI' if 'ECI' is selected for logging
# (exception: ECI_WAVINFO, which is too noisy)
no warnings 'uninitialized';
return 'ECI' if $config->{want_logging}->{ECI} and not $cat eq 'ECI_WAVINFO';
$cat
}
sub start_logging {
$config->{want_logging} = initialize_logger($config->{opts}->{L})
}
sub ecasound_iam{ $en{$Audio::Nama::config->{ecasound_engine_name}} and $en{$Audio::Nama::config->{ecasound_engine_name}}->ecasound_iam(@_) }
1;
__END__
( run in 1.777 second using v1.01-cache-2.11-cpan-39bf76dae61 )