Knowledge

FAUST (programming language)

Source 📝

32: 535: 481: 766: 916:
It is useful to note the difference between the block diagram and the generated C++ code. As stated, the key idea here is not to compile the block diagram literally, but the mathematical function it denotes. Modern C/C++ compilers also don't compile programs literally. But because of the complex
762:, a FAUST program can be used to produce code for a variety of platforms and plug-in formats. These architecture files act as wrappers and describe the interactions with the host audio and GUI system. As of 2021, more than 30 architectures are supported and new ones may be implemented by anyone. 376:. Instead of compiling a program literally, it compiles the mathematical function it denotes. This may promote component reuse. Moreover, having access to the exact semantics of a FAUST program can simplify preservation issues. 917:
semantics of C/C++ (due to side effects, pointer aliasing, etc.) they can't go very far in that direction. This is a distinct advantage of a purely functional language: it allows compilers to do very advanced optimisations.
727:
can be used to create block diagrams with cycles (that include an implicit one-sample delay). Here is an example of an integrator that takes an input signal X and computes an output signal Y such that Y(t) = X(t) + Y(t−1):
300:
Block diagrams, even if purely textual as in FAUST, promote a modular approach to signal processing that complies with sound engineers' and audio developers' habits.
1095:
The Arrow combinators are more restrictive than their FAUST counterparts, e.g., the nesting of parallel composition is preserved, and inputs of the operands of
257:, or standalone applications. A FAUST program denotes a signal processor: a mathematical function that is applied to some input signal and then fed out. 508:
takes two input signals: X (the signal to be delayed) and D (the delay to be applied), and produces an output signal Y such that Y(t) = X(t − D(t)).
1280: 913:
A useful option makes it possible to generate the block diagram representation of the program as one or more SVG graphic files.
488:
Most FAUST primitives are analogous to their C counterpart on numbers, but lifted to signals. For example, the FAUST primitive
1441: 1386: 1587: 1372:
Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2009). "Faust: an Efficient Functional Approach to DSP Programming".
75: 53: 46: 190: 1263:
Barthélemy, Jérôme; Bonardi, Alain; Orlarey, Yann; Lemouton, Serge; Ciavarella, Raffaele; Barkati, Karim (2010).
926: 236: 1488: 520: 1499: 1397: 347: 133: 638:
operator that arranges its left and right expressions in parallel. This is analogous to a stereo cable.
1498:
Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2004). "Syntactical and Semantical Aspects of Faust".
1373: 1176: 205: 663:
These operators can be arbitrarily combined. The following code multiplies an input signal with 0.5:
358: 354: 305: 1364: 1326: 1310: 1264: 1545: 1216: 929: 493: 372:
The semantics of FAUST is driven to be simple and well-defined. It allows the FAUST compiler to be
233: 40: 1529: 1248: 1513: 1413: 1484: 380: 270: 57: 20: 1429: 1351: 1129:"Faust-STK: a Set of Linear and Nonlinear Physical Models for the Faust Programming Language" 290: 769:
Screenshot of mixer.dsp (available in the FAUST distribution) using the jack-qt architecture
353:
The generated code works at the sample level. It is therefore suited to implement low-level
528: 411:
function in most programming languages. The following is an example that produces silence:
388: 239: 1452: 8: 250: 1340: 1160: 1144: 1128: 1291: 1437: 1382: 501: 435: 362: 282: 266: 243: 179: 379:
FAUST is a textual language but block diagram oriented. It combines two approaches:
1191: 200: 166: 1468: 500:
to each sample X. All C numerical functions have their counterpart in FAUST. Some
1232: 1204: 1115: 606: 517: 366: 254: 534: 1581: 1195: 932:
type class. However, the Arrow type class is not bound to signal processors.
524: 480: 384: 274: 1328:
Technical Repports of Centre de Recherche en Informatique de MINES ParisTech
1265:"First Steps Towards an Organology of Virtual Instruments in Computer Music" 297:, used to combine signal processors together, as third order functions, etc. 1405:
Proceedings of the 2010 International Computer Music Conference (ICMC-2008)
1272:
Proceedings of the 2010 International Computer Music Conference (ICMA-2010)
1168:
Proceedings of the 11th Int. Conference on Digital Audio Effects (DAFx-11)
1152:
Proceedings of the 11th Int. Conference on Digital Audio Effects (DAFx-11)
1136:
Proceedings of the 11th Int. Conference on Digital Audio Effects (DAFx-11)
523:
where the user does manual connections, FAUST primitives are assembled in
430:
The second example copies the input signal to the output. It involves the
350:, which may then interface with other C++ code to produce a full program. 1476:
Proceedings of the 9th Int. Conference on Digital Audio Effects (DAFx-09)
1325:
Jouvelot, Pierre; Orlarey, Yann (2009). "Semantics for Multirate Faust".
246: 104: 94: 1288:
Proceedings of the 7th Sound and Music Computing Conference (SMC-2010)
1256:
Proceedings of the 8th International Linux Audio Conference (LAC-2010)
1460:
Proceedings of the 4th International Linux Audio Conference (LAC2006)
1421:
Proceedings of the 5th International Linux Audio Conference (LAC2007)
765: 304:
A FAUST program doesn't describe a sound or a group of sounds, but a
281:
The functional programming approach provides a natural framework for
695: 369:. It has a very deterministic behavior and a constant memory size. 340: 286: 1553:
Proceedings of International Computer Music Conference (ICMA-2002)
504:
primitives are specific to FAUST. For example, the delay operator
457:
Another example sums a stereo signal into a mono signal using the
407:
function that operates on incoming data. This is analogous to the
365:. It is self-contained and does not depend on any DSP library or 1262: 1233:"Work Stealing Scheduler for Automatic Parallelization in Faust" 1177:"Dependent Vector Types for Data Structuring in Multirate Faust" 1512:
Scaringella, Nicolas; Orlarey, Yann; Fober, Dominique (2003).
1249:"Term rewriting extension for the Faust programming language" 344: 171: 159: 1217:"Automatic Parallelization of Audio Applications with Faust" 1467:
Trausmuth, Robert; Dusek, Christian; Orlarey, Yann (2006).
484:
Block diagrams generated by Faust from some simple programs
195:
Functional programming language for audio signal processing
183: 175: 1493:. Vol. 2005. Computer Music Association. p. 286. 1490:
Proceedings of the International Computer Music Conference
1569: 1544:
Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2002).
1528:
Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2002).
1483:
Orlarey, Yann; Fober, Dominique; Letz, Stephone (2005).
1434:
Introduction to Digital Filters: With Audio Applications
1396:
Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2008).
1339:
Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2009).
1309:
Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2009).
1231:
Letz, Stéphane; Orlarey, Yann; Fober, Dominique (2010).
1215:
Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2010).
1143:
Fober, Dominique; Orlarey, Yann; Letz, Stéphane (2011).
1028:
type class, but is specific to signal processing arrows
216: 1511: 1530:"An Algebraic Approach to Block Diagram Constructions" 1574:, online compiler, support, documentation, news, etc. 1466: 1451:
Gräf, Albert; Kersten, Stefan; Orlarey, Yann (2006).
634:
Here is an example of parallel composition using the
1318:
Proceedings of the Linux Audio Conference (LAC-2009)
1240:
Proceedings of the Linux Audio Conference (LAC-2010)
1485:"Demonstration of Faust Signal Processing Language" 1450: 1341:"Parallelization of Audio Applications with Faust" 925:The Faust semantics is almost the same as that of 1453:"DSP Programming with Faust, Q and SuperCollider" 936:Equivalences between FAUST and Arrow combinators 1579: 1543: 1527: 1497: 1482: 1395: 1371: 1338: 1308: 1230: 1224:Proceedings of the Congrès Français d'Acoustique 1214: 1142: 293:that operate on them, and FAUST's block diagram 1430:"Appendix K. Digital Filtering in Faust and PD" 1375:New Computanionals Paradigms for Computer Music 1324: 1278: 1174: 753: 308:. The program source is organized as a set of 1537:Journée de l'Informatique Musicale (JIM-2002) 1521:Journée de l'Informatique Musicale (JIM-2003) 1159:Smith, Julius O. III; Michon, Romain (2011). 1127:Michon, Romain; Smith, Julius O. III (2011). 1281:"Depandant Vector Types for Multirate Faust" 1184:Computer Languages, Systems & Structures 1145:"Faust Architectures Design and OSC Support" 908: 774:Some architecture files available for FAUST 538:Simple examples of block diagram composition 511: 312:with at least the definition of the keyword 99:Yann Orlarey, Dominique Fober, Stéphane Letz 19:"FAUST" redirects here. For other uses, see 1311:"Adding Automatic Parallelization to Faust" 1161:"Nonlinear Allpass Ladder Filters in Faust" 1158: 1126: 527:by using a set of high-level block diagram 109:GRAME, Centre National de Création Musicale 1398:"Multicore Technologies in Jack and Faust" 593:Using the sequential composition operator 1427: 1202: 76:Learn how and when to remove this message 1546:"An Algebra for Block Diagram Languages" 1279:Jouvelot, Pierre; Orlarey, Yann (2010). 1175:Jouvelot, Pierre; Orlarey, Yann (2011). 920: 764: 533: 479: 39:This article includes a list of general 492:operates on a signal X by applying the 1580: 571:Sequential composition (precedence 2) 555:Recursive composition (precedence 4) 1411: 1246: 1116:Releases · grame-cncm/faust · GitHub 563:Parallel composition (precedence 3) 25: 723:The recursive composition operator 139:2.60.3 / June 14, 2023 13: 1514:"Automatic Vectorization in Faust" 1469:"Using Faust for FPGA Programming" 1436:. W3K Publishing. pp. 417–?. 1414:"Interfacing Pure Data with Faust" 1205:"Audio Signal Processing in Faust" 902:Polyphonic VST Instrument plug-in 894:Monophonic VST Instrument plug-in 45:it lacks sufficient corresponding 14: 1599: 1561: 587:Merge composition (precedence 1) 579:Split composition (precedence 1) 285:. Digital signals are modeled as 395:of five composition operations. 30: 946: 398: 232:(Functional AUdio STream) is a 1109: 694:The above may be rewritten in 601:can be routed to the input of 391:. For that, FAUST relies on a 289:of time, signal processors as 1: 1428:Smith III, Julius O. (2007). 1203:Smith III, Julius O. (2011). 1102: 822:iPhone and iPad applications 343:translates FAUST code into a 814:CoreAudio application + QT4 754:Generating full applications 521:visual programming languages 387:, which are constructed via 7: 1588:Audio programming languages 434:primitive that denotes the 260: 10: 1604: 1086:with appropriate function 1065:with appropriate function 18: 16:Audio programming language 1290:: 345–352. Archived from 909:Generating block diagrams 512:Block diagram composition 211: 199: 189: 165: 155: 151: 132: 128: 113: 103: 93: 1196:10.1016/j.cl.2011.03.001 1084:f>>^h>>>g 1063:f>>^h>>>g 730: 700: 665: 640: 611: 463: 440: 413: 403:FAUST programs define a 322: 1024:is not a method of the 838:JACK application + QT4 830:JACK application + GTK 790:ALSA application + QT4 782:ALSA application + GTK 361:. The code may also be 60:more precise citations. 1359:Cite journal requires 878:Supercollider plug-in 770: 539: 485: 381:functional programming 291:second order functions 271:functional programming 1412:Gräf, Albert (2007). 1247:Gräf, Albert (2010). 921:Arrows-like semantics 798:Android applications 768: 545:composition operators 537: 483: 393:block diagram algebra 295:composition operators 1381:. Edition Delatour. 1099:must match exactly. 389:function composition 240:programming language 937: 870:Q language plug-in 806:Audio Unit plug-in 775: 548: 374:semantically driven 316:(the equivalent of 90: 1073:in special cases) 935: 773: 771: 760:architecture files 543:The block diagram 542: 540: 486: 287:discrete functions 95:Original author(s) 88: 1443:978-0-9745607-1-7 1388:978-2-7521-0054-2 1093: 1092: 906: 905: 875:supercollider.cpp 862:Puredata plug-in 819:ios-coreaudio.cpp 591: 590: 502:signal processing 436:identity function 359:recursive filters 283:signal processing 267:programming model 244:signal processing 242:for implementing 237:purely functional 227: 226: 86: 85: 78: 1595: 1573: 1572: 1570:Official website 1556: 1550: 1540: 1534: 1524: 1518: 1508: 1506: 1494: 1479: 1473: 1463: 1457: 1447: 1424: 1418: 1408: 1402: 1392: 1380: 1368: 1362: 1357: 1355: 1347: 1345: 1335: 1333: 1321: 1315: 1305: 1303: 1302: 1296: 1285: 1275: 1269: 1259: 1253: 1243: 1237: 1227: 1221: 1211: 1209: 1199: 1181: 1171: 1165: 1155: 1149: 1139: 1133: 1118: 1113: 1098: 1089: 1085: 1080: 1072: 1068: 1064: 1059: 1052: 1047: 1040: 1035: 1027: 1023: 1019: 1018: 1015: 1012: 1009: 1006: 1003: 1000: 997: 994: 991: 988: 985: 982: 979: 976: 973: 970: 967: 964: 961: 958: 955: 952: 949: 943: 938: 934: 854:Max MSP plug-in 776: 772: 749: 746: 743: 740: 737: 734: 726: 719: 716: 713: 710: 707: 704: 690: 687: 684: 681: 678: 675: 672: 669: 659: 656: 653: 650: 647: 644: 637: 630: 627: 624: 621: 618: 615: 604: 600: 596: 549: 541: 507: 499: 491: 476: 473: 470: 467: 460: 453: 450: 447: 444: 433: 426: 423: 420: 417: 410: 406: 335: 332: 329: 326: 319: 315: 306:signal processor 273:approach with a 223: 220: 218: 167:Operating system 146: 144: 124: 122: 91: 87: 81: 74: 70: 67: 61: 56:this article by 47:inline citations 34: 33: 26: 1603: 1602: 1598: 1597: 1596: 1594: 1593: 1592: 1578: 1577: 1568: 1567: 1564: 1559: 1548: 1532: 1516: 1504: 1471: 1455: 1444: 1416: 1400: 1389: 1378: 1360: 1358: 1349: 1348: 1343: 1331: 1313: 1300: 1298: 1294: 1283: 1267: 1251: 1235: 1219: 1207: 1179: 1163: 1147: 1131: 1122: 1121: 1114: 1110: 1105: 1097:&&& 1096: 1087: 1083: 1078: 1071:&&& 1070: 1066: 1062: 1057: 1050: 1045: 1038: 1033: 1025: 1021: 1016: 1013: 1010: 1007: 1004: 1002:&&& 1001: 998: 995: 992: 989: 986: 983: 980: 977: 974: 971: 968: 965: 962: 959: 956: 953: 950: 947: 941: 923: 911: 846:LADSPA plug-in 758:Using specific 756: 751: 750: 747: 744: 741: 738: 735: 732: 724: 721: 720: 717: 714: 711: 708: 705: 702: 692: 691: 688: 685: 682: 679: 676: 673: 670: 667: 661: 660: 657: 654: 651: 648: 645: 642: 635: 632: 631: 628: 625: 622: 619: 616: 613: 609:of the signal: 605:to compute the 602: 598: 594: 514: 505: 497: 489: 478: 477: 474: 471: 468: 465: 458: 455: 454: 451: 448: 445: 442: 431: 428: 427: 424: 421: 418: 415: 408: 404: 401: 357:functions like 337: 336: 333: 330: 327: 324: 317: 313: 263: 249:in the form of 234:domain-specific 215: 147: 142: 140: 120: 118: 114:Initial release 82: 71: 65: 62: 52:Please help to 51: 35: 31: 24: 17: 12: 11: 5: 1601: 1591: 1590: 1576: 1575: 1563: 1562:External links 1560: 1558: 1557: 1541: 1525: 1509: 1501:Soft Computing 1495: 1480: 1464: 1448: 1442: 1425: 1409: 1393: 1387: 1369: 1361:|journal= 1336: 1322: 1306: 1276: 1260: 1244: 1228: 1212: 1200: 1190:(3): 113–131. 1172: 1156: 1140: 1123: 1120: 1119: 1107: 1106: 1104: 1101: 1091: 1090: 1081: 1075: 1074: 1060: 1054: 1053: 1051:f>>>g 1048: 1042: 1041: 1036: 1030: 1029: 944: 922: 919: 910: 907: 904: 903: 900: 896: 895: 892: 888: 887: 884: 880: 879: 876: 872: 871: 868: 864: 863: 860: 856: 855: 852: 848: 847: 844: 840: 839: 836: 832: 831: 828: 824: 823: 820: 816: 815: 812: 808: 807: 804: 800: 799: 796: 792: 791: 788: 784: 783: 780: 755: 752: 731: 701: 666: 641: 612: 607:absolute value 597:the output of 589: 588: 585: 581: 580: 577: 573: 572: 569: 565: 564: 561: 557: 556: 553: 547:used in FAUST 525:block diagrams 513: 510: 464: 441: 414: 400: 397: 385:block diagrams 383:and algebraic 367:runtime system 323: 302: 301: 298: 262: 259: 255:audio plug-ins 225: 224: 213: 209: 208: 203: 197: 196: 193: 187: 186: 169: 163: 162: 157: 153: 152: 149: 148: 138: 136: 134:Stable release 130: 129: 126: 125: 115: 111: 110: 107: 101: 100: 97: 84: 83: 38: 36: 29: 15: 9: 6: 4: 3: 2: 1600: 1589: 1586: 1585: 1583: 1571: 1566: 1565: 1554: 1547: 1542: 1538: 1531: 1526: 1522: 1515: 1510: 1503: 1502: 1496: 1492: 1491: 1486: 1481: 1477: 1470: 1465: 1461: 1454: 1449: 1445: 1439: 1435: 1431: 1426: 1422: 1415: 1410: 1406: 1399: 1394: 1390: 1384: 1377: 1376: 1370: 1366: 1353: 1342: 1337: 1330: 1329: 1323: 1319: 1312: 1307: 1297:on 2012-04-07 1293: 1289: 1282: 1277: 1273: 1266: 1261: 1257: 1250: 1245: 1241: 1234: 1229: 1225: 1218: 1213: 1206: 1201: 1197: 1193: 1189: 1185: 1178: 1173: 1169: 1162: 1157: 1153: 1146: 1141: 1137: 1130: 1125: 1124: 1117: 1112: 1108: 1100: 1082: 1077: 1076: 1061: 1056: 1055: 1049: 1044: 1043: 1037: 1032: 1031: 945: 940: 939: 933: 931: 928: 918: 914: 901: 899:vsti-poly.cpp 898: 897: 893: 891:vsti-mono.cpp 890: 889: 885: 882: 881: 877: 874: 873: 869: 866: 865: 861: 858: 857: 853: 850: 849: 845: 842: 841: 837: 834: 833: 829: 826: 825: 821: 818: 817: 813: 810: 809: 805: 802: 801: 797: 794: 793: 789: 786: 785: 781: 778: 777: 767: 763: 761: 729: 699: 697: 664: 639: 610: 608: 586: 583: 582: 578: 575: 574: 570: 567: 566: 562: 559: 558: 554: 551: 550: 546: 536: 532: 530: 526: 522: 519: 509: 503: 495: 482: 462: 439: 438:for signals: 437: 412: 396: 394: 390: 386: 382: 377: 375: 370: 368: 364: 360: 356: 351: 349: 346: 342: 321: 311: 307: 299: 296: 292: 288: 284: 280: 279: 278: 276: 275:block diagram 272: 268: 258: 256: 252: 248: 245: 241: 238: 235: 231: 222: 214: 210: 207: 204: 202: 198: 194: 192: 188: 185: 181: 177: 173: 170: 168: 164: 161: 158: 154: 150: 137: 135: 131: 127: 116: 112: 108: 106: 102: 98: 96: 92: 80: 77: 69: 59: 55: 49: 48: 42: 37: 28: 27: 22: 1552: 1536: 1520: 1500: 1489: 1475: 1459: 1433: 1420: 1404: 1374: 1352:cite journal 1327: 1317: 1299:. Retrieved 1292:the original 1287: 1271: 1255: 1239: 1223: 1187: 1183: 1167: 1151: 1135: 1111: 1094: 1011:>>> 996:>>> 924: 915: 912: 886:VST plug-in 827:jack-gtk.cpp 779:alsa-gtk.cpp 759: 757: 722: 693: 662: 633: 592: 544: 531:operations. 516:Contrary to 515: 487: 456: 429: 402: 399:Example code 392: 378: 373: 371: 352: 338: 309: 303: 294: 264: 229: 228: 105:Developer(s) 72: 63: 44: 851:max-msp.cpp 835:jack-qt.cpp 795:android.cpp 787:alsa-qt.cpp 529:composition 461:primitive: 310:definitions 269:combines a 58:introducing 1301:2011-10-11 1274:: 369–372. 1170:: 361–364. 1154:: 213–216. 1138:: 199–204. 1103:References 843:ladspa.cpp 339:The FAUST 265:The FAUST 247:algorithms 156:Written in 143:2023-06-14 66:March 2015 41:references 990:^>> 927:Haskell's 811:ca-qt.cpp 496:function 251:libraries 1582:Category 518:Max-like 363:embedded 341:compiler 277:syntax: 261:Overview 1079:f:>g 1058:f<:g 883:vst.cpp 733:process 703:process 696:curried 668:process 643:process 614:process 584:f:>g 576:f<:g 466:process 443:process 416:process 405:process 325:process 320:in C): 314:process 212:Website 201:License 180:Windows 141: ( 119: ( 54:improve 1440:  1385:  1258:: 117. 1020:where 930:Arrows 859:pd.cpp 803:au.cpp 698:form: 348:object 219:.grame 43:, but 1549:(PDF) 1533:(PDF) 1517:(PDF) 1505:(PDF) 1472:(PDF) 1456:(PDF) 1423:: 24. 1417:(PDF) 1401:(PDF) 1379:(PDF) 1344:(PDF) 1332:(PDF) 1314:(PDF) 1295:(PDF) 1284:(PDF) 1268:(PDF) 1252:(PDF) 1236:(PDF) 1220:(PDF) 1208:(PDF) 1180:(PDF) 1164:(PDF) 1148:(PDF) 1132:(PDF) 1039:f***g 1026:Arrow 1022:delay 1008:delay 972:-> 867:q.cpp 230:FAUST 217:faust 172:Linux 89:FAUST 21:Faust 1438:ISBN 1383:ISBN 1365:help 1069:(or 948:loop 409:main 318:main 191:Type 184:Unix 176:OS X 121:2002 117:2002 1192:doi 1046:f:g 1034:f,g 942:f~g 715:0.5 680:0.5 626:abs 603:abs 568:f:g 560:f,g 552:f~g 498:sin 490:sin 355:DSP 345:C++ 331:... 221:.fr 206:GPL 160:C++ 1584:: 1551:. 1535:. 1519:. 1487:. 1474:. 1458:. 1432:. 1419:. 1403:. 1356:: 1354:}} 1350:{{ 1316:. 1286:. 1270:. 1254:. 1238:. 1222:. 1188:37 1186:. 1182:. 1166:. 1150:. 1134:. 1017:)) 999:id 987:)) 951:(( 718:); 253:, 182:, 178:, 174:, 1555:. 1539:. 1523:. 1507:. 1478:. 1462:. 1446:. 1407:. 1391:. 1367:) 1363:( 1346:. 1334:. 1320:. 1304:. 1242:. 1226:. 1210:. 1198:. 1194:: 1088:h 1067:h 1014:g 1005:( 993:f 984:a 981:, 978:b 975:( 969:) 966:b 963:, 960:a 957:( 954:\ 748:; 745:_ 742:~ 739:+ 736:= 725:~ 712:( 709:* 706:= 689:; 686:* 683:: 677:, 674:_ 671:= 658:; 655:_ 652:, 649:_ 646:= 636:, 629:; 623:: 620:+ 617:= 599:+ 595:: 506:@ 494:C 475:; 472:+ 469:= 459:+ 452:; 449:_ 446:= 432:_ 425:; 422:0 419:= 334:; 328:= 145:) 123:) 79:) 73:( 68:) 64:( 50:. 23:.

Index

Faust
references
inline citations
improve
introducing
Learn how and when to remove this message
Original author(s)
Developer(s)
Stable release
C++
Operating system
Linux
OS X
Windows
Unix
Type
License
GPL
faust.grame.fr
domain-specific
purely functional
programming language
signal processing
algorithms
libraries
audio plug-ins
programming model
functional programming
block diagram
signal processing

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.