ardour/tools/ARDOUR/AutomationSRConverter.pm

62 lines
999 B
Perl

package ARDOUR::AutomationSRConverter;
sub new {
my ($type, $input, $output, $inputSR, $outputSR) = @_;
my $self = bless {}, $type;
$self->{Input} = $input;
$self->{Output} = $output;
$self->{Ratio} = ($outputSR+0) / ($inputSR+0);
return $self;
}
sub readline {
my ($self) = @_;
my $buf;
my $c='';
do {
$buf.=$c;
$c=$self->{Input}->getc;
} while ($c ne '' && $c ne "\n");
return $buf;
}
sub writeline {
my ($self, $line) = @_;
$self->{Output}->print($line."\n");
}
sub convert {
my ($self) = @_;
my $version=$self->readline;
if ($version ne "version 1") {
die ("Unsupported automation version $version");
}
$self->writeline($version);
my $buf = $self->readline;
while ( $buf ne "" ) {
if ( $buf eq "begin" ||
$buf eq "end") {
$self->writeline($buf);
} else {
my ($type, $position, $value) = split(' ', $buf);
$self->writeline($type." ".sprintf("%.0f",$position*$self->{Ratio})." ".$value);
}
$buf = $self->readline;
}
}
1;