File: faust2jack

package info (click to toggle)
faust 2.30.5~ds0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 279,348 kB
  • sloc: cpp: 239,368; javascript: 32,310; ansic: 17,442; sh: 11,925; java: 5,903; objc: 3,879; makefile: 3,030; cs: 1,139; python: 987; ruby: 951; xml: 693; yacc: 537; lex: 239; lisp: 201; awk: 110
file content (162 lines) | stat: -rwxr-xr-x 5,035 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#! /bin/bash -e

#####################################################################
#                                                                   #
#               Compiles Faust programs to JACK-GTK                 #
#               (c) Grame, 2009-2019                                #
#                                                                   #
#####################################################################

. faustpath
. faustoptflags
. usage.sh

CXXFLAGS+=" $MYGCCFLAGS -I/opt/local/include" # So that additional CXXFLAGS can be used

ARCHFILE=$FAUSTARCH/jack-gtk.cpp

OSCDEFS=""
POLY="POLY"
NVOICES=-1
SOUNDFILE="0"
SOUNDFILEDEFS=""
SOUNDFILELIBS=""
PRESETDIR="auto"
PRESETDEFS=""

if [[ $(uname -s) != Darwin ]]; then
	LFLAGS+="-no-pie"
fi

#-------------------------------------------------------------------
# Check Darwin specifics
#
if [[ $(uname) == Darwin ]]; then
    ARCHLIB+=" -framework CoreMIDI -framework CoreFoundation"
else
    ARCHLIB+=" `pkg-config --cflags --libs alsa`"
fi

#PHASE 2 : dispatch command arguments
while [ $1 ]
do
    p=$1

    if [ $p = "-help" ] || [ $p = "-h" ]; then
        usage faust2jack "[options] [Faust options] <file.dsp>"
        platform Linux
        require Jack
        echo "Compiles Faust programs to JACK-GTK"
        option
        options -httpd -osc -midi -soundfile
        option -resample "to resample soundfiles to the audio driver sample rate."
        option "-nvoices <num>"
        option "-effect <effect.dsp>"
        option "-effect auto"
        option "-preset <directory>" "add a preset manager on top of GUI and save the preset files in the given directory"
        option "-preset auto" "add a preset manager on top of GUI and save the preset files in a system temporary directory"
        option "Faust options"
        exit
    fi

	if [ $p = "-nvoices" ]; then
        POLYDEFS="-DPOLY"
        shift
        NVOICES=$1
        if [ $NVOICES -ge 0 ]; then
            CXXFLAGS="$CXXFLAGS -DNVOICES=$NVOICES"
        fi
    elif [ $p = "-effect" ]; then
        POLYDEFS="-DPOLY2"
        POLY="POLY2"
        shift
        EFFECT=$1
    elif [ $p = "-midi" ]; then
        MIDIDEFS="-DMIDICTRL"
    elif [ $p = "-soundfile" ]; then
        SOUNDFILE="1"
        SOUNDFILEDEFS="-DSOUNDFILE"
        SOUNDFILELIBS=`pkg-config --cflags --static --libs sndfile`
    elif [ $p = "-resample" ]; then
        SAMPLERATEDEFS="-DSAMPLERATE"
        SAMPLERATELIBS=`pkg-config --cflags --static --libs samplerate`
    elif [ $p = "-osc" ]; then
        OSCDEFS="-DOSCCTRL -lOSCFaust"
    elif [ $p = "-httpd" ]; then
        HTTPDEFS="-DHTTPCTRL -lHTTPDFaust -lmicrohttpd"
    elif [ "$p" = "-preset" ]; then
        PRESETDEFS="-DPRESETUI"
        shift
        PRESETDIR=$1
	elif [ $p = "-ocv" ]; then
        OCVDEFS="-DOCVCTRL -lpthread"
        OCVLIBS="opencv"
    elif [ $p = "-arch32" ]; then
        PROCARCH="-m32 -L/usr/lib32"
    elif [ $p = "-arch64" ]; then
        PROCARCH="-m64"
    elif [ ${p:0:1} = "-" ]; then
	    OPTIONS="$OPTIONS $p"
	elif [[ -f "$p" ]] && [ ${p: -4} == ".dsp" ]; then
	    FILES="$FILES $p"
	else
	    OPTIONS="$OPTIONS $p"        
	fi

shift

done

#-------------------------------------------------------------------
# compile the *.dsp files using JACK-GTK
#
for f in $FILES; do

    # compile faust to c++
    if [ $POLY = "POLY2" ]; then
        if [ $EFFECT = "auto" ]; then
            cat > effect.dsp << EndOfCode
            adapt(1,1) = _;
            adapt(2,2) = _,_;
            adapt(1,2) = _ <: _,_;
            adapt(2,1) = _,_ :> _;
            adaptor(F,G) = adapt(outputs(F),inputs(G));
            process = adaptor(library("$f").process, library("$f").effect) : library("$f").effect;
EndOfCode
            faust -i -json -a $ARCHFILE $OPTIONS "$f" -o "${f%.dsp}_tmp.cpp" || exit
            faust -i -cn effect -a minimal-effect.cpp effect.dsp -o effect.h || exit
            rm effect.dsp
        else
            faust -i -json -a $ARCHFILE $OPTIONS "$f" -o "${f%.dsp}_tmp.cpp" || exit
            faust -i -cn effect -a minimal-effect.cpp "$EFFECT" -o "effect.h" || exit
        fi
    else
        faust -i -a $ARCHFILE $OPTIONS "$f" -o "${f%.dsp}_tmp.cpp"|| exit
    fi
    
    # add preset management
    if [ $PRESETDIR = "auto" ]; then
        echo "#define PRESETDIR \"/var/tmp/\"" > "preset.cpp"
    else
        echo "#define PRESETDIR \"$PRESETDIR\"" > "preset.cpp"
    fi

    cat "preset.cpp" "${f%.dsp}_tmp.cpp" > "${f%.dsp}.cpp"
    rm "preset.cpp" "${f%.dsp}_tmp.cpp"


	# compile c++ to binary
	(
		$CXX $CXXFLAGS $FAUSTTOOLSFLAGS "${f%.dsp}.cpp" `pkg-config --cflags --libs jack $OCVLIBS gtk+-2.0` $SOUNDFILELIBS $SAMPLERATELIBS $PROCARCH $OSCDEFS $HTTPDEFS $OCVDEFS $MIDIDEFS $POLYDEFS $SOUNDFILEDEFS $SAMPLERATEDEFS $PRESETDEFS $ARCHLIB $LFLAGS -o "${f%.dsp}"
	) > /dev/null || exit

    # remove tempory files
	rm -f "${f%.dsp}.cpp" effect.h "$f.json"

	# collect binary file name for FaustWorks
	BINARIES="$BINARIES${f%.dsp};"
done

echo $BINARIES