diff options
Diffstat (limited to 'datasets')
| -rwxr-xr-x | datasets/count_subdirs.sh | 1 | ||||
| -rwxr-xr-x | datasets/dataset.pl | 75 | ||||
| -rwxr-xr-x | datasets/generate.sh | 34 | ||||
| -rwxr-xr-x | datasets/get.pl | 9 | ||||
| -rw-r--r-- | datasets/silence.sh | 0 | ||||
| -rwxr-xr-x | datasets/split44k.sh | 24 | ||||
| -rwxr-xr-x | datasets/spread.sh | 33 |
7 files changed, 176 insertions, 0 deletions
diff --git a/datasets/count_subdirs.sh b/datasets/count_subdirs.sh new file mode 100755 index 0000000..3999b3c --- /dev/null +++ b/datasets/count_subdirs.sh @@ -0,0 +1 @@ +find -maxdepth 1 -type d | sort | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done diff --git a/datasets/dataset.pl b/datasets/dataset.pl new file mode 100755 index 0000000..75aa2b1 --- /dev/null +++ b/datasets/dataset.pl @@ -0,0 +1,75 @@ +#!/usr/bin/perl + +use strict; +use Getopt::Std; + +our $opt_c; +getopts('c'); + +my $fmt = <<FMT; +Input File : '01_snapping_clean.wav' +Channels : 1 +Sample Rate : 44100 +Precision : 16-bit +Duration : 00:03:09.35 = 8350438 samples = 14201.4 CDDA sectors +File Size : 16.7M +Bit Rate : 706k +Sample Encoding: 16-bit Signed Integer PCM +FMT + +sub process($) { + my $filename = shift or die "Usage: $0 [...filenames]\n"; + my ($name, $ext) = split(/\./, $filename, 2); + if ($ext !~ /(wav|mp3|aiff?|flac)/) { + print "not a valid file extension: $ext\n"; + return; + } + + if ($ext eq 'mp3') { + system('ffmpeg', '-i', $filename, $name . '.wav'); + $filename = $name . '.wav'; + } + my $soxi = `soxi $filename`; + my @lines = split("\n", $soxi); + + print $soxi; + + my $seconds; + for my $line (@lines) { + if ($line =~ /Duration : (\d\d):(\d\d):(\d\d)\./) { + my $h = $1; + my $m = $2; + my $s = $3; + $seconds = (((($h * 60) + $m) * 60) + $s) + 0; + } + } + + my $scale = sprintf("%.09f", 5e-7 * $seconds); + + print "Seconds: $seconds\n"; + print "Scale factor: $scale\n"; + print "\n"; + + my $a_tmp = "a_" . $filename; + my $b_tmp = "b_" . $filename; + if (!$opt_c) { + print "Normalizing..."; + system("sox", "-v", 0.945, $filename, $a_tmp); + } else { + $a_tmp = $filename; + } + system("./spread.sh", $a_tmp, $b_tmp, 0.999, $scale, 1.001); + system("./split44k.sh", $b_tmp, 8, $name); + if (!$opt_c) { + system("/bin/rm", $a_tmp); + } + system("/bin/rm", $b_tmp); +} + +foreach my $file (@ARGV) {; + if ( -e $file ) { + process($file); + } +} + + diff --git a/datasets/generate.sh b/datasets/generate.sh new file mode 100755 index 0000000..335928c --- /dev/null +++ b/datasets/generate.sh @@ -0,0 +1,34 @@ +function process () { + echo "____________________________________________________" + echo "process $1" + name=$1 + in="${name}.wav" + out="s_${in}" + ./spread.sh $in $out 0.99 0.01 1.01 + ./split44k.sh $out 8 "44k_$name" + rm $out +} +function ease_process () { + echo "____________________________________________________" + echo "ease_process $1" + name=$1 + step=$2 + in="${name}.wav" + sout="o_${in}" + out="s_${in}" + sox -v 0.95 $in $sout + ./spread.sh $sout $out 0.999 $step 1.001 + ./split44k.sh $out 8 "44k_$name" + rm $sout + rm $out +} +#ease_process '' 0.0000 +ease_process 'blblbl' 0.00001515 +ease_process 'faty-scrub1' 0.0000285 +ease_process 'faty-medieval' 0.00003 +ease_process 'faty-crystals' 0.0000111 +ease_process 'faty-vocal1' 0.000013 +ease_process 'faty-vocal2' 0.000028145 +ease_process 'faty-scrub2' 0.00000466 +ease_process 'siren' 0.0000275 + diff --git a/datasets/get.pl b/datasets/get.pl new file mode 100755 index 0000000..14c5a5b --- /dev/null +++ b/datasets/get.pl @@ -0,0 +1,9 @@ +#!/usr/bin/perl + +foreach (@ARGV){ + my $s = $_; + if ($s !~/\..*$/) { $s .= ".wav"; } + system('/usr/bin/wget', 'https://neural:spawn5@asdf.us/neural/' . $s); + system('/usr/bin/perl', 'dataset.pl', $s); +} + diff --git a/datasets/silence.sh b/datasets/silence.sh new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/datasets/silence.sh diff --git a/datasets/split44k.sh b/datasets/split44k.sh new file mode 100755 index 0000000..b679d29 --- /dev/null +++ b/datasets/split44k.sh @@ -0,0 +1,24 @@ +#/bin/sh + +if [ "$#" -ne 3 ]; then + echo "Usage: $0 <filename.wav> <chunk size in seconds> <dataset path>" + exit +fi + +fn=$1 +chunk_size=$2 +dataset_path=$3 + +converted=".temp2.wav" +rm -f $converted +ffmpeg -hide_banner -loglevel error -i $fn -ac 1 -ar 44100 $converted + +mkdir $dataset_path +length=$(ffprobe -i $converted -show_entries format=duration -v quiet -of csv="p=0") +end=$(echo "$length / $chunk_size - 1" | bc) +echo "splitting..." +for i in $(seq 0 $end); do + ffmpeg -hide_banner -loglevel error -ss $(($i * $chunk_size)) -t $chunk_size -i $converted "$dataset_path/$i.wav" +done +echo "done" +rm -f $converted diff --git a/datasets/spread.sh b/datasets/spread.sh new file mode 100755 index 0000000..60c3551 --- /dev/null +++ b/datasets/spread.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +if [ "$#" -ne 5 ]; then + echo "Usage: $0 <in.wav> <out.wav> <rate_min> <rate_step> <rate_max>" + exit +fi + +FN_IN=$1 +FN_OUT=$2 +RATE=$3 +STEP=$4 +MAX=$5 + +ITER=0 + +while true; do + if (( $(echo "$RATE > $MAX" | bc -l) )); then + break + fi + let ITER+=1 + RATE=`echo "$RATE+$STEP" | bc` + if ((ITER % 20 != 0)); then + echo "${ITER}... ${RATE}" + sleep 1 + fi + sox $FN_IN "tmp_$ITER.wav" speed $RATE +done + +echo "made $ITER copies" + +sox tmp_* $FN_OUT +rm tmp_* + |
