File: faust2webaudioasm

package info (click to toggle)
faust 2.14.4~repack2-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 276,136 kB
  • sloc: cpp: 231,578; ansic: 15,403; sh: 10,871; java: 6,917; objc: 4,085; makefile: 3,002; cs: 1,077; ruby: 951; python: 885; xml: 550; yacc: 516; lex: 233; lisp: 201
file content (146 lines) | stat: -rwxr-xr-x 5,699 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
#!/bin/bash

. faustpath
. faustoptflags

#-------------------------------------------------------------------
# Wrapping resources
HTML_FOOTER=""
CODE_WRAPPER=""
JS_WRAPPER=""

LINKS=""
SVG=""

EMCC="false"
POLY="false"
EXPORT="false"

#-------------------------------------------------------------------
# Analyze command arguments :
# faust options                 -> OPTIONS
# existing *.dsp files          -> FILES
#

for p in $@; do
    if [ $p = "-help" ] || [ $p = "-h" ]; then
        echo "faust2webaudioasm [-poly] [-links] [-emcc] <file.dsp>"
        echo "Use '-poly' to produce a polyphonic DSP, ready to be used with MIDI events"
        echo "Use '-links' to add links to source code and SVG diagrams in the generated HTML file"
        echo "Use '-emcc' to compile C++ generated code to asm.js with Emscripten, otherwise the internal asm.js backend is used"
        exit
    elif [ $p = "-links" ]; then
        SVG="-svg"
        LINKS="<div style=\"text-align:center;height:20px\"> 
                <style>
				a:link {font-family:Arial; font-size:12px; color:#3D3C3A; text-decoration:none}
				a:visited {font-family:Arial; font-size:12px; color:#3D3C3A; text-decoration:none}
				a:hover {font-family:Arial; font-size:12px; color:white; text-decoration:none}
                </style>
            <a href=\"DSP.dsp\" target=\"_blank\">source</a> 
            <a href=\"DSP-svg/process.svg\" target=\"_blank\">diagram</a>
            </div>"
        EXPORT_FOOTER=export-wrapper.html
        EXPORT="true"
    elif [ $p = "-poly" ]; then
        POLY="true"
    elif [ $p = "-emcc" ]; then
        EMCC="true"
    elif [ ${p:0:1} = "-" ]; then
	    OPTIONS="$OPTIONS $p"
	elif [[ -e "$p" ]]; then
	    FILES="$FILES $p"
	else
	    OPTIONS="$OPTIONS $p"        
	fi
done

#-------------------------------------------------------------------
# Set the compilation wrapping files depending of the compilation options
#

if [ $POLY = "true" ]; then
    HTML_FOOTER=webaudio-asm-poly-footer.html
    if [ $EMCC = "true" ]; then
        echo "Compiled with 'emcc' in polyphonic mode"
        CODE_WRAPPER=webaudio-asm-poly.cpp
        JS_WRAPPER=webaudio-asm-poly-emcc.js
    else
        echo "Compiled with 'asm.js' backend in polyphonic mode"
        CODE_WRAPPER=webaudio-asm-poly-standalone-wrapper.js
    fi
else
    HTML_FOOTER=webaudio-asm-footer.html
    if [ $EMCC = "true" ]; then
        echo "Compiled with 'emcc'"
        CODE_WRAPPER=webaudio-asm.cpp
        JS_WRAPPER=webaudio-asm-emcc.js
    else
        echo "Compiled with 'asm.js' backend"
        CODE_WRAPPER=webaudio-asm-standalone-wrapper.js
    fi
fi

#-------------------------------------------------------------------
# compile the *.dsp files
#

BINARIES=""

for f in $FILES; do
    name=$(basename "$f" .dsp)
    
    # compile the Faust DSP to C++ or asm.js code
    if [ $EMCC = "true" ]; then
        faust $SVG -a $FAUSTLIB/webaudio/$CODE_WRAPPER -i -uim -cn $name $OPTIONS $f -o $name.cpp || exit
    else
        faust -lang ajs $SVG -a $FAUSTLIB/webaudio/$CODE_WRAPPER -cn $name $OPTIONS $f -o $name-temp1.js || exit
    fi
     
    if [ $EMCC = "true" ]; then
        # prepare emcc compilation files
        if [ $POLY = "false" ]; then    EXPORTED="['_"$name"_constructor','_"$name"_destructor','_"$name"_init','_"$name"_getSampleRate','_"$name"_instanceInit','_"$name"_instanceConstants','_"$name"_instanceClear','_"$name"_compute','_"$name"_getNumInputs','_"$name"_getNumOutputs','_"$name"_setParamValue','_"$name"_getParamValue','_"$name"_getJSON']"
        else        EXPORTED="['_"$name"_poly_constructor','_"$name"_poly_destructor','_"$name"_poly_init','_"$name"_poly_getSampleRate','_"$name"_poly_instanceInit','_"$name"_poly_instanceConstants','_"$name"_poly_instanceClear','_"$name"_poly_compute','_"$name"_poly_getNumInputs','_"$name"_poly_getNumOutputs','_"$name"_poly_setParamValue','_"$name"_poly_getParamValue','_"$name"_poly_getJSON','_"$name"_poly_keyOn','_"$name"_poly_keyOff','_"$name"_poly_allNotesOff','_"$name"_poly_ctrlChange','_"$name"_poly_pitchWheel']"                  
        fi
        # compile the C++ code to asm.js
        emcc -O2 --memory-init-file 0 $name.cpp -s TOTAL_MEMORY=100663296 --post-js $FAUSTLIB/webaudio/$JS_WRAPPER -o $name-temp1.js \
            -s EXPORTED_FUNCTIONS=$EXPORTED || exit
 
        # remove intermediate C++  file
        rm $name.cpp
    fi
    
    #java -jar /usr/local/bin/yuicompressor-2.4.8.jar $name-temp1.js -o $name-temp1.js --charset utf-8
          
    # compose the self-contained HTML page
    echo "<html>" > $name-temp2.html
    echo "<head>" >> $name-temp2.html
    echo "<meta charset=\"UTF-8\">" >> $name-temp2.html
    echo "<style type=\"text/css\">" >> $name-temp2.html
    cat $FAUSTLIB/js/stylesheet.js >> $name-temp2.html
    echo "</style>" >> $name-temp2.html
    echo "<script type=\"text/javascript\">" >> $name-temp2.html
    cat $FAUSTLIB/js/jsscripts.js >> $name-temp2.html
    cat $FAUSTLIB/webaudio/WebMIDIAPI.js >> $name-temp2.html
    sed -e "s/DSP/"$name"/g" $name-temp1.js >> $name-temp2.html
    echo "</script>" >> $name-temp2.html 
    echo "</head>" >> $name-temp2.html
    echo "<body>" >> $name-temp2.html
    echo $LINKS >> $name-temp2.html
    cat $FAUSTLIB/webaudio/$HTML_FOOTER >> $name-temp2.html
    if [ $EXPORT = "true" ] ; then
        cat $FAUSTLIB/webaudio/$EXPORT_FOOTER >> $name-temp2.html
    fi
    echo "</body>" >> $name-temp2.html
    echo "</html>" >> $name-temp2.html
    sed -e "s/DSP/"$name"/g" $name-temp2.html > $name.html
    
    rm $name-temp1.js
    rm $name-temp2.html
 
    # collect binary file name
	BINARIES="$BINARIES$name.html;"

done

echo $BINARIES