From 9bc4fc74a0f7db32c3652115ec73ca1ef637c8f2 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Tue, 3 May 2016 13:55:46 +0200 Subject: aufgeräumt, umbenannt, umstrukturiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addtimes | 59 ----------- doit | 281 -------------------------------------------------- doit.save | 264 ----------------------------------------------- soundCutter | 332 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ subtimes | 59 ----------- timetosample | 31 ------ trimpoints | 75 -------------- 7 files changed, 332 insertions(+), 769 deletions(-) delete mode 100755 addtimes delete mode 100755 doit delete mode 100755 doit.save create mode 100755 soundCutter delete mode 100755 subtimes delete mode 100755 timetosample delete mode 100755 trimpoints diff --git a/addtimes b/addtimes deleted file mode 100755 index cc90901..0000000 --- a/addtimes +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -# subtimes t1 t2 -# -> "t1-t2" - -for i in {1..2} -do - inp=$(echo "${@:i:1}" | sed "s/^ *//" | sed "s/ *#.*$//") - p1=$(echo "$inp" | tr ":" " " | awk '{print $1}') - p2=$(echo "$inp" | tr ":" " " | awk '{print $2}') - p3=$(echo "$inp" | tr ":" " " | awk '{print $3}') - for j in {1..2} - do - if [ "$p3" == "" ] - then - p3=$p2 - p2=$p1 - p1="0" - fi - done - p4=$(echo $p3 | tr "." " " | awk '{print $2}') - while [ ${#p4} -lt 6 ] - do - p4=${p4}"0" - done - f[$i]=$(echo $p4 | sed "s/^0*//" | sed "s/^$/0/") - s[$i]=$(echo $p3 | tr "." " " | awk '{print $1}' | sed "s/^0*//" | sed "s/^$/0/") - m[$i]=$(echo $p2 | sed "s/^0*//" | sed "s/^$/0/") - h[$i]=$(echo $p1 | sed "s/^0*//" | sed "s/^$/0/") -done - -fd=$[${f[1]}+${f[2]}] -ut=0 -while [ $fd -ge 1000000 ] -do - ut=$[$ut+1] - fd=$[$fd-1000000] -done -while [ ${#fd} -lt 6 ] -do - fd="0"$fd -done -sd=$[${s[1]}+${s[2]}+$ut] -ut=0 -while [ $sd -ge 60 ] -do - ut=$[$ut+1] - sd=$[$sd-60] -done -md=$[${m[1]}+${m[2]}+$ut] -ut=0 -while [ $md -ge 60 ] -do - ut=$[$ut+1] - md=$[$md-60] -done -hd=$[${h[1]}+${h[2]}+$ut] - -echo $hd":"$md":"$sd"."$fd diff --git a/doit b/doit deleted file mode 100755 index 5822ca7..0000000 --- a/doit +++ /dev/null @@ -1,281 +0,0 @@ -#!/bin/bash - -# doit [ -f ] [ -ng ] input_1 input_2 ... input_n points output - - -eval set -- "$(getopt -o hf1ni:p:o:s: --long help,force,noGain,dummy,input:,points:,output:,sampleRate: -n "$(basename "$0")" -- "$@")" - -force=false -noGain=false -dummy=false - -while true; do - case "$1" in - -h|--help) - echo "$0"' [ -f | --force ] [ -1 | --noGain ] [ -n | --dummy ] { ( -i | --input= ) input$i.flac } ( -o | --output= ) output.flac ( -p | --points= ) points' - echo ' Mischen und Schneiden:' - echo ' -f | --force: output.flac ggf. überschreiben' - echo ' -1 | --noGain: Lautstärke nicht normalisieren' - echo ' -n | --dummy: nur auszuführenden Befehl anzeigen und nichts tun' - echo ' -s | --sampleRate=: alternative Samplerate zum Abspeichern' - echo ' -i | --input=: Quelle' - echo ' -o | --output=: Ziel' - echo ' -p | --points=: Punktedatei' - echo "$0"' [ -h | --help ]' - echo ' Hilfe anzeigen' - exit 0 - ;; - -f|--force) - force=true - ;; - -1|--noGain) - noGain=true - ;; - -n|--dummy) - dummy=true - ;; - -i|--input) - shift - inputs[${#inputs[@]}]="$1" - ;; - -o|--output) - shift - [ -n "${output}" ] && echo 'Ich kann nur eine Output-Datei-Option verstehen.' && exit 1 - output="$1" - ;; - -p|--points) - shift - [ -n "${points}" ] && echo 'Ich kann nur eine Point-Datei-Option verstehen.' && exit 1 - points="$1" - ;; - -s|--sampleRate) - shift - [ -n "${outRate}" ] && echo 'Ich kann nur eine Samplerate-Option verstehen.' && exit 1 - outRate="$1" - ;; - --) - shift - [ $# -gt 0 ] && echo 'Unbekannte Parameter: '"$#" && exit 1 - break - ;; - *) - echo 'Hups, das sollte nicht passieren könne, '"$1"' kenne ich doch nicht ...' - exit -1 - ;; - esac - shift -done - -[ -z "${output}" ] && echo 'Output-Datei fehlt!' && exit 1 -[ -z "${points}" ] && echo 'Points-Datei fehlt!' && exit 1 -[ "${#inputs[@]}" -eq 0 ] && echo 'Input-Datei fehlt!' && exit 1 - -dir="$(dirname $0)" - -[ ! -e "${points}" ] && echo "Die Schnittpunktedatei ${points} existiert nicht!" && exit 1 -for inp in "${inputs[@]}" -do - [ ! -e "${inp}" ] && echo "Die Inputdatei ${inp} existiert nicht!" && exit 1 - [ $(echo "${inp}" | grep -c " ") -gt 0 ] && echo "Bitte keine Leerzeichen im input-Dateinamen!" && exit 1 -done - -[ $(echo "${output}" | grep -c " ") -gt 0 ] && echo "Bitte keine Leerzeichen im output-Dateinamen!" && exit 1 -[ $(echo "${points}" | grep -c " ") -gt 0 ] && echo "Bitte keine Leerzeichen im points-Dateinamen!" && exit 1 - -if [ -e "${output}" ] -then - if ${force} - then - ${dummy} || rm "${output}" - else - echo "Die Ausgabedatei ${output} existiert bereits!" && exit 1 - fi -fi -odn="$(dirname "${output}")" -obn="$(basename "${output}")" -if [ $(ls -1 "${odn}" | grep "$(echo "${obn}" | sed "s/%[0-9]\?n/.*/g")" | wc -l) -gt 0 ] -then - if ${force} - then - ${dummy} || rm ${odn}/$(echo "${obn}" | sed "s/%[0-9]\?n/*/g") - else - echo "Die Ausgabedatei ${output} existiert bereits!" && exit 1 - fi -fi - -samplerate=$(soxi -r "${inputs[0]}") -[ -z ${outRate} ] && outRate=${samplerate} -i=-1 -abstime=0 -while read -r in -do - line="$(echo "${in}" | sed "s/^ *//" | sed "s/ *\(\# .*\)\{0,1\}$//")" - [ "${line}" == "" ] && continue - if [ $i -eq -1 ] - then - firstline="$(echo "${line}" | sed "s/ *\#.*$//")" - remixcmd="$(echo "${in}" | sed "s/^[^\#]*\#//" | sed "s/ *\(\# .*\)\{0,1\}$//")" - i=0 - continue - fi - if [ $(echo "${line}" | grep -c "^\#") -eq 1 ] - then - trackmods[${i}]=" $(echo "${line}" | sed "s/^.*\#//")" - timecorrections[${i}]=0 - while [ $(echo "${trackmods[${i}]}" | grep -c " trimsplice") -eq 1 ] - do - tmp="$(echo "${trackmods[${i}]}" | sed "s/X/x/g" | sed "s/trimsplice/X/g" | sed "s/^[^X]* X *//" | sed "s/ / /g")" - end=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $1}')) - if [ ! "${doverlaps[${i}]}" == "" ] - then - end=$[${end}+${doverlaps[${i}]}] - fi - discard=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $2}')) - excess=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $3}')) - leeway=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $4}')) - trackmods[${i}]="$(echo "${trackmods[${i}]}" | sed "s/ *trimsplice *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]*/ trim 0s ${end}s ${discard}s splice -t ${end}s,${excess}s,${leeway}s/")" -# trackmods[${i}]="$(echo "${trackmods[${i}]}" | sed "s/ *trimsplice *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]*/ trim 0s ${end}s ${discard}s/")" - timecorrections[${i}]=$[${timecorrections[${i}]}+${discard}+2*${excess}] - done - continue - fi - i=$[${i}+1] - tmp=$(${dir}/timetosample ${samplerate} $(echo "${line}" | sed "s/ *\(\#.*$\)\{0,1\}$//")) - times[${i}]=$[${tmp}-${abstime}] - abstime=${tmp} - - newFile[${i}]=true - tmp="$(echo "${line}" | sed "s/^[^\#]*#\?//" | sed "s/\s\./ 0./g")" - while [ -n "${tmp}" ] - do - if [[ "$tmp" = "overlap "* ]] - then - overlaps[${i}]=$[$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | sed "s/^overlap \(\S\+\)\(\s.*\)\?$/\1/"))/2] - doverlaps[${i}]=$[2*${overlaps[${i}]}] - tmp="$(echo "${tmp}" | sed "s/^\S\+\s\+\S\+\s*//")" - continue - fi - if [[ "$tmp" = "noNewFile"* ]] - then - newFile[${i}]=false - tmp="$(echo "${tmp}" | sed "s/^\S\+\s*//")" - continue - fi - echo "'${tmp}' ist unverständlich zwischen zwei Stücken" - exit 1 - done -done < "${points}" - -#for (( i=0; i<=${#times[@]}; i++ )) -#do -# echo "${i} ; ${trackmods[${i}]} ; ${times[${i}]} ; ${overlaps[${i}]} ; ${doverlaps[${i}]} ; ${timecorrections[${i}]}" -#done -#exit 0 - -repcmd="" -abstime=0 -for (( i=1; i<=${#times[@]}; i++ )) -do - abstime=$[${abstime}+${times[${i}]}] - [ "${doverlaps[${i}]}" == "" ] && continue - repcmd="${repcmd} trim 0s $[${abstime}-${doverlaps[${i}]}]s : trim 0s ${doverlaps[${i}]}s repeat :" - abstime=0 -done - -trackmodcmd="" -abstime=0 -for (( i=0; i<=${#times[@]}; i++ )) -do - if [ ${i} -gt 0 ] - then - [ "${timecorrections[$[${i}-1]]}" == "" ] || times[${i}]=$[${times[${i}]}-${timecorrections[$[${i}-1]]}] - fi - [ "${times[$[${i}+1]]}" == "" ] || abstime=$[${abstime}+${times[$[${i}+1]]}] - [ "${doverlaps[${i}]}" == "" ] || abstime=$[${abstime}+${doverlaps[${i}]}] - [ "${trackmods[${i}]}" == "${trackmods[$[${i}+1]]}" ] && continue - if [ ${i} -eq ${#times[@]} ] - then - trackmodcmd="${trackmodcmd}${trackmods[${i}]} " - else - trackmodcmd="${trackmodcmd}trim 0s ${abstime}s${trackmods[${i}]} : " - fi - abstime=0 -done - -splicecmd="" -abstime=0 -for (( i=0; i<=${#times[@]}; i++ )) -do - [ "${times[${i}]}" == "" ] || abstime=$[${abstime}+${times[${i}]}] - [ "${overlaps[${i}]}" == "" ] && continue - splicecmd="${splicecmd} ${abstime}s,${overlaps[${i}]}s,0s" - abstime=$[${abstime}+${doverlaps[${i}]}] -done -[ "${splicecmd}" == "" ] || splicecmd="splice -t${splicecmd}" - -trimcmd="" -for (( i=1; i<=${#times[@]}; i++ )) -do - if [ ${outRate} -eq ${samplerate} ] - then - trimcmd="${trimcmd}trim 0s =${times[${i}]}s : " - else - trimcmd="${trimcmd}trim 0s =$[$[${times[${i}]}*${outRate}+${samplerate}/2]/${samplerate}]s : " - fi - ${newFile[${i}]} && trimcmd="${trimcmd}newfile : " -done - -if [ ! ${outRate} -eq ${samplerate} ] -then - remixcmd="${remixcmd} rate -v ${outRate}" -fi - -if ! ${noGain} -then - firstline="${firstline} gain -b" - remixcmd="${remixcmd} gain -n" -fi - -echo sox -M "${inputs[@]}" -p trim ${firstline} -echo sox -t sox - -p ${repcmd} -echo sox -t sox - -p ${trackmodcmd} -echo sox -t sox - -p ${splicecmd} ${remixcmd} -echo sox -t sox - ${output} ${trimcmd} - -if ! ${dummy} -then - sox -M "${inputs[@]}" -p trim ${firstline}| \ - sox -t sox - -p ${repcmd} | \ - sox -t sox - -p ${trackmodcmd} | \ - sox -t sox - -p ${splicecmd} ${remixcmd} | \ - sox -t sox - ${output} ${trimcmd} -fi - -#if $noGain -#then -# echo sox -M "${@:1:$[$#-2]}" -p trim ${firstline} -# echo sox -t sox - -p ${repcmd} -# echo sox -t sox - -p ${trackmodcmd} -# echo sox -t sox - -p ${splicecmd} ${remixcmd} -# echo sox -t sox - ${output} ${trimcmd} -# -# sox -M "${@:1:$[$#-2]}" -p trim ${firstline}| \ -# sox -t sox - -p ${repcmd} | \ -# sox -t sox - -p ${trackmodcmd} | \ -# sox -t sox - -p ${splicecmd} ${remixcmd} | \ -# sox -t sox - ${output} ${trimcmd} -#else -# echo sox -M "${@:1:$[$#-2]}" -p trim ${firstline} gain -b -# echo sox -t sox - -p ${repcmd} -# echo sox -t sox - -p ${trackmodcmd} -# echo sox -t sox - -p ${splicecmd} ${remixcmd} -# echo sox -t sox - -p gain -n -# echo sox -t sox - ${output} ${trimcmd} -# -# sox -M "${@:1:$[$#-2]}" -p trim ${firstline} gain -b | \ -# sox -t sox - -p ${repcmd} | \ -# sox -t sox - -p ${trackmodcmd} | \ -# sox -t sox - -p ${splicecmd} ${remixcmd} | \ -# sox -t sox - -p gain -n | \ -# sox -t sox - ${output} ${trimcmd} -#fi diff --git a/doit.save b/doit.save deleted file mode 100755 index c6bb1e1..0000000 --- a/doit.save +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/bash - -# doit [ -f ] [ -ng ] input_1 input_2 ... input_n points output - - -eval set -- "$(getopt -o hf1ni:p:o: --long help,force,noGain,dummy,input:,points:,output: -n "$(basename "$0")" -- "$@")" - -force=false -noGain=false -dummy=false - -while true; do - case "$1" in - -h|--help) - echo "$0"' [ -f | --force ] [ -1 | --noGain ] [ -n | --dummy ] { ( -i | --input= ) input$i.flac } ( -o | --output= ) output.flac ( -p | --points= ) points' - echo ' Mischen und Schneiden:' - echo ' -f | --force: output.flac ggf. überschreiben' - echo ' -1 | --noGain: Lautstärke nicht normalisieren' - echo ' -n | --dummy: nur auszuführenden Befehl anzeigen und nichts tun' - echo ' -i | --input=: Quelle' - echo ' -o | --output=: Ziel' - echo ' -p | --points=: Punktedatei' - echo "$0"' [ -h | --help ]' - echo ' Hilfe anzeigen' - exit 0 - ;; - -f|--force) - force=true - ;; - -1|--noGain) - noGain=true - ;; - -n|--dummy) - dummy=true - ;; - -i|--input) - shift - inputs[${#inputs[@]}]="$1" - ;; - -o|--output) - shift - [ -n "$output" ] && echo 'Ich kann nur eine Output-Datei-Option verstehen.' && exit 1 - output="$1" - ;; - -p|--points) - shift - [ -n "$points" ] && echo 'Ich kann nur eine Point-Datei-Option verstehen.' && exit 1 - points="$1" - ;; - --) - shift - [ $# -gt 0 ] && echo 'Unbekannte Parameter: '"$#" && exit 1 - break - ;; - *) - echo 'Hups, das sollte nicht passieren könne, '"$1"' kenne ich doch nicht ...' - exit -1 - ;; - esac - shift -done - -[ -z "${output}" ] && echo 'Output-Datei fehlt!' && exit 1 -[ -z "${points}" ] && echo 'Points-Datei fehlt!' && exit 1 -[ "${#inputs[@]}" -eq 0 ] && echo 'Input-Datei fehlt!' && exit 1 - -dir="$(dirname $0)" - -[ ! -e "${points}" ] && echo "Die Schnittpunktedatei ${points} existiert nicht!" && exit 1 -for inp in "${inputs[@]}" -do - [ ! -e "${inp}" ] && echo "Die Inputdatei ${inp} existiert nicht!" && exit 1 - [ $(echo "${inp}" | grep -c " ") -gt 0 ] && echo "Bitte keine Leerzeichen im input-Dateinamen!" && exit 1 -done - -[ $(echo "${output}" | grep -c " ") -gt 0 ] && echo "Bitte keine Leerzeichen im output-Dateinamen!" && exit 1 -[ $(echo "${points}" | grep -c " ") -gt 0 ] && echo "Bitte keine Leerzeichen im points-Dateinamen!" && exit 1 - -if [ -e "${output}" ] -then - if ${force} - then - ${dummy} || rm "${output}" - else - echo "Die Ausgabedatei ${output} existiert bereits!" && exit 1 - fi -fi -odn="$(dirname "${output}")" -obn="$(basename "${output}")" -if [ $(ls -1 "${odn}" | grep "$(echo "${obn}" | sed "s/%[0-9]\?n/.*/g")" | wc -l) -gt 0 ] -then - if ${force} - then - ${dummy} || rm ${odn}/$(echo "${obn}" | sed "s/%[0-9]\?n/*/g") - else - echo "Die Ausgabedatei ${output} existiert bereits!" && exit 1 - fi -fi - -samplerate=$(soxi -r "${inputs[0]}") -i=-1 -abstime=0 -while read -r in -do - line="$(echo "${in}" | sed "s/^ *//" | sed "s/ *\(\# .*\)\{0,1\}$//")" - [ "${line}" == "" ] && continue - if [ $i -eq -1 ] - then - firstline="$(echo "${line}" | sed "s/ *\#.*$//")" - remixcmd="$(echo "${in}" | sed "s/^[^\#]*\#//" | sed "s/ *\(\# .*\)\{0,1\}$//")" - i=0 - continue - fi - if [ $(echo "${line}" | grep -c "^\#") -eq 1 ] - then - trackmods[${i}]=" $(echo "${line}" | sed "s/^.*\#//")" - timecorrections[${i}]=0 - while [ $(echo "${trackmods[${i}]}" | grep -c " trimsplice") -eq 1 ] - do - tmp="$(echo "${trackmods[${i}]}" | sed "s/X/x/g" | sed "s/trimsplice/X/g" | sed "s/^[^X]* X *//" | sed "s/ / /g")" - end=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $1}')) - if [ ! "${doverlaps[${i}]}" == "" ] - then - end=$[${end}+${doverlaps[${i}]}] - fi - discard=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $2}')) - excess=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $3}')) - leeway=$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | awk '{print $4}')) - trackmods[${i}]="$(echo "${trackmods[${i}]}" | sed "s/ *trimsplice *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]*/ trim 0s ${end}s ${discard}s splice -t ${end}s,${excess}s,${leeway}s/")" -# trackmods[${i}]="$(echo "${trackmods[${i}]}" | sed "s/ *trimsplice *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]*/ trim 0s ${end}s ${discard}s/")" - timecorrections[${i}]=$[${timecorrections[${i}]}+${discard}+2*${excess}] - done - continue - fi - i=$[${i}+1] - tmp=$(${dir}/timetosample ${samplerate} $(echo "${line}" | sed "s/ *\(\#.*$\)\{0,1\}$//")) - times[${i}]=$[${tmp}-${abstime}] - abstime=${tmp} - - newFile[${i}]=true - tmp="$(echo "${line}" | sed "s/^[^\#]*#\?//" | sed "s/\s\./ 0./g")" - while [ -n "${tmp}" ] - do - if [[ "$tmp" = "overlap "* ]] - then - overlaps[${i}]=$[$(${dir}/timetosample ${samplerate} $(echo "${tmp}" | sed "s/^overlap \(\S\+\)\(\s.*\)\?$/\1/"))/2] - doverlaps[${i}]=$[2*${overlaps[${i}]}] - tmp="$(echo "${tmp}" | sed "s/^\S\+\s\+\S\+\s*//")" - continue - fi - if [[ "$tmp" = "noNewFile"* ]] - then - newFile[${i}]=false - tmp="$(echo "${tmp}" | sed "s/^\S\+\s*//")" - continue - fi - echo "'${tmp}' ist unverständlich zwischen zwei Stücken" - exit 1 - done -done < "${points}" - -#for (( i=0; i<=${#times[@]}; i++ )) -#do -# echo "${i} ; ${trackmods[${i}]} ; ${times[${i}]} ; ${overlaps[${i}]} ; ${doverlaps[${i}]} ; ${timecorrections[${i}]}" -#done -#exit 0 - -repcmd="" -abstime=0 -for (( i=1; i<=${#times[@]}; i++ )) -do - abstime=$[${abstime}+${times[${i}]}] - [ "${doverlaps[${i}]}" == "" ] && continue - repcmd="${repcmd} trim 0s $[${abstime}-${doverlaps[${i}]}]s : trim 0s ${doverlaps[${i}]}s repeat :" - abstime=0 -done - -trackmodcmd="" -abstime=0 -for (( i=0; i<=${#times[@]}; i++ )) -do - if [ ${i} -gt 0 ] - then - [ "${timecorrections[$[${i}-1]]}" == "" ] || times[${i}]=$[${times[${i}]}-${timecorrections[$[${i}-1]]}] - fi - [ "${times[$[${i}+1]]}" == "" ] || abstime=$[${abstime}+${times[$[${i}+1]]}] - [ "${doverlaps[${i}]}" == "" ] || abstime=$[${abstime}+${doverlaps[${i}]}] - [ "${trackmods[${i}]}" == "${trackmods[$[${i}+1]]}" ] && continue - if [ ${i} -eq ${#times[@]} ] - then - trackmodcmd="${trackmodcmd}${trackmods[${i}]} " - else - trackmodcmd="${trackmodcmd}trim 0s ${abstime}s${trackmods[${i}]} : " - fi - abstime=0 -done - -splicecmd="" -abstime=0 -for (( i=0; i<=${#times[@]}; i++ )) -do - [ "${times[${i}]}" == "" ] || abstime=$[${abstime}+${times[${i}]}] - [ "${overlaps[${i}]}" == "" ] && continue - splicecmd="${splicecmd} ${abstime}s,${overlaps[${i}]}s,0s" - abstime=$[${abstime}+${doverlaps[${i}]}] -done -[ "${splicecmd}" == "" ] || splicecmd="splice -t${splicecmd}" - -trimcmd="" -for (( i=1; i<=${#times[@]}; i++ )) -do - trimcmd="${trimcmd}trim 0s =${times[${i}]}s : " - ${newFile[${i}]} && trimcmd="${trimcmd}newfile : " -done - -if ! ${noGain} -then - firstline="${firstline} gain -b" - remixcmd="${remixcmd} gain -n" -fi - -echo sox -M "${inputs[@]}" -p trim ${firstline} -echo sox -t sox - -p ${repcmd} -echo sox -t sox - -p ${trackmodcmd} -echo sox -t sox - -p ${splicecmd} ${remixcmd} -echo sox -t sox - ${output} ${trimcmd} - -if ! ${dummy} -then - sox -M "${inputs[@]}" -p trim ${firstline}| \ - sox -t sox - -p ${repcmd} | \ - sox -t sox - -p ${trackmodcmd} | \ - sox -t sox - -p ${splicecmd} ${remixcmd} | \ - sox -t sox - ${output} ${trimcmd} -fi - -#if $noGain -#then -# echo sox -M "${@:1:$[$#-2]}" -p trim ${firstline} -# echo sox -t sox - -p ${repcmd} -# echo sox -t sox - -p ${trackmodcmd} -# echo sox -t sox - -p ${splicecmd} ${remixcmd} -# echo sox -t sox - ${output} ${trimcmd} -# -# sox -M "${@:1:$[$#-2]}" -p trim ${firstline}| \ -# sox -t sox - -p ${repcmd} | \ -# sox -t sox - -p ${trackmodcmd} | \ -# sox -t sox - -p ${splicecmd} ${remixcmd} | \ -# sox -t sox - ${output} ${trimcmd} -#else -# echo sox -M "${@:1:$[$#-2]}" -p trim ${firstline} gain -b -# echo sox -t sox - -p ${repcmd} -# echo sox -t sox - -p ${trackmodcmd} -# echo sox -t sox - -p ${splicecmd} ${remixcmd} -# echo sox -t sox - -p gain -n -# echo sox -t sox - ${output} ${trimcmd} -# -# sox -M "${@:1:$[$#-2]}" -p trim ${firstline} gain -b | \ -# sox -t sox - -p ${repcmd} | \ -# sox -t sox - -p ${trackmodcmd} | \ -# sox -t sox - -p ${splicecmd} ${remixcmd} | \ -# sox -t sox - -p gain -n | \ -# sox -t sox - ${output} ${trimcmd} -#fi diff --git a/soundCutter b/soundCutter new file mode 100755 index 0000000..52a5f85 --- /dev/null +++ b/soundCutter @@ -0,0 +1,332 @@ +#!/bin/bash + +set -e + +verwendung() { + >&2 echo '' + >&2 echo 'Verwendung:' + >&2 echo '' + >&2 echo "${me}"' [ -f | --force ] [ -a | --ausfuehrlich ] [ -1 | --noGain ] [ -n | --dummy ] { ( -i | --input ) input$i.flac } ( -o | --output ) output.flac ( -p | --points ) points' + >&2 echo '' + >&2 echo ' Mischen und Schneiden:' + >&2 echo ' -f | --force: output.flac ggf. überschreiben' + >&2 echo ' -1 | --noGain: Lautstärke nicht normalisieren' + >&2 echo ' -n | --dummy: nur auszuführenden Befehl anzeigen und nichts tun' + >&2 echo ' -s | --sampleRate: alternative Samplerate zum Abspeichern' + >&2 echo ' -i | --input: Quelle' + >&2 echo ' -o | --output: Ziel' + >&2 echo ' -p | --points: Punktedatei' + >&2 echo ' -a | --ausfuehrlich: ausführliche Zwischenausgaben machen' + >&2 echo '' + >&2 echo "$0"' [ -h | --help ]' + >&2 echo ' Hilfe anzeigen' + >&2 echo '' + [ -z "$1" ] && exit 1 || exit $1 +} + +timetosample() { + local zeit + case "$2" in + *:*:*) + zeit="$2" + ;; + *:*) + zeit="0:$2" + ;; + *) + zeit="0:0:0$2" + ;; + esac + bc <<< "( 0.5 + $1 * $(date "+%s.%N" -ud "1970-01-01 ${zeit}") ) / 1" +} + +me="$(readlink -f "$0")" + +eval set -- "$( + getopt -o 1ahfi:no:p:s: \ + --long noGain \ + --long ausfuehrlich \ + --long help \ + --long force \ + --long input: \ + --long dummy \ + --long output: \ + --long points: \ + --long sampleRate: \ + -n "$(basename "$0")" -- "$@" || \ + echo verwendung +)" + +noGain=false +ausfuehrlich=false +force=false +dummy=false + +while true; do + case "$1" in + -1|--noGain) + noGain=true + ;; + -a|--ausfuehrlich) + ausfuehrlich=true + ;; + -f|--force) + force=true + ;; + -h|--help) + verwendung 0 + ;; + -i|--input) + shift + inputs[${#inputs[@]}]="$1" + ;; + -n|--dummy) + dummy=true + ;; + -o|--output) + shift + [ -n "${output}" ] && echo 'Ich kann nur eine Output-Datei-Option verstehen.' && exit 1 + output="$1" + ;; + -p|--points) + shift + [ -n "${points}" ] && echo 'Ich kann nur eine Point-Datei-Option verstehen.' && exit 1 + points="$1" + ;; + -s|--sampleRate) + shift + [ -n "${outRate}" ] && echo 'Ich kann nur eine Samplerate-Option verstehen.' && exit 1 + outRate="$1" + ;; + --) + shift + [ $# -gt 0 ] && echo 'Unbekannte Parameter: '"$#" && exit 1 + break + ;; + *) + >&2 echo 'Hups, das sollte nicht passieren könne, '"$1"' kenne ich doch nicht ...' + exit -1 + ;; + esac + shift +done + +[ -z "${output}" ] && >&2 echo 'Output-Datei fehlt!' && verwendung +[ -z "${points}" ] && >&2 echo 'Points-Datei fehlt!' && verwendung +[ "${#inputs[@]}" -eq 0 ] && >&2 echo 'Input-Datei fehlt!' && verwendung + +[ ! -e "${points}" ] && >&2 echo "Die Schnittpunktedatei '${points}' existiert nicht!" && exit 1 +for inp in "${inputs[@]}" +do + [ ! -e "${inp}" ] && >&2 echo "Die Inputdatei '${inp}' existiert nicht!" && verwendung + [ $(echo "${inp}" | grep -c "\s") -gt 0 ] && >&2 echo "Bitte keine Leerzeichen im input-Dateinamen!" && exit 1 +done + +[ $(echo "${output}" | grep -c "\s") -gt 0 ] && >&2 echo "Bitte keine Leerzeichen im output-Dateinamen!" && exit 1 +[ $(echo "${points}" | grep -c "\s") -gt 0 ] && >&2 echo "Bitte keine Leerzeichen im points-Dateinamen!" && exit 1 + +if [ -e "${output}" ] +then + if ${force} + then + ${dummy} || rm "${output}" + else + >&2 echo "Die Ausgabedatei '${output}' existiert bereits!" && exit 1 + fi +fi +odn="$(dirname "$(readlink -f "${output}")")" +obn="$(basename "${output}")" +if [ $(ls -1 "${odn}" | grep "$(echo "${obn}" | sed "s/%[0-9]\?n/.*/g")" | wc -l) -gt 0 ] +then + if ${force} + then + ${dummy} || rm ${odn}/$(echo "${obn}" | sed "s/%[0-9]\?n/*/g") + else + >&2 echo "Die Ausgabedatei '${output}' existiert bereits!" && exit 1 + fi +fi + +inRate="$(soxi -r "${inputs[0]}")" +[ -z "${outRate}" ] && outRate="${inRate}" + +i=-1 +absInTime=0 +absOutTime=0 +while read -r in +do + line="$( + echo "${in}" | \ + sed 's|\s\+| |g' | \ + sed 's/^ *//' | \ + sed 's/ *\(\#\( .*\)\?\)\?$//' + )" + [ -z "${line}" ] && continue + teilEins="$(echo "${line}" | sed 's| *\(#.*\)\?$||')" + teilZwei="$(echo "${line}" | sed 's|^[^#]*\(# *\)\?||')" + + if [ ${i} -eq -1 ] + then + firstline="${teilEins}" + remixcmd="${teilZwei}" + if echo "${remixcmd}" | \ + grep -q "rate " + then + >&2 echo 'FEHLER: "rate" explizit gesetzt, das bringt die Zeitmessung durcheinander - verwende statt dessen die Option "-s" bzw. "--sampleRate".' + verwendung + fi + i=0 + continue + fi + if [ -z "${teilEins}" ] + then + if [ -n "${trackmods[${i}]}" ] + then + echo "Syntaxfehler in Track $[${i}+1]: habe bereits Modifikatoren gelesen ('${trackmods[${i}]}' -> '${teilZwei}')" + exit 1 + fi + trackmods[${i}]=" ${teilZwei}" + inTimecorrections[${i}]=0 + outTimecorrections[${i}]=0 + while echo "${trackmods[${i}]}" | grep -q " trimsplice" + do + rest="${trackmods[${i}]#* trimsplice}" + + end=$(timetosample ${inRate} $(echo "${rest}" | awk '{print $1}')) + if [ ! "${doverlaps[${i}]}" == "" ] + then + end=$[${end}+${doverlaps[${i}]}] + fi + inDiscard=$(timetosample ${inRate} $(echo "${rest}" | awk '{print $2}')) + outDiscard=$(timetosample ${outRate} $(echo "${rest}" | awk '{print $2}')) + inExcess=$(timetosample ${inRate} $(echo "${rest}" | awk '{print $3}')) + outExcess=$(timetosample ${outRate} $(echo "${rest}" | awk '{print $3}')) + leeway=$(timetosample ${inRate} $(echo "${rest}" | awk '{print $4}')) + + trackmods[${i}]="$( + echo "${trackmods[${i}]}" | \ + sed "s/ \+trimsplice\( \+[^ ]\+\)\{4\}/ trim 0s ${end}s ${inDiscard}s splice -t ${end}s,${inExcess}s,${leeway}s/" + )" + inTimecorrections[${i}]=$[${inTimecorrections[${i}]}+${inDiscard}+2*${inExcess}] + outTimecorrections[${i}]=$[${outTimecorrections[${i}]}+${outDiscard}+2*${outExcess}] + done + continue + fi + + i=$[${i}+1] + + tmp=$(timetosample ${inRate} "${teilEins}") + inTimes[${i}]=$[${tmp}-${absInTime}] + absInTime=${tmp} + tmp=$(timetosample ${outRate} "${teilEins}") + outTimes[${i}]=$[${tmp}-${absOutTime}] + absOutTime=${tmp} + + newFile[${i}]=true + teilZwei="${teilZwei} " + while [ -n "${teilZwei}" ] + do + case "${teilZwei}" in + "overlap "*) + teilZwei="${teilZwei#* }" + overlaps[${i}]=$[$(timetosample ${inRate} ${teilZwei%% *})/2] + doverlaps[${i}]=$[2*${overlaps[${i}]}] + teilZwei="${teilZwei#* }" + ;; + "noNewFile"*) + teilZwei="${teilZwei#* }" + newFile[${i}]=false + ;; + " ") + break + ;; + *) + >&2 echo "'${teilZwei}' ist unverständlich zwischen zwei Stücken ('${line}')" + exit 1 + ;; + esac + done +done < "${points}" + +if ${ausfuehrlich} +then + echo "trackmods:" + for (( i=0; i<=${#inTimes[@]}; i++ )) + do + echo "${i}: ${trackmods[${i}]} ; ${inTimes[${i}]} ; ${overlaps[${i}]} ; ${doverlaps[${i}]} ; ${inTimecorrections[${i}]}" + done +fi + +repcmd="" +abstime=0 +for (( i=1; i<=${#inTimes[@]}; i++ )) +do + abstime=$[${abstime}+${inTimes[${i}]}] + [ -z "${doverlaps[${i}]}" ] && continue + repcmd="${repcmd} trim 0s $[${abstime}-${doverlaps[${i}]}]s : trim 0s ${doverlaps[${i}]}s repeat :" + abstime=0 +done + +trackmodcmd="" +abstime=0 +for (( i=0; i<=${#inTimes[@]}; i++ )) +do + if [ ${i} -gt 0 ] + then + [ -n "${inTimecorrections[$[${i}-1]]}" ] && \ + inTimes[${i}]=$[${inTimes[${i}]}-${inTimecorrections[$[${i}-1]]}] + [ -n "${outTimecorrections[$[${i}-1]]}" ] && \ + outTimes[${i}]=$[${outTimes[${i}]}-${outTimecorrections[$[${i}-1]]}] + fi + + [ -n "${inTimes[$[${i}+1]]}" ] && abstime=$[${abstime}+${inTimes[$[${i}+1]]}] + [ -n "${doverlaps[${i}]}" ] && abstime=$[${abstime}+${doverlaps[${i}]}] + [ "${trackmods[${i}]}" == "${trackmods[$[${i}+1]]}" ] && continue + if [ ${i} -eq ${#inTimes[@]} ] + then + trackmodcmd="${trackmodcmd}${trackmods[${i}]} " + else + trackmodcmd="${trackmodcmd}trim 0s ${abstime}s${trackmods[${i}]} : " + fi + abstime=0 +done + +splicecmd="" +abstime=0 +for (( i=0; i<=${#inTimes[@]}; i++ )) +do + [ -n "${inTimes[${i}]}" ] && abstime=$[${abstime}+${inTimes[${i}]}] + [ -z "${overlaps[${i}]}" ] && continue + splicecmd="${splicecmd} ${abstime}s,${overlaps[${i}]}s,0s" + abstime=$[${abstime}+${doverlaps[${i}]}] +done +[ -n "${splicecmd}" ] && splicecmd="splice -t${splicecmd}" + +trimcmd="" +for (( i=1; i<=${#outTimes[@]}; i++ )) +do + trimcmd="${trimcmd}trim 0s =${outTimes[${i}]}s : " + ${newFile[${i}]} && trimcmd="${trimcmd}newfile : " +done + +[ ${outRate} -ne ${inRate} ] && remixcmd="${remixcmd} rate -v ${outRate}" + +if ! ${noGain} +then + firstline="${firstline} gain -b" + remixcmd="${remixcmd} gain -n" +fi + +echo sox -M "${inputs[@]}" -p trim ${firstline} +echo sox -t sox - -p ${repcmd} +echo sox -t sox - -p ${trackmodcmd} +echo sox -t sox - -p ${splicecmd} ${remixcmd} +echo sox -t sox - ${output} ${trimcmd} + +if ! ${dummy} +then + sox -M "${inputs[@]}" -p trim ${firstline}| \ + sox -t sox - -p ${repcmd} | \ + sox -t sox - -p ${trackmodcmd} | \ + sox -t sox - -p ${splicecmd} ${remixcmd} | \ + sox -t sox - ${output} ${trimcmd} +fi diff --git a/subtimes b/subtimes deleted file mode 100755 index 7eda175..0000000 --- a/subtimes +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -# subtimes t1 t2 -# -> "t1-t2" - -for i in {1..2} -do - inp=$(echo "${@:i:1}" | sed "s/^ *//" | sed "s/ *#.*$//") - p1=$(echo "$inp" | tr ":" " " | awk '{print $1}') - p2=$(echo "$inp" | tr ":" " " | awk '{print $2}') - p3=$(echo "$inp" | tr ":" " " | awk '{print $3}') - for j in {1..2} - do - if [ "$p3" == "" ] - then - p3=$p2 - p2=$p1 - p1="0" - fi - done - p4=$(echo $p3 | tr "." " " | awk '{print $2}') - while [ ${#p4} -lt 6 ] - do - p4=${p4}"0" - done - f[$i]=$(echo $p4 | sed "s/^0*//" | sed "s/^$/0/") - s[$i]=$(echo $p3 | tr "." " " | awk '{print $1}' | sed "s/^0*//" | sed "s/^$/0/") - m[$i]=$(echo $p2 | sed "s/^0*//" | sed "s/^$/0/") - h[$i]=$(echo $p1 | sed "s/^0*//" | sed "s/^$/0/") -done - -fd=$[${f[1]}-${f[2]}] -ut=0 -while [ $fd -lt 0 ] -do - ut=$[$ut+1] - fd=$[$fd+1000000] -done -while [ ${#fd} -lt 6 ] -do - fd="0"$fd -done -sd=$[${s[1]}-${s[2]}-$ut] -ut=0 -while [ $sd -lt 0 ] -do - ut=$[$ut+1] - sd=$[$sd+60] -done -md=$[${m[1]}-${m[2]}-$ut] -ut=0 -while [ $md -lt 0 ] -do - ut=$[$ut+1] - md=$[$md+60] -done -hd=$[${h[1]}-${h[2]}-$ut] - -echo $hd":"$md":"$sd"."$fd diff --git a/timetosample b/timetosample deleted file mode 100755 index 42168fb..0000000 --- a/timetosample +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# timetosample samplerate time - -inp=$(echo "$2" | sed "s/^ *//" | sed "s/ *\(#.*\)*$//") -p1=$(echo "${inp}" | tr ":" " " | awk '{print $1}') -p2=$(echo "${inp}" | tr ":" " " | awk '{print $2}') -p3=$(echo "${inp}" | tr ":" " " | awk '{print $3}') -for i in {1..2} -do - if [ "${p3}" == "" ] - then - p3="${p2}" - p2="${p1}" - p1="0" - fi -done -p4=$(echo "${p3}" | sed "s/^[^.]*\(\.\|$\)//") -while [ ${#p4} -lt 6 ] -do - p4="${p4}0" -done -frc=$(echo "${p4}" | sed "s/^0*//" | sed "s/^$/0/") -sek=$(echo "${p3}" | sed "s/\..*$//" | sed "s/^0*//" | sed "s/^$/0/") -min=$(echo "${p2}" | sed "s/^0*//" | sed "s/^$/0/") -stu=$(echo "${p1}" | sed "s/^0*//" | sed "s/^$/0/") - -samp=$[${stu}*60+${min}] -samp=$[${samp}*60+${sek}] -samp=$[${samp}*$1+$[$[${frc}*$1 + 500000]/1000000]] -echo ${samp} diff --git a/trimpoints b/trimpoints deleted file mode 100755 index 9e2d48e..0000000 --- a/trimpoints +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash - -h=0 -m=0 -s=0 -f=0 - -read in -while [ "$in" != "" ] -do - inp=$(echo "$in" | sed "s/^ *//" | sed "s/ *#.*$//") - p1=$(echo "$inp" | tr ":" " " | awk '{print $1}') - p2=$(echo "$inp" | tr ":" " " | awk '{print $2}') - p3=$(echo "$inp" | tr ":" " " | awk '{print $3}') - for i in {1..2} - do - if [ "$p3" == "" ] - then - p3=$p2 - p2=$p1 - p1="0" - fi - done - fn=$(echo $p3 | tr "." " " | awk '{print $2}') - while [ ${#fn} -lt 6 ] - do - fn=$fn"0" - done - fn=$(echo $fn | sed "s/^0*//" | sed "s/^$/0/") - sn=$(echo $p3 | tr "." " " | awk '{print $1}' | sed "s/^0*//" | sed "s/^$/0/") - mn=$(echo $p2 | sed "s/^0*//" | sed "s/^$/0/") - hn=$(echo $p1 | sed "s/^0*//" | sed "s/^$/0/") - fp=$[$fn-$f] - ut=0 - while [ $fp -lt 0 ] - do - ut=$[$ut+1] - fp=$[$fp+1000000] - done - while [ ${#fp} -lt 6 ] - do - fp="0"$fp - done - sp=$[$sn-$s-$ut] - ut=0 - while [ $sp -lt 0 ] - do - ut=$[$ut+1] - sp=$[$sp+60] - done - mp=$[$mn-$m-$ut] - ut=0 - while [ $mp -lt 0 ] - do - ut=$[$ut+1] - mp=$[$mp+60] - done - hp=$[$hn-$h-$ut] - if [ "$1" == "raw" ] - then - echo $hp":"$mp":"$sp"."$fp - else - echo -ne "trim 0 "$hp":"$mp":"$sp"."$fp" " - if [ $(echo "$in" | sed "s/^.*#//" | grep -c "^compress") -eq 1 ] - then - echo -ne "$1 " - fi - echo -ne ": newfile : " - fi - f=$fn - s=$sn - m=$mn - h=$hn - read in -done -- cgit v1.2.3-54-g00ecf