]> de.git.xonotic.org Git - xonotic/mediasource.git/blob - sound/weapons/tuba_loopnote_maker.sh
cd399880f6414405f6a02c6e30a301a2fc59e598
[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
27 case "$synth" in
28         timidity)
29                 timidity -Ow "$@" -o "$t"/out.wav "$t"/tuba_loopnote_maker.mid
30                 ;;
31         fluidsynth)
32                 fluidsynth -v -n -i -l -T wav -F "$t"/out.wav "$@" "$t"/tuba_loopnote_maker.mid
33                 ;;
34 esac
35
36 normalize --peak "$t"/out.wav
37
38 start=$delta
39 step=$(($delta*2))
40 for note in -18 -12 -6 0 6 12 18 24; do
41         sox "$t"/out.wav "$t"/n$note.wav \
42                 channels 1 \
43                 trim $start $step \
44                 silence 1 1s 0
45
46         fn=tuba"$tubaid"_loopnote"$note".ogg 
47
48         # now find loop point
49         loopfinder/findloop "$t"/n$note.wav $fftsize $len $loopmin $loopmax "$t"/t$note.wav | while read -r SAMPLES SECONDS; do
50                 oggenc -Q -q9 -o "$fn" -c "LOOP_START=$SAMPLES" "$t"/t$note.wav
51         done
52
53         # next!
54         start=$(($start+$step))
55 done
56
57 exit 0