Введение

Аудио язык программирования FAUST (Functional AUdio STream) — это специализированный чисто функциональный язык программирования, предназначенный для реализации алгоритмов обработки сигналов в виде библиотек, аудиоплагинов или автономных приложений. Программа на FAUST представляет собой процессор сигналов — математическую функцию, которая применяется к входному сигналу и выдает результат.

Создание полных приложений

Используя специальные архитектурные файлы, программа FAUST может быть использована для генерации кода для различных платформ и форматов плагинов. Эти архитектурные файлы выступают в качестве оберток и описывают взаимодействие с хост-аудио и графической системой интерфейса пользователя. По состоянию на 2021 год поддерживается более 30 архитектур, и новые могут быть реализованы любым желающим. + Некоторые архитектурные файлы, доступные для FAUST: alsa gtk.cpp – ALSA приложение + GTK; alsa qt.cpp – ALSA приложение + QT4; android.cpp – Android приложения; au.cpp – Audio Unit плагин; ca qt.cpp – CoreAudio приложение + QT4; ios coreaudio.cpp – iPhone и iPad приложения; jack gtk.cpp – JACK приложение + GTK; jack qt.cpp – JACK приложение + QT4; ladspa.cpp – LADSPA плагин; max msp.cpp – Max MSP плагин; pd.cpp – Puredata плагин; q.cpp – Q language плагин; supercollider.cpp – Supercollider плагин; vst.cpp – VST плагин; vsti mono.cpp – Монофонический VST инструмент плагин; vsti poly.cpp – Полифонический VST инструмент плагин.

Создание блок-схемы

Полезная опция позволяет генерировать блочно-схемное представление программы в виде одного или нескольких графических файлов SVG. Важно понимать разницу между блок-схемой и сгенерированным кодом C++. Как уже отмечалось, ключевая идея заключается не в буквальном преобразовании блок-схемы, а в математической функции, которую она представляет. Современные компиляторы C/C++ также не компилируют программы буквально. Однако из-за сложной семантики C/C++ (обусловленной побочными эффектами, псевдонимами указателей и т.п.) они не могут существенно продвинуться в этом направлении. Это существенное преимущество чисто функциональных языков: они позволяют компиляторам выполнять очень продвинутые оптимизации.