FAUST (programozási nyelv) - FAUST (programming language)
| Eredeti szerző (k) | Yann Orlarey, Dominique Fober, Stéphane Letz |
|---|---|
| Fejlesztő (k) | GRAME, a National Création Musicale Központ |
| Első kiadás | 2002 |
| Stabil kiadás | 2.20.2 / 2020. január 14
|
| Beírva | C ++ |
| Operációs rendszer | Linux , OS X , Windows , Unix |
| típus | Funkcionális programozási nyelv az audiojel feldolgozásához |
| Engedély | GPL |
| Weboldal | faust |
FAUST (Funkcionális audio stream) egy domain-specifikus tisztán funkcionális programozási nyelv végrehajtása jelfeldolgozó algoritmusok formájában könyvtárak , audio plug-inek , vagy önálló alkalmazásokat. A FAUST program egy jelfeldolgozót jelöl: egy matematikai függvény, amelyet valamilyen bemeneti jelre alkalmaznak, majd táplálnak.
Áttekintés
A FAUST programozási modell ötvözi a funkcionális programozási megközelítést a blokkdiagram szintaxisával:
- A funkcionális programozási megközelítés természetes keretet biztosít a jelfeldolgozáshoz . A digitális jeleket az idő diszkrét függvényeként , a jelfeldolgozókat mint másodrendű funkciókat modellezik, amelyek működnek rajtuk, és a FAUST blokkdiagram- összeállítási operátorait , amelyeket a jelfeldolgozók összekapcsolására, harmadrendű függvényként stb.
- A blokkdiagramok, még ha tisztán szövegesek is, mint a FAUST-ban, elősegítik a jelfeldolgozás moduláris megközelítését, amely megfelel a hangmérnökök és az audiokészítők szokásainak.
A FAUST program nem egy hangot vagy egy hangcsoportot ír le, hanem egy jelfeldolgozót . A program forrása definíciókészletként van szervezve, legalább a kulcsszó meghatározásával process (a main C-ben megegyező értékkel):
process = ...;
A FAUST fordító lefordítja a FAUST kódot C ++ objektummá , amely ezután kapcsolódhat más C ++ kódhoz, hogy teljes programot készítsen.
A létrehozott kód a minta szintjén működik. Ezért alkalmas alacsony szintű DSP funkciók megvalósítására, mint például rekurzív szűrők . A kód beágyazható is . Önálló és nem függ semmilyen DSP könyvtártól vagy futási rendszertől . Nagyon determinisztikus viselkedéssel és állandó memóriamérettel rendelkezik.
A FAUST szemantikája egyszerűvé és jól körülhatárolhatóvá válik. Lehetővé teszi a FAUST fordító szemantikai vezérlését . Ahelyett, hogy a programot szó szerint állítaná össze, összeállítja az általa jelölt matematikai függvényt. Ez elősegítheti az alkatrészek újrafelhasználását. Ezenkívül a FAUST program pontos szemantikájához való hozzáférés egyszerűsítheti a megőrzési kérdéseket.
A FAUST egy szövegnyelv, de blokkdiagram-orientált. Kétféle megközelítést ötvöz: a funkcionális programozást és az algebrai blokkdiagramokat , amelyeket a funkciókompozíció révén építenek fel . Ehhez a FAUST öt kompozíciós művelet blokkdiagram-algebrájára támaszkodik .
Példakód
A FAUST programok meghatároznak egy process funkciót, amely a bejövő adatokon működik. Ez analóg main a legtöbb programozási nyelv funkciójával. A következő példa csendet produkál:
process = 0;
A második példa a bemeneti jelet a kimenetre másolja. Ez magában foglalja a _ primitívumot, amely a jelek azonosságfüggvényét jelöli :
process = _;
Egy másik példa a sztereó jelet mono jellé foglalja össze a + primitív használatával:
process = +;
A legtöbb FAUST primitív analóg a számok C megfelelőjével, de jelekre emeli őket. Például a FAUST primitív sin az X jelen működik úgy, hogy a C függvényt sin alkalmazza minden X mintára [t]. Az összes C numerikus függvénynek megvan a megfelelője a FAUST-ban. Néhány jelfeldolgozó primitív a FAUST-ra jellemző. Például a késleltetési operátor @ két bemeneti jelet vesz fel: X (késleltetendő jel) és D (alkalmazandó késleltetés), és Y kimeneti jelet állít elő, így Y (t) = X (t - D (t) ).
Blokkdiagram összetétele
A Max-szerű vizuális programozási nyelvekkel ellentétben, ahol a felhasználó manuálisan csatlakoztatja a kapcsolatot, a FAUST primitíveket blokkdiagramokba állítják össze , magas szintű blokkdiagram- összeállítási műveletek segítségével.
| f ~ g | Rekurzív kompozíció (4. prioritás) |
| f, g | Párhuzamos összetétel (3. prioritás) |
| f: g | Szekvenciális összetétel (2. prioritás) |
| f <: g | Osztott összetétel (1. prioritás) |
| f:> g | Összevonás egyesítése (1. prioritás) |
A szekvenciális összetevő operátor segítségével : a kimenet + átirányítható a bemenetre a jel abszolút értékénekabs kiszámításához :
process = + : abs;
Íme egy példa a párhuzamos kompozícióra az , operátor segítségével, amely párhuzamosan rendezi a bal és a jobb kifejezést. Ez analóg a sztereó kábellel.
process = _,_;
Ezek az operátorok tetszőlegesen kombinálhatók. A következő kód megszorozza a bemeneti jelet 0,5-tel:
process = _,0.5 : *;
A fentieket curried formában lehet átírni :
process = *(0.5);
A rekurzív kompozíció operátor ~ felhasználható ciklusokkal rendelkező blokkdiagramok létrehozására (amelyek implicit egymintás késleltetést tartalmaznak). Itt van egy példa egy integrátorra, amely felveszi az X bemeneti jelet és kiszámítja az Y kimeneti jelet úgy, hogy Y (t) = X (t) + Y (t − 1):
process = + ~ _;
Teljes alkalmazások generálása
Meghatározott architektúra fájlok használatával a FAUST program felhasználható kódok előállítására különféle platformokhoz és beépülő modulokhoz. Ezek az architektúra fájlok burkolóként működnek, és leírják a kölcsönhatásokat a gazdagép audio és GUI rendszerével. 2015-től több mint 10 architektúra támogatott, és újakat bárki megvalósíthat.
| alsa-gtk.cpp | ALSA alkalmazás + GTK |
| alsa-qt.cpp | ALSA alkalmazás + QT4 |
| android.cpp | Android-alkalmazások |
| au.cpp | Audio egység plug-in |
| ca-qt.cpp | CoreAudio alkalmazás + QT4 |
| ios-coreaudio.cpp | iPhone és iPad alkalmazások |
| jack-gtk.cpp | JACK alkalmazás + GTK |
| jack-qt.cpp | JACK alkalmazás + QT4 |
| ladspa.cpp | LADSPA plug-in |
| max-msp.cpp | Max MSP plug-in |
| pd.cpp | Puredata plug-in |
| q.cpp | Q nyelvű plug-in |
| supercollider.cpp | Supercollider plug-in |
| vst.cpp | VST plug-in |
| vsti-mono.cpp | Monofonikus VST eszköz plug-in |
| vsti-poly.cpp | Polifonikus VST Instrument plug-in |
Blokkdiagramok generálása
Egy hasznos opció lehetővé teszi a program blokkdiagramjának ábrázolását egy vagy több SVG grafikus fájlként.
Hasznos megjegyezni a blokkdiagram és a létrehozott C ++ kód közötti különbséget. Mint elhangzott, a legfontosabb ötlet itt nem a blokkdiagram szó szerinti összeállítása, hanem az általa jelölt matematikai függvény. A modern C / C ++ fordítók szintén nem szó szerint állítják össze a programokat. De a C / C ++ komplex szemantikája miatt (mellékhatások, mutatóaliasítás stb. Miatt) nem tudnak nagyon messzire menni ebben az irányban. Ez a tisztán funkcionális nyelv kifejezett előnye: lehetővé teszi a fordítók számára, hogy nagyon fejlett optimalizálásokat végezzenek.
Nyilaszerű szemantika
A Faust szemantika majdnem megegyezik a Haskell Arrows típusú osztályéval. Az Arrow típusú osztály azonban nincs kötve a jelfeldolgozókhoz.
f~g |
loop ((\(a,b) -> (b,a)) ^>> f >>> id &&& (delay>>>g)) ahol delay nem a típusosztály módszere Arrow , hanem a jelfeldolgozó nyilakra jellemző
|
f,g |
f***g
|
f:g |
f>>>g
|
f<:g |
f>>^h>>>g megfelelő funkcióval h (vagy &&& különleges esetekben)
|
f:>g |
f>>^h>>>g megfelelő funkcióval h
|
A nyílkombinátorok szigorúbbak, mint a FAUST társaik, pl. A párhuzamos kompozíció fészkelése megmarad, és az operandus bemeneteinek &&& pontosan meg kell egyezniük.
Hivatkozások
- Michon, Romain; Smith, Julius O. III (2011). "Faust-STK: Lineáris és nemlineáris fizikai modellek összessége a Faust programozási nyelv számára" (PDF) . A 11. Int. Konferencia a digitális audio effektusokról (DAFx-11) : 199–204.
- Fober, Dominique; Orlarey, Yann; Letz, Stéphane (2011). "Faust Architectures Design és OSC támogatás" (PDF) . A 11. Int. Közleménye Konferencia a digitális audio effektusokról (DAFx-11) : 213–216.
- Smith, Julius O. III; Michon, Romain (2011). "Nemlineáris Allpass létra szűrők Faustban" (PDF) . A 11. Int. Konferencia a digitális audio effektusokról (DAFx-11) : 361–364.
- Jouvelot, Pierre; Orlarey, Yann (2011). "Függő vektortípusok az adatstrukturáláshoz a többirányú Faustban" (PDF) . Számítógépes nyelvek, rendszerek és struktúrák .
- Smith III, Julius O. (2011). "Audio jelfeldolgozás Faustban" (PDF) .
- Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2010). "Az audioalkalmazások automatikus párhuzamosítása a Fausttal" (PDF) . A Congrès Français d'Acoustique folyóirata .
- Letz, Stéphane; Orlarey, Yann; Fober, Dominique (2010). "Munkalopási ütemező az automatikus párhuzamosításhoz a Faustban" (PDF) . A Linux audio konferencia (LAC-2010) anyagai .
- Gräf, Albert (2010). "A Faust programozási nyelv terminusátírás kiterjesztése" (PDF) . A 8. Nemzetközi Linux Audio Konferencia (LAC-2010) anyagai : 117.
- Barthélemy, Jérôme; Bonardi, Alain; Orlarey, Yann; Lemouton, Serge; Ciavarella, Raffaele; Barkati, Karim (2010). "Első lépések a virtuális hangszerek organológiája felé a számítógépes zenében" (PDF) . A 2010. évi nemzetközi számítógépes zenei konferencia (ICMA-2010) anyagai: 369–372.
- Jouvelot, Pierre; Orlarey, Yann (2010). "Depantáns vektor típusok a több sebességű Fausthoz" (PDF) . A 7. hang- és zenei számítástechnikai konferencia (SMC-2010) anyagai: 345–352. Archiválva az eredetiből (PDF) 2012-04-07 . Letöltve: 2011-10-11 .
- Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2009). "Automatikus párhuzamosítás hozzáadása a Fausthoz" (PDF) . A Linux audio konferencia anyagai (LAC-2009) .
- Jouvelot, Pierre; Orlarey, Yann (2009). "Szemantika a többirányú Faust számára". A Centre de Recherche en Informatique de MINES ParisTech műszaki jelentései (PDF) .
-
Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2009). "Az audioalkalmazások párhuzamosítása a Faust-tal" (PDF) . Idézni a naplót
|journal=( segítséget ) igényel - Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2009). "Faust: Hatékony funkcionális megközelítés a DSP programozáshoz". Új Computanionals paradigmák a számítógépes zenéhez (PDF) . Delatour kiadás. ISBN 978-2-7521-0054-2 .
- Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2008). "Többmagos technológiák Jackben és Faustban" (PDF) . A 2010. évi nemzetközi számítógépes zenei konferencia (ICMC-2008) anyagai .
- Gräf, Albert (2007). "A tiszta adatok összekapcsolása a Fausttal" (PDF) . Az 5. Nemzetközi Linux Audio Konferencia (LAC2007) anyagai : 24.
- Smith III, Julius O. (2007). "K. függelék. Digitális szűrés Faustban és PD-ben". Bevezetés a digitális szűrőkbe: Hangalkalmazásokkal . W3K Publishing. 417-? ISBN 978-0-9745607-1-7 .
- Gräf, Albert; Kersten, Stefan; Orlarey, Yann (2006). "DSP programozás a Faust, Q és SuperCollider alkalmazással" (PDF) . A 4. Nemzetközi Linux Audio Konferencia (LAC2006) anyagai .
- Trausmuth, Robert; Dusek, keresztény; Orlarey, Yann (2006). "Faust használata az FPGA programozáshoz" (PDF) . A 9. Int. Konferencia a digitális audio effektusokról (DAFx-09) .
- Orlarey, Yann; Fober, Dominique; Letz, Stephone (2005). "A Faust jelfeldolgozó nyelv bemutatása" . Nemzetközi számítógépes zenei konferencia anyagai . 2005 . Számítógépes Zene Egyesület. o. 286.
- Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2004). "A Faust szintaktikai és szemantikai vonatkozásai". Soft Computing (PDF) .
- Scaringella, Nicolas; Orlarey, Yann; Fober, Dominique (2003). "Automatikus vektorizálás a Faustban" (PDF) . Journée de l'Informatique Musicale (JIM-2003) .
- Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2002). "A blokkdiagram-konstrukciók algebrai megközelítése" (PDF) . Journée de l'Informatique Musicale (JIM-2002) .
- Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2002). "Algebra a blokkdiagram nyelvei számára" (PDF) . Nemzetközi számítógépes zenei konferencia anyagai (ICMA-2002) .
Külső linkek
- Hivatalos weboldal , online fordító, támogatás, dokumentáció, hírek stb.