summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2016-05-03 13:55:46 +0200
committerErich Eckner <git@eckner.net>2016-05-03 13:55:46 +0200
commit9bc4fc74a0f7db32c3652115ec73ca1ef637c8f2 (patch)
treed59c03f76030d301905cc7837811b83a6b836b47
parent55288d7e36a6b2c79dd0f134dd1ee0d45d4e5be4 (diff)
downloadsound-cutter-9bc4fc74a0f7db32c3652115ec73ca1ef637c8f2.tar.xz
aufgeräumt, umbenannt, umstrukturiertv1.0
-rwxr-xr-xaddtimes59
-rwxr-xr-xdoit281
-rwxr-xr-xdoit.save264
-rwxr-xr-xsoundCutter332
-rwxr-xr-xsubtimes59
-rwxr-xr-xtimetosample31
-rwxr-xr-xtrimpoints75
7 files changed, 332 insertions, 769 deletions
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