]> de.git.xonotic.org Git - xonotic/mediasource.git/blob - sound/weapons/tuba_loopnote_maker.sh
some improvements
[xonotic/mediasource.git] / sound / weapons / tuba_loopnote_maker.sh
1 #!/bin/sh
2
3 set -e
4
5 (
6         cd loopfinder
7         gcc -o findloop findloop.c -lfftw3 -Wall -Wextra -ffast-math -lsndfile -O3
8 )
9
10 t=`mktemp -dt loopfinder.XXXXXX`
11 trap 'rm -rf "$t"' EXIT
12
13 synth=$1; shift
14 program=$1; shift
15 velocity=$1; shift
16 transpose=$1; shift
17 tubaid=$1; shift
18
19 delta=2
20 fftsize=2048
21 loopmin=0.5
22 loopmax=1.5
23 len=1.8
24
25 perl tuba_loopnote_maker.mid.pl "$t"/tuba_loopnote_maker.mid $delta $program $velocity $transpose -18 -12 -6 0 6 12 18 24
26 cp "$t"/tuba_loopnote_maker.mid tuba$tubaid.mid
27
28 case "$synth" in
29         timidity)
30                 timidity -Ow "$@" -o "$t"/out.wav "$t"/tuba_loopnote_maker.mid
31                 ;;
32         fluidsynth)
33                 fluidsynth -v -n -i -l -T wav -F "$t"/out.wav "$@" "$t"/tuba_loopnote_maker.mid
34                 ;;
35 esac
36
37 normalize --peak "$t"/out.wav
38
39 start=0
40 step=$(($delta*2))
41 for note in -18 -12 -6 0 6 12 18 24; do
42         sox "$t"/out.wav "$t"/n$note.wav \
43                 channels 1 \
44                 trim $start $step \
45                 silence 1 1s 0
46
47         fn=tuba"$tubaid"_loopnote"$note".ogg 
48
49         # now find loop point
50         loopfinder/findloop "$t"/n$note.wav $fftsize $len $loopmin $loopmax "$t"/t$note.wav | while read -r SAMPLES SECONDS; do
51                 oggenc -Q -q9 -o "$fn" -c "LOOP_START=$SAMPLES" "$t"/t$note.wav
52         done
53
54         # next!
55         start=$(($start+$step))
56 done
57
58 exit 0