File: faust2sam

package info (click to toggle)
faust 2.79.3%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 397,496 kB
  • sloc: cpp: 278,433; ansic: 116,164; javascript: 18,529; vhdl: 14,052; sh: 13,884; java: 5,900; objc: 3,852; python: 3,222; makefile: 2,655; cs: 1,672; lisp: 1,146; ruby: 954; yacc: 586; xml: 471; lex: 247; awk: 110; tcl: 26
file content (150 lines) | stat: -rwxr-xr-x 5,045 bytes parent folder | download | duplicates (3)
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
#!/bin/bash

#************************************************************************
# Copyright (c) 2017 Analog Devices, Inc. All rights reserved.
#************************************************************************

#####################################################################
#     Generates inline Faust objects for the SHARC Audio Module     #
#           Gregory Pat Scandalis, moForte, ADI                     #
#           based on faust2api by Romain Michon                     #
#####################################################################

. faustpath
. faustoptflags
. usage.sh

# change if you want to get the log of what's happening
LOG="/dev/null"
#LOG="log"

# exit if a command fails
set -e

# global option variables

NVOICES="0"
#PACKAGENAME="0"
POLY2="0"
MIDI="0"
NODOC="0"
EFFECT=""

echoHelp()
{
    usage faust2sam "[options] [Faust options] <file.dsp>"
    platform "ADI SHARC Audio Module board"
    echo "Generates inline Faust objects for the ADI SHARC Audio Module board"
    option
    option -midi
    option "-nvoices <num>"
    option "-effect <effect.dsp>"
    option "Faust options"
    exit
}

if [ "$#" -eq 0 ]; then
    echo 'Please, provide a Faust file to process !'
    echo ''
    echoHelp
fi

createAPI ()
{
    cp -r $FAUSTARCH/sam/fast_pow2.h $APIFOLDER
    cp -r $FAUSTARCH/sam/samFaustDSP.h $APIFOLDER
    faust -i -a sam/samFaustDSP.cpp $OPTIONS "$FILE" -o "$APIFOLDER/samFaustDSP.cpp" || exit 1
    if [ "$POLY2" = "1" ]; then
        faust -i -cn effect -a minimal-effect.cpp $EFFECT | cat - "$APIFOLDER/samFaustDSP.cpp" > temp && mv temp "$APIFOLDER/samFaustDSP.cpp" || exit 1
        echo "#define POLY2 1" | cat - "$APIFOLDER/samFaustDSP.cpp" > temp && mv temp "$APIFOLDER/samFaustDSP.cpp"
    fi
    if [ "$NVOICES" -gt "0" ]; then
        echo "#define NVOICES $NVOICES" | cat - "$APIFOLDER/samFaustDSP.cpp" > temp && mv temp "$APIFOLDER/samFaustDSP.cpp"
    fi
    if [ "$MIDI" = "1" ]; then
        echo "#define MIDICTRL 1" | cat - "$APIFOLDER/samFaustDSP.cpp" > temp && mv temp "$APIFOLDER/samFaustDSP.cpp"
    fi
    # These are things that always need to be at the top and bottom
    echo "#if USE_FAUST_ALGORITHM" | cat - "$APIFOLDER/samFaustDSP.cpp" > temp && mv temp "$APIFOLDER/samFaustDSP.cpp"
    echo "#include \"./samFaustDSPCore.h\"" | cat - "$APIFOLDER/samFaustDSP.cpp" > temp && mv temp "$APIFOLDER/samFaustDSP.cpp"
    echo "#include \"common/audio_system_config.h\"" | cat - "$APIFOLDER/samFaustDSP.cpp" > temp && mv temp "$APIFOLDER/samFaustDSP.cpp"
    echo "#endif" >> "$APIFOLDER/samFaustDSP.cpp"

    echo "#if USE_FAUST_ALGORITHM" | cat - "$APIFOLDER/samFaustDSP.h" > temp && mv temp "$APIFOLDER/samFaustDSP.h"
    echo "#include \"./samFaustDSPCore.h\"" | cat - "$APIFOLDER/samFaustDSP.h" > temp && mv temp "$APIFOLDER/samFaustDSP.h"
    echo "#include \"common/audio_system_config.h\"" | cat - "$APIFOLDER/samFaustDSP.h" > temp && mv temp "$APIFOLDER/samFaustDSP.h"
    echo "#endif" >> "$APIFOLDER/samFaustDSP.h"

    echo "#if USE_FAUST_ALGORITHM" | cat - "$APIFOLDER/fast_pow2.h" > temp && mv temp "$APIFOLDER/fast_pow2.h"
    echo "#include \"./samFaustDSPCore.h\"" | cat - "$APIFOLDER/fast_pow2.h" > temp && mv temp "$APIFOLDER/fast_pow2.h"
    echo "#include \"common/audio_system_config.h\"" | cat - "$APIFOLDER/fast_pow2.h" > temp && mv temp "$APIFOLDER/fast_pow2.h"
    echo "#endif" >> "$APIFOLDER/fast_pow2.h"

    # fix things that won't compile on the sharc
    cat "$APIFOLDER/samFaustDSP.cpp"  | \
    sed     -e 's/\(std::cerr.*;\)/\/* \1 *\/ /' \
        -e 's/std::cout/\/\/std::cout/' \
        -e 's/getCPULoad(void/faustGetCPULoad(void/' \
        -e 's/std::stringstream/std::ostringstream/' \
        -e 's/dynamic_cast/static_cast/' \
        > temp && mv temp "$APIFOLDER/samFaustDSP.cpp"
}

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

    if [ $p = "-help" ] || [ $p = "-h" ]; then
        echoHelp
    elif [ "$PACKAGENAME" = "-1" ]; then
        PACKAGENAME="$p"
    elif [[ -f "$p" ]]; then
        FILE="$p"
    elif [ "$p" = "-effect" ]; then
        POLY2="1"
        shift
        EFFECT=$1
    elif [ "$p" = "-midi" ]; then
        MIDI="1"
    elif [ $p = "-nvoices" ]; then
        shift
        NVOICES=$1
    elif [ $p = "-package" ]; then
        PACKAGENAME="-1"
    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

###################################
# GENERATING API
###################################

APIFOLDER="${FILE%.*}-sam"

rm -r "$APIFOLDER" 2> /dev/null || true
mkdir "$APIFOLDER"

echo "Your $APIFOLDER.zip package is being created"
createAPI

###################################
# POST PROCESSING
###################################

ZIPOUT="$APIFOLDER.zip"

rm $ZIPOUT 2> /dev/null || true
zip -r $ZIPOUT $APIFOLDER > /dev/null || exit 1
rm -r $APIFOLDER || exit 1

# echos generated files for FaustWorks
echo "$ZIPOUT;"