Add muxsa-rl to renumber labels in Audacity

This commit is contained in:
Sebastian Kiesel 2025-01-04 11:57:46 +01:00
parent 019521275d
commit be3472ac40

94
bin/muxsa-rl Executable file
View File

@ -0,0 +1,94 @@
#!/usr/bin/perl -w
use warnings;
use strict;
# muxsa-rl
#
# part of muxsa, https://git-nks-public.tik.uni-stuttgart.de/edu/muxsa
#
# Audacity (https://www.audacityteam.org/) is an audio recoder/editor.
# This script _r_enumbers _l_abels in Audacity.
# Usage: muxsa-rl labeltext,labeltext,labeltext,...
# where labeltext is
# - an integer, which will be padded with zeros to four digits
# - two integers separated by minus, which will be considered as a range
# - one integer followed by * and text, will set so many labels to text
# - any other text, which will be copied verbatim
#
# Example: muxsa-rl 0,5-7,42,END
# will set the first label in Audacity's label track to "0000",
# followed by "0005", "0006", "0007", "0042", and "END"
#
# NB: this script assumes that muxsa-vr is running in another shell,
# to capture Audacity's scripting replies
#
############################################################################
#
# MIT License
#
# Copyright (c) 2025 Sebastian Kiesel <sebastian.kiesel@tik.uni-stuttgart.de>
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
############################################################################
my @labels;
foreach my $sequence (@ARGV){
foreach my $section ( split(/,/, $sequence) ){
if( $section=~/^([0-9]+)$/ ){
push(@labels, sprintf("%04i",$section));
}
elsif( $section=~/^([0-9]+)-([0-9]+)$/ ){
for( my $i=$1 ; $i<=$2 ; $i++ ){
push(@labels, sprintf("%04i",$i));
}
}
elsif( $section=~/^([0-9]+)\*(.*)$/ ){
for( my $i=0 ; $i<$1 ; $i++ ){
push(@labels, $2);
}
}
else{
push(@labels, $section);
}
}
}
my $audacity_pipe_path = "/tmp/audacity_script_pipe.to." . $<;
print("Trying to open script pipe to Audacity: " . $audacity_pipe_path . "\n");
my $aph;
open( $aph , ">", $audacity_pipe_path)
or die("Cannot open " . $audacity_pipe_path . " for writing: " . $!);
for( my $i = 0 ; $i < scalar @labels ; $i++ ){
my $command = sprintf("SetLabel: Label=%d Selected=0 Text=\"%s\"\n",
$i, $labels[$i] );
print("Will send to Audacity: " . $command );
print($aph $command);
}
close($aph);
print("Sent " . scalar @labels . " SetLabel commands. Goodbye.\n");
# EOF
############################################################################