FAUST (язык программирования) - FAUST (programming language)
Эта статья включает в себя список общих Рекомендации, но он остается в основном непроверенным, потому что ему не хватает соответствующих встроенные цитаты.Март 2015 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Оригинальный автор (ы) | Янн Орларей, Доминик Фобер, Стефан Летц |
---|---|
Разработчики) | ГРЕЙМ, Национальный музыкальный центр |
изначальный выпуск | 2002 |
Стабильный выпуск | 2.20.2[1] / 14 января 2020 г. |
Написано в | C ++ |
Операционная система | Linux, OS X, Windows, Unix |
Тип | Функциональный язык программирования для обработки аудиосигнала |
Лицензия | GPL |
Интернет сайт | фауст |
FAUST (Функциональный AUdio STream) - это специфичный для домена чисто функциональный язык программирования для реализации обработка сигнала алгоритмы в виде библиотеки, аудио плагины, или автономные приложения. Программа FAUST обозначает процессор сигналов: математическую функцию, которая применяется к некоторому входному сигналу и затем выводится.
Обзор
ФАУСТ модель программирования объединяет функциональное программирование подход с блок-схема синтаксис:
- Подход функционального программирования обеспечивает естественную основу для обработка сигнала. Цифровые сигналы моделируются как дискретные функции времени, сигнальные процессоры как функции второго порядка которые работают с ними, и блок-схема FAUST операторы композиции, используются для объединения сигнальных процессоров вместе, как функции третьего порядка и т. д.
- Блок-схемы, даже если они чисто текстовые, как в FAUST, продвигают модульный подход к обработке сигналов, который соответствует привычкам звукорежиссеров и разработчиков аудио.
Программа FAUST описывает не звук или группу звуков, а сигнальный процессор. Исходный код программы организован как набор определения хотя бы с определением ключевого слова обработать
(эквивалент основной
в C):
обработать = ...;
ФАУСТ компилятор переводит код FAUST в C ++ объект, который затем может взаимодействовать с другим кодом C ++ для создания полной программы.
Сгенерированный код работает на уровне образца. Поэтому он подходит для реализации низкоуровневого DSP функции как рекурсивные фильтры. Код также может быть встроенный. Он самодостаточен и не зависит от какой-либо библиотеки DSP или система времени выполнения. Он имеет очень детерминированное поведение и постоянный размер памяти.
Семантика FAUST должна быть простой и четко определенной. Это позволяет компилятору FAUST быть семантически управляемый. Вместо того, чтобы буквально компилировать программу, она компилирует математическую функцию, которую она обозначает. Это может способствовать повторному использованию компонентов. Более того, наличие доступа к точной семантике программы FAUST может упростить вопросы сохранения.
FAUST - это текстовый язык, но ориентированный на блок-схемы. Он сочетает в себе два подхода: функциональное программирование и алгебраический блок-схемы, которые строятся через функциональная композиция. Для этого FAUST полагается на алгебра блок-схем из пяти операций композиции.
Пример кода
Программы FAUST определяют обработать
функция, которая работает с входящими данными. Это аналогично основной
работают на большинстве языков программирования. Ниже приведен пример тишины:
обработать = 0;
Во втором примере входной сигнал копируется в выходной. Это включает _
примитив, обозначающий функция идентичности для сигналов:
обработать = _;
Другой пример суммирует стереосигнал в моно сигнал с помощью +
примитивный:
обработать = +;
Большинство примитивов FAUST аналогичны своим аналогам в C по числам, но превращены в сигналы. Например, примитив FAUST грех
работает с сигналом X, применяя C функция грех
каждому образцу X [t]. Все числовые функции языка Си имеют аналог в FAUST. обработка сигнала примитивы специфичны для FAUST. Например, оператор задержки @
принимает два входных сигнала: X (сигнал, который должен быть задержан) и D (применяемая задержка), и выдает выходной сигнал Y такой, что Y (t) = X (t - D (t)).
Составление блок-схемы
Вопреки Макс-лайк языки визуального программирования там, где пользователь выполняет подключения вручную, примитивы FAUST собраны в блок-схемы с помощью набора блок-схемы высокого уровня сочинение операции.
f ~ g | Рекурсивная композиция (приоритет 4) |
f, g | Параллельная композиция (приоритет 3) |
f: g | Последовательная композиция (приоритет 2) |
f <: g | Разделенная композиция (приоритет 1) |
f:> g | Состав слияния (приоритет 1) |
Использование оператора последовательной композиции :
выход +
может быть направлен на вход пресс
вычислить абсолютная величина сигнала:
обработать = + : пресс;
Вот пример параллельной композиции с использованием ,
оператор, который размещает его левое и правое выражения параллельно. Это аналог стереокабеля.
обработать = _,_;
Эти операторы можно комбинировать произвольно. Следующий код умножает входной сигнал на 0,5:
обработать = _,0.5 : *;
Вышесказанное может быть переписано на карри форма:
обработать = *(0.5);
Оператор рекурсивной композиции ~
может использоваться для создания блок-схем с циклами (которые включают неявную задержку на один отсчет). Вот пример интегратора, который принимает входной сигнал X и вычисляет выходной сигнал Y такой, что Y (t) = X (t) + Y (t − 1):
обработать = + ~ _;
Создание полных приложений
Использование конкретных файлы архитектуры, программу FAUST можно использовать для создания кода для различных платформ и форматов подключаемых модулей. Эти файлы архитектуры действуют как оболочки и описывают взаимодействие со звуком хоста и системой графического интерфейса. По состоянию на 2015 год[Обновить], поддерживается более 10 архитектур, новые могут быть реализованы кем угодно.
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 |
макс-msp.cpp | Подключаемый модуль Max MSP |
pd.cpp | Плагин Puredata |
q.cpp | Плагин языка Q |
supercollider.cpp | Плагин суперколлайдера |
vst.cpp | Плагин VST |
vsti-mono.cpp | Плагин Monophonic VST Instrument |
vsti-poly.cpp | Плагин Polyphonic VST Instrument |
Создание блок-схем
Полезная опция позволяет генерировать представление программы в виде блок-схемы в виде одного или нескольких графических файлов SVG.
Полезно отметить разницу между блок-схемой и сгенерированным кодом C ++. Как уже говорилось, ключевая идея здесь не в буквальном составлении блок-схемы, а в математической функции, которую она обозначает. Современные компиляторы C / C ++ также не компилируют программы буквально. Но из-за сложной семантики C / C ++ (из-за побочных эффектов, сглаживания указателей и т. Д.) Они не могут далеко продвинуться в этом направлении. Это явное преимущество чисто функционального языка: он позволяет компиляторам выполнять очень продвинутую оптимизацию.
Стрелочная семантика
Семантика Фауста почти такая же, как у Haskell's Стрелки type class, однако класс типа Arrow не привязан к сигнальным процессорам.
f ~ g | петля (((а,б) -> (б,а)) ^>> ж >>> я бы &&& (задержка>>>грамм)) где задержка это не метод Стрелка класс типа, но специфичен для стрелок обработки сигналов |
f, g | б *** г |
f: g | f >>> g |
f <: g | е >> ^ ч >>> г с соответствующей функцией час (или же &&& в особых случаях) |
f:> g | е >> ^ ч >>> г с соответствующей функцией час |
Комбинаторы Arrow более строгие, чем их аналоги в FAUST, например, вложение параллельной композиции сохраняется, а входные данные операндов &&&
должно точно совпадать.
Рекомендации
- Мишон, Ромен; Смит, Юлий О. III (2011). «Фауст-СТК: набор линейных и нелинейных физических моделей для языка программирования Фауст» (PDF). Материалы 11-й Междунар. Конференция по цифровым звуковым эффектам (DAFx-11): 199–204.
- Фобер, Доминик; Орларей, Янн; Letz, Стефан (2011). «Дизайн Faust Architectures и поддержка OSC» (PDF). Материалы 11-й Междунар. Конференция по цифровым звуковым эффектам (DAFx-11): 213–216.
- Смит, Юлий О. III; Мишон, Ромен (2011). "Нелинейные лестничные фильтры Allpass в Faust" (PDF). Материалы 11-й Междунар. Конференция по цифровым звуковым эффектам (DAFx-11): 361–364.
- Жувело, Пьер; Орларей, Янн (2011). «Зависимые векторные типы для структурирования данных в многоскоростном Faust» (PDF). Компьютерные языки, системы и структуры.[постоянная мертвая ссылка ]
- Смит III, Джулиус О. (2011). "Обработка аудиосигнала в Фаусте" (PDF).
- Орларей, Янн; Летц, Стефан; Фобер, Доминик (2010). «Автоматическое распараллеливание аудиоприложений с помощью Faust» (PDF). Труды Французского конгресса д'акустик.[постоянная мертвая ссылка ]
- Летц, Стефан; Орларей, Янн; Фобер, Доминик (2010). "Планировщик кражи работы для автоматического распараллеливания в Faust" (PDF). Материалы конференции Linux Audio (LAC-2010).
- Граф, Альберт (2010). «Расширение переписывания терминов для языка программирования Faust» (PDF). Материалы 8-й Международной аудиоконференции Linux (LAC-2010): 117.
- Бартелеми, Жером; Бонарди, Ален; Орларей, Янн; Лемутон, Серж; Чаварелла, Рафаэле; Баркати, Карим (2010). «Первые шаги к органологии виртуальных инструментов в компьютерной музыке» (PDF). Материалы Международной компьютерной музыкальной конференции 2010 (ICMA-2010): 369–372.[постоянная мертвая ссылка ]
- Жувело, Пьер; Орларей, Янн (2010). "Депандантные векторные типы для многоскоростного Фауста" (PDF). Материалы 7-й конференции по звуковому и музыкальному компьютингу (SMC-2010): 345–352. Архивировано из оригинал (PDF) на 2012-04-07. Получено 2011-10-11.
- Орларей, Янн; Летц, Стефан; Фобер, Доминик (2009). "Добавление автоматического распараллеливания к Faust" (PDF). Материалы конференции Linux Audio (LAC-2009).[постоянная мертвая ссылка ]
- Жувело, Пьер; Орларей, Янн (2009). «Семантика для многоскоростного Фауста». Технические отчеты Center de Recherche en Informatique de MINES ParisTech (PDF).[постоянная мертвая ссылка ]
- Орларей, Янн; Фобер, Доминик; Letz, Стефан (2009). «Распараллеливание аудиоприложений с помощью Faust» (PDF). Цитировать журнал требует
| журнал =
(Помогите) - Орларей, Янн; Фобер, Доминик; Letz, Стефан (2009). «Фауст: эффективный функциональный подход к программированию DSP». Новые компьютерные парадигмы для компьютерной музыки (PDF). Издание Delatour. ISBN 978-2-7521-0054-2.[постоянная мертвая ссылка ]
- Орларей, Янн; Летц, Стефан; Фобер, Доминик (2008). «Многоядерные технологии в Джеке и Фаусте» (PDF). Материалы Международной компьютерной музыкальной конференции 2010 (ICMC-2008).[постоянная мертвая ссылка ]
- Граф, Альберт (2007). «Связь Чистых данных с Фаустом» (PDF). Труды 5-й Международной аудиоконференции Linux (LAC2007): 24.
- Смит III, Джулиус О. (2007). «Приложение К. Цифровая фильтрация в Faust и PD». Введение в цифровые фильтры: со звуковыми приложениями. Издательство W3K. С. 417- ?. ISBN 978-0-9745607-1-7.
- Греф, Альберт; Керстен, Стефан; Орларей, Янн (2006). «Программирование DSP с Faust, Q и SuperCollider» (PDF). Материалы 4-й Международной аудиоконференции Linux (LAC2006).
- Траусмут, Роберт; Дусек, Кристиан; Орларей, Янн (2006). «Использование Faust для программирования FPGA» (PDF). Материалы 9-й Междунар. Конференция по цифровым звуковым эффектам (DAFx-09).
- Орларей, Янн; Фобер, Доминик; Letz, Stephone (2005). «Демонстрация языка обработки сигналов Faust». Материалы Международной компьютерной музыкальной конференции. 2005. Ассоциация компьютерной музыки. п. 286.
- Орларей, Янн; Фобер, Доминик; Letz, Стефан (2004). «Синтаксические и семантические аспекты Фауста». Мягкие вычисления (PDF).[постоянная мертвая ссылка ]
- Скарингелла, Николас; Орларей, Янн; Фобер, Доминик (2003). «Автоматическая векторизация в Фаусте» (PDF). Journée de l'Informatique Musicale (JIM-2003).[постоянная мертвая ссылка ]
- Орларей, Янн; Фобер, Доминик; Letz, Стефан (2002). «Алгебраический подход к построению блок-схем» (PDF). Journée de l'Informatique Musicale (JIM-2002).[постоянная мертвая ссылка ]
- Орларей, Янн; Фобер, Доминик; Letz, Стефан (2002). «Алгебра для языков блок-схем» (PDF). Материалы Международной компьютерной музыкальной конференции (ICMA-2002).[постоянная мертвая ссылка ]
внешняя ссылка
- Официальный веб-сайт, онлайн-компилятор, поддержка, документация, новости и т. д.