summaryrefslogtreecommitdiff
path: root/tools/ARDOUR/AutomationSRConverter.pm
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ARDOUR/AutomationSRConverter.pm')
-rw-r--r--tools/ARDOUR/AutomationSRConverter.pm61
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/ARDOUR/AutomationSRConverter.pm b/tools/ARDOUR/AutomationSRConverter.pm
new file mode 100644
index 0000000000..afd8f6c702
--- /dev/null
+++ b/tools/ARDOUR/AutomationSRConverter.pm
@@ -0,0 +1,61 @@
+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;