ФАУСТ (язык программирования)
![]() | Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( Март 2015 г. ) |
Оригинальный автор(ы) | Янн Орлари, Доминик Фобер, Стефан Летц |
---|---|
Разработчик(и) | GRAME, Национальный центр музыкального творчества |
Первоначальный выпуск | 2002 |
Стабильная версия | 2.60.3 [1]
/ 14 июня 2023 г. |
Написано в | С++ |
Операционная система | Linux , OS X , Windows , Unix |
Тип | Функциональный язык программирования для обработки аудиосигналов. |
Лицензия | лицензия GPL |
Веб-сайт | Фауст |
FAUST (Functional AUdio STream) — это для конкретной предметной области, чисто функциональный язык программирования предназначенный для реализации обработки сигналов алгоритмов в виде библиотек , аудиоплагинов или автономных приложений. Программа FAUST обозначает процессор сигналов: математическую функцию, которая применяется к некоторому входному сигналу и затем выводится.
Обзор [ править ]
FAUST Модель программирования сочетает в себе подход функционального программирования с синтаксисом блок-схемы :
- Подход функционального программирования обеспечивает естественную основу для обработки сигналов . Цифровые сигналы моделируются как дискретные функции времени, процессоры сигналов — как функции второго порядка блок-схем FAUST , которые над ними работают, а операторы композиции , используемые для объединения процессоров сигналов, — как функции третьего порядка и т. д.
- Блок-схемы, даже если они чисто текстовые, как в FAUST, способствуют модульному подходу к обработке сигналов, который соответствует привычкам звукорежиссеров и разработчиков звука.
Программа FAUST описывает не звук или группу звуков, а процессор сигналов . Исходный код программы организован как набор определений , по крайней мере, с определением ключевого слова. process
(эквивалент main
в С):
process = ...;
FAUST Компилятор преобразует код FAUST в C++ объект , который затем может взаимодействовать с другим кодом C++ для создания полноценной программы.
Сгенерированный код работает на уровне образца. Поэтому он подходит для реализации низкоуровневых DSP, функций таких как рекурсивные фильтры . Код также может быть встроен . Он автономен и не зависит от какой-либо библиотеки DSP или системы выполнения . Он имеет очень детерминированное поведение и постоянный размер памяти.
Семантика FAUST призвана быть простой и четко определенной. Это позволяет компилятору FAUST управляться семантически . Вместо буквальной компиляции программы она компилирует математическую функцию, которую она обозначает. Это может способствовать повторному использованию компонентов. Более того, доступ к точной семантике программы FAUST может упростить вопросы сохранения.
FAUST — текстовый язык, ориентированный на блок-схемы. Он сочетает в себе два подхода: функциональное программирование и алгебраические блок-схемы , которые строятся посредством композиции функций . Для этого FAUST использует алгебру блок-схем из пяти операций композиции.
Пример кода [ править ]
Программы FAUST определяют process
функция, которая работает с входящими данными. Это аналогично main
функционируют в большинстве языков программирования. Ниже приведен пример, вызывающий тишину:
process = 0;
Второй пример копирует входной сигнал на выход. Это предполагает _
примитив, обозначающий функцию идентичности сигналов:
process = _;
Другой пример суммирует стереосигнал в моносигнал, используя +
примитивный:
process = +;

Большинство примитивов FAUST аналогичны своим аналогам в C по числам, но перенесены в сигналы. Например, примитив FAUST sin
работает с сигналом X, применяя C функцию sin
к каждому образцу X[t]. Все числовые функции C имеют аналог в FAUST.
Некоторые примитивы обработки сигналов специфичны для FAUST. Например, оператор задержки @
принимает два входных сигнала: X (сигнал, который нужно задержать) и D (задержка, которую нужно применить), и выдает выходной сигнал Y такой, что Y(t) = X(t - D(t)).
Состав блок-схемы [ править ]
В отличие от подобных Max, языков визуального программирования, где пользователь выполняет соединения вручную, примитивы FAUST собираются в блок-схемы с помощью набора высокоуровневых операций композиции блок-схем .

х~г | Рекурсивная композиция (приоритет 4) |
ж, г | Параллельная композиция (приоритет 3) |
е:г | Последовательная композиция (приоритет 2) |
е<:г | Разделенная композиция (приоритет 1) |
е:>г | Объединение композиции (приоритет 1) |
Использование оператора последовательной композиции :
выход +
можно направить на вход abs
для вычисления абсолютного значения сигнала:
process = + : abs;
Вот пример параллельной композиции с использованием ,
оператор, который параллельно упорядочивает левое и правое выражения. Это аналог стереокабеля.
process = _,_;
Эти операторы можно произвольно комбинировать. Следующий код умножает входной сигнал на 0,5:
process = _,0.5 : *;
Вышеуказанное можно переписать в каррированной форме:
process = *(0.5);
Оператор рекурсивной композиции ~
может использоваться для создания блок-схем с циклами (которые включают неявную задержку на одну выборку). Вот пример интегратора, который принимает входной сигнал X и вычисляет выходной сигнал Y такой, что Y(t) = X(t) + Y(t−1):
process = + ~ _;
Создание полноценных приложений [ править ]
Используя файлы конкретной архитектуры , программу FAUST можно использовать для создания кода для различных платформ и форматов подключаемых модулей. Эти файлы архитектуры действуют как оболочки и описывают взаимодействие с аудиосистемой хоста и системой графического интерфейса. По состоянию на 2021 год [update], поддерживается более 30 архитектур, а новые может реализовать кто угодно.

alsa-gtk.cpp | Приложение ALSA + GTK |
alsa-qt.cpp | Приложение ALSA + QT4 |
android.cpp | Android-приложения |
au.cpp | Плагин аудиоустройства |
ca-qt.cpp | Приложение CoreAudio + QT4 |
ios-coreaudio.cpp | приложения для iPhone и iPad |
jack-gtk.cpp | Приложение JACK + GTK |
jack-qt.cpp | Приложение JACK + QT4 |
ladspa.cpp | Плагин LADSPA |
макс-msp.cpp | Плагин Max MSP |
pd.cpp | Плагин Puredata |
q.cpp | Плагин языка Q |
суперколлайдер.cpp | Плагин суперколлайдера |
vst.cpp | VST-плагин |
vsti-mono.cpp | Плагин Monophonic VST Instrument |
vsti-poly.cpp | Плагин Polyphonic VST Instrument |
Создание блок-схем [ править ]
Полезная опция позволяет создать представление блок-схемы программы в виде одного или нескольких графических файлов SVG.
Полезно отметить разницу между блок-схемой и сгенерированным кодом C++. Как уже говорилось, ключевая идея здесь заключается не в буквальном составлении блок-схемы, а в математической функции, которую она обозначает. Современные компиляторы C/C++ также не компилируют программы буквально. Но из-за сложной семантики C/C++ (из-за побочных эффектов, псевдонимов указателей и т. д.) они не могут продвинуться далеко в этом направлении. Это явное преимущество чисто функционального языка: он позволяет компиляторам выполнять очень сложную оптимизацию.
Семантика, подобная стрелкам [ править ]
Семантика Faust почти такая же, как и у в Haskell класса типов Arrows . Однако класс типа Arrow не привязан к процессорам сигналов.
f~g |
loop ((\(a,b) -> (b,a)) ^>> f >>> id &&& (delay>>>g)) где delay не является методом Arrow класс типа, но специфичен для стрелок обработки сигналов
|
f,g |
f***g
|
f:g |
f>>>g
|
f<:g |
f>>^h>>>g с соответствующей функцией h (или &&& в особых случаях)
|
f:>g |
f>>^h>>>g с соответствующей функцией h
|
Комбинаторы Arrow более ограничительны, чем их аналоги FAUST, например, сохраняется вложенность параллельной композиции, а входы операндов &&&
должно точно совпадать.
Ссылки [ править ]
- Мишон, Ромен; Смит, Юлиус О. III (2011). «Faust-STK: набор линейных и нелинейных физических моделей для языка программирования Faust» (PDF) . Материалы 11-го Межд. Конференция по цифровым аудиоэффектам (DAFx-11) : 199–204.
- Фобер, Доминик; Орлари, Янн; Летц, Стефан (2011). «Проектирование архитектуры Faust и поддержка OSC» (PDF) . Материалы 11-го Межд. Конференция по цифровым аудиоэффектам (DAFx-11) : 213–216.
- Смит, Юлиус О. III; Мишон, Ромен (2011). «Нелинейные лестничные фильтры Allpass в Faust» (PDF) . Материалы 11-го Межд. Конференция по цифровым аудиоэффектам (DAFx-11) : 361–364.
- Жувело, Пьер; Орлари, Янн (2011). «Типы зависимых векторов для структурирования данных в многоскоростном Faust» (PDF) . Компьютерные языки, системы и структуры . 37 (3): 113–131. дои : 10.1016/j.cl.2011.03.001 . [ постоянная мертвая ссылка ]
- Смит III, Юлиус О. (2011). «Обработка аудиосигнала в Faust» (PDF) .
- Орлари, Янн; Летц, Стефан; Фобер, Доминик (2010). «Автоматическое распараллеливание аудиоприложений с помощью Faust» (PDF) . Материалы Французского акустического конгресса . [ постоянная мертвая ссылка ]
- Летц, Стефан; Орлари, Янн; Фобер, Доминик (2010). «Планировщик работы для автоматического распараллеливания в Faust» (PDF) . Материалы конференции Linux Audio (LAC-2010) .
- Греф, Альберт (2010). «Расширение переписывания терминов для языка программирования Faust» (PDF) . Материалы 8-й Международной конференции Linux Audio (LAC-2010) : 117.
- Бартелеми, Жером; Бонарди, Ален; Орлари, Янн; Лемутон, Серж; Чаварелла, Рафаэле; Баркати, Карим (2010). «Первые шаги к органологии виртуальных инструментов в компьютерной музыке» (PDF) . Материалы Международной компьютерной музыкальной конференции 2010 г. (ICMA-2010) : 369–372. [ постоянная мертвая ссылка ]
- Жувело, Пьер; Орлари, Янн (2010). «Типы зависимых векторов для многоскоростного Фауста» (PDF) . Материалы 7-й конференции по звуковым и музыкальным вычислениям (SMC-2010) : 345–352. Архивировано из оригинала (PDF) 7 апреля 2012 г. Проверено 11 октября 2011 г.
- Орлари, Янн; Летц, Стефан; Фобер, Доминик (2009). «Добавление автоматического распараллеливания в Faust» (PDF) . Материалы конференции Linux Audio (LAC-2009) . [ постоянная мертвая ссылка ]
- Жувело, Пьер; Орлари, Янн (2009). «Семантика многоскоростного Фауста». Технические отчеты Центра компьютерных исследований MINES ParisTech (PDF) . [ постоянная мертвая ссылка ]
- Орлари, Янн; Фобер, Доминик; Летц, Стефан (2009). «Распараллеливание аудиоприложений с помощью Faust» (PDF) .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - Орлари, Янн; Фобер, Доминик; Летц, Стефан (2009). «Фауст: эффективный функциональный подход к программированию DSP». Новые вычислительные парадигмы для компьютерной музыки (PDF) . Издание Делатур. ISBN 978-2-7521-0054-2 . [ постоянная мертвая ссылка ]
- Орлари, Янн; Летц, Стефан; Фобер, Доминик (2008). «Многоядерные технологии в Джеке и Фаусте» (PDF) . Материалы Международной компьютерной музыкальной конференции 2010 (ICMC-2008) . [ постоянная мертвая ссылка ]
- Греф, Альберт (2007). «Взаимодействие чистых данных с Фаустом» (PDF) . Материалы 5-й Международной конференции Linux Audio (LAC2007) : 24.
- Смит III, Юлиус О. (2007). «Приложение К. Цифровая фильтрация в Фаусте и ФД» . Введение в цифровые фильтры: с аудиоприложениями . Издательство W3K. стр. 417–?. ISBN 978-0-9745607-1-7 .
- Греф, Альберт; Керстен, Стефан; Орлари, Янн (2006). «Программирование DSP с помощью Faust, Q и SuperCollider» (PDF) . Материалы 4-й Международной конференции Linux Audio (LAC2006) .
- Траусмут, Роберт; Душек, Кристиан; Орларей, Янн (2006). «Использование Faust для программирования FPGA» (PDF) . Материалы 9-го Межд. Конференция по цифровым аудиоэффектам (DAFx-09) .
- Орлари, Янн; Фобер, Доминик; Летц, Стефона (2005). «Демонстрация языка обработки сигналов Faust» . Материалы Международной компьютерной музыкальной конференции . Том. 2005. Ассоциация компьютерной музыки. п. 286.
- Орлари, Янн; Фобер, Доминик; Летц, Стефан (2004). «Синтаксические и семантические аспекты Фауста». Программные вычисления (PDF) . [ постоянная мертвая ссылка ]
- Скарингелла, Николас; Орлари, Янн; Фобер, Доминик (2003). «Автоматическая векторизация в Фаусте» (PDF) . День музыкального компьютера (JIM-2003) . [ постоянная мертвая ссылка ]
- Орлари, Янн; Фобер, Доминик; Летц, Стефан (2002). «Алгебраический подход к построению блок-схем» (PDF) . День музыкального компьютера (JIM-2002) . [ постоянная мертвая ссылка ]
- Орларей, Янн; Фобер, Доминик; Летц, Стефан (2002). «Алгебра для языков блок-схем» (PDF) . Материалы Международной компьютерной музыкальной конференции (ICMA-2002) . [ постоянная мертвая ссылка ]
Внешние ссылки [ править ]

- Официальный сайт , онлайн-компилятор, поддержка, документация, новости и т. д.