* [PATCH] add dtas-2splitfx script
@ 2023-07-03 0:43 Eric Wong
0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2023-07-03 0:43 UTC (permalink / raw)
To: dtas-all
This generates a dtas-splitfx-compatible YAML snippet based
on a sorted list of audio tracks:
dtas-2splitfx 1.flac 2.flac ... >tracks.yml
---
GNUmakefile | 2 +-
script/dtas-2splitfx | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+), 1 deletion(-)
create mode 100755 script/dtas-2splitfx
diff --git a/GNUmakefile b/GNUmakefile
index 084a2d8..9019b31 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -82,7 +82,7 @@ bindir = $(prefix)/bin
symlink-install :
mkdir -p $(bindir)
dtas=$(CURDIR)/dtas.sh && cd $(bindir) && \
- for x in $(CURDIR)/bin/*; do \
+ for x in $(CURDIR)/bin/* $(CURDIR)/script/*; do \
ln -sf "$$dtas" $$(basename "$$x"); \
done
diff --git a/script/dtas-2splitfx b/script/dtas-2splitfx
new file mode 100755
index 0000000..afa761d
--- /dev/null
+++ b/script/dtas-2splitfx
@@ -0,0 +1,44 @@
+#!/usr/bin/perl -w
+# Copyright (C) all contributors <dtas-all@nongnu.org>
+# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
+# parse soxi output and generates a dtas-splitfx-compatible YAML snippet
+# usage: dtas-2splitfx 1.flac 2.flac ... >tracks.yml
+use v5.12;
+use POSIX qw(strftime);
+open my $fh, '-|', 'soxi', @ARGV or die $!;
+my $title = '';
+my $off = 0;
+my $sec = 0;
+
+my $flush = sub {
+ my ($start) = @_;
+ my $frac = $start =~ s/\.([0-9]+)\z// ? $1 : 0;
+ $start = strftime('%H:%M:%S', gmtime($start));
+ $start .= ".$frac" if $frac;
+ $start;
+};
+
+while (<$fh>) {
+ if (/^Duration\s*:\s*([0-9:\.]+)/) {
+ my $t = $1;
+ $sec = $t =~ s/\.([0-9]+)\z// ? "0.$1" : 0;
+ my @t = split(/:/, $t); # HH:MM:SS
+ my $mult = 1;
+ while (defined(my $part = pop @t)) {
+ $sec += $part * $mult;
+ $mult *= 60;
+ }
+ } elsif (s/^title=//i) {
+ chomp;
+ $title = $_;
+ $title =~ tr!"!'!;
+ } elsif (/^\s*\z/s && $sec) {
+ my $start = $flush->($off);
+ say qq(- t $start "), , $title, '"';
+ $off += $sec;
+ $sec = 0;
+ $title = '';
+ }
+}
+close $fh or die "soxi failed: \$?=$?";
+say qq(- stop ), $flush->($off);
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2023-07-03 0:43 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-03 0:43 [PATCH] add dtas-2splitfx script Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/dtas.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).