Audio-Nama
view release on metacpan or search on metacpan
lib/Audio/Nama/Edit.pm view on Meta::CPAN
$text->{term_attribs}->{point} = 0;
$text->{term_attribs}->{end} = 0;
}
{ my $p;
my @_edit_points;
my @names = qw(dummy play-start rec-start rec-end);
sub initialize_edit_points {
$p = 0;
@_edit_points = ();
}
sub abort_set_edit_points {
Audio::Nama::throw("...Aborting!");
reset_input_line();
ecasound_iam('stop');
initialize_edit_points();
detect_spacebar();
}
sub get_edit_mark {
$p++;
if($p <= 3){ # record mark
my $pos = ecasound_iam('getpos');
push @_edit_points, $pos;
Audio::Nama::pager(" got $names[$p] position ".d1($pos));
reset_input_line();
if( $p == 3){ complete_edit_points() }
else{
#$text->{term}->stuff_char(10);
# &{$text->{term_attribs}->{'callback_read_char'}}();
}
}
}
sub complete_edit_points {
@{$setup->{edit_points}} = @_edit_points; # save to global
ecasound_iam('stop');
Audio::Nama::pager("\nEngine is stopped\n");
detect_spacebar();
print prompt(), " ";
}
}
sub set_edit_points {
$tn{$this_edit->edit_name}->set(rw => OFF) if defined $this_edit;
Audio::Nama::throw("You must use a playback-only mode to setup edit marks. Aborting"),
return 1 if Audio::Nama::ChainSetup::really_recording();
Audio::Nama::throw("You need stop the engine first. Aborting"),
return 1 if $this_engine->started();
Audio::Nama::pager("Ready to set edit points!");
sleeper(0.2);
Audio::Nama::pager(q(Press the "P" key three times to mark positions for:
+ play-start
+ record-start
+ record-end
Press "Q" to quit.
Engine will start in 2 seconds.));
initialize_edit_points();
$project->{events}->{set_edit_points} = timer(2, 0,
sub {
reset_input_line();
detect_keystroke_p();
ecasound_iam('start');
Audio::Nama::pager("\n\nEngine is running\n");
print prompt();
});
}
sub transfer_edit_points {
Audio::Nama::throw("Use 'set_edit_points' command to specify edit region"), return
unless scalar @{$setup->{edit_points}};
my $edit = shift;
Audio::Nama::Mark->new( name => $edit->play_start_name, time => $setup->{edit_points}->[0]);
Audio::Nama::Mark->new( name => $edit->rec_start_name, time => $setup->{edit_points}->[1]);
Audio::Nama::Mark->new( name => $edit->rec_end_name, time => $setup->{edit_points}->[2]);
@{$setup->{edit_points}} = ();
}
sub generate_edit_record_setup { # for current edit
# set edit track to REC
# set global region start offset
# set global region length cutoff
# set regenerate_setup flag
# insert host track fades
# mute edit track
# schedule unmuting at rec-start point - fade-in
# schedule muting at rec-end point - fade-out
}
sub new_edit {
# abort for many different reasons
Audio::Nama::throw("You must use 'set-edit-points' before creating a new edit. Aborting."),
return unless defined $setup->{edit_points};
my $overlap = grep {
my $fail;
my $rst = $_->rec_start_time;
my $ret = $_->rec_end_time;
my $nst = $setup->{edit_points}->[1];
my $net = $setup->{edit_points}->[2];
my $rst1 = d1($rst);
my $ret1 = d1($ret);
my $nst1 = d1($nst);
my $net1 = d1($net);
Audio::Nama::throw("New rec-start time $nst1 conflicts with Edit ",
$_->n, ": $rst1 < $nst1 < $ret1"), $fail++
if $rst < $nst and $nst < $ret;
Audio::Nama::throw("New rec-end time $net1 conflicts with Edit ",
$_->n, ": $rst1 < $net1 < $ret1"), $fail++
if $rst < $net and $net < $ret;
Audio::Nama::throw("New rec interval $nst1 - $net1 conflicts with Edit ",
$_->n, ": $rst1 - $ret1"), $fail++
if $nst < $rst and $ret < $net;
$fail
} grep{ $_->host_track eq $this_track->name}
values %Audio::Nama::Edit::by_name;
Audio::Nama::throw("Aborting."), return if $overlap;
my $name = $this_track->name;
my $editre = qr($name-v\d+-edit\d+);
( run in 0.601 second using v1.01-cache-2.11-cpan-39bf76dae61 )