Эта статья включает в себя список общих ссылок , но он остается в основном непроверенным, поскольку в нем отсутствуют соответствующие встроенные ссылки . ( Март 2015 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Оригинальный автор (ы) | Янн Орларей, Доминик Фобер, Стефан Летц |
---|---|
Разработчики) | ГРЕЙМ, Национальный музыкальный центр |
изначальный выпуск | 2002 г. |
Стабильный выпуск | 2.20.2 [1] / 14 января 2020 г. |
Написано в | C ++ |
Операционная система | Linux , OS X , Windows , Unix |
Тип | Функциональный язык программирования для обработки аудиосигнала |
Лицензия | GPL |
Интернет сайт | Фауст |
FAUST (Functional AUdio STream) - это предметно-ориентированный чисто функциональный язык программирования для реализации алгоритмов обработки сигналов в форме библиотек , аудиоподключаемых модулей или автономных приложений. Программа FAUST обозначает процессор сигналов: математическую функцию, которая применяется к некоторому входному сигналу и затем выводится.
Обзор [ править ]
Модель программирования FAUST сочетает в себе подход функционального программирования с синтаксисом блок-схемы :
- Подход функционального программирования обеспечивает естественную основу для обработки сигналов . Цифровые сигналы моделируются как дискретные функции времени, процессоры сигналов - как функции второго порядка, которые работают с ними, а операторы композиции блок-схемы FAUST , используемые для объединения процессоров сигналов вместе, как функции третьего порядка и т. Д.
- Блок-схемы, даже если они чисто текстовые, как в FAUST, продвигают модульный подход к обработке сигналов, который соответствует привычкам звукорежиссеров и разработчиков аудио.
Программа FAUST описывает не звук или группу звуков, а сигнальный процессор . Исходный код программы организован как набор определений, по крайней мере, с определением ключевого слова process
(эквивалент main
в C):
process = ... ;
ФАУСТ компилятор сдвигов ФАУСТ код в C ++ объекта , который затем может взаимодействовать с другим кодом C ++ , чтобы получить полную программу.
Сгенерированный код работает на уровне образца. Поэтому он подходит для реализации низкоуровневых функций DSP, таких как рекурсивные фильтры . Код также может быть встроенным . Он самодостаточен и не зависит от какой-либо библиотеки DSP или исполняющей системы . Он имеет очень детерминированное поведение и постоянный размер памяти.
Семантика FAUST должна быть простой и четко определенной. Это позволяет семантически управлять компилятором FAUST . Вместо того, чтобы буквально компилировать программу, она компилирует математическую функцию, которую она обозначает. Это может способствовать повторному использованию компонентов. Более того, наличие доступа к точной семантике программы FAUST может упростить вопросы сохранения.
FAUST - это текстовый язык, но ориентированный на блок-схемы. Он сочетает в себе два подхода: функциональное программирование и алгебраические блок-схемы , которые строятся посредством композиции функций . Для этого FAUST опирается на алгебру блок-схем из пяти операций композиции.
Пример кода [ править ]
Программы FAUST определяют process
функцию, которая работает с входящими данными. Это аналог main
функции в большинстве языков программирования. Ниже приведен пример тишины:
процесс = 0 ;
Во втором примере входной сигнал копируется в выходной. Он включает _
примитив, который обозначает функцию идентичности для сигналов:
process = _ ;
Другой пример суммирует стереосигнал в моно сигнал с помощью +
примитива:
процесс = + ;
Большинство примитивов FAUST аналогичны своим аналогам в C по числам, но превращены в сигналы. Например, примитив FAUST sin
работает с сигналом X, применяя функцию Csin
к каждой выборке X [t]. Все числовые функции C имеют аналог в FAUST. Некоторые примитивы обработки сигналов специфичны для FAUST. Например, оператор задержки @
принимает два входных сигнала: X (сигнал, который должен быть задержан) и D (применяемая задержка), и производит выходной сигнал Y такой, что Y (t) = X (t - D (t) ).
Составление блок-схемы [ править ]
В отличие от языков визуального программирования, подобных Max, где пользователь выполняет соединения вручную, примитивы FAUST собираются в блок-схемы с помощью набора высокоуровневых операций компоновки блок-схем .
f ~ g | Рекурсивная композиция (приоритет 4) |
f, g | Параллельная композиция (приоритет 3) |
f: g | Последовательная композиция (приоритет 2) |
f <: g | Разделенная композиция (приоритет 1) |
f:> g | Состав слияния (приоритет 1) |
Используя оператор последовательной композиции, :
вывод +
может быть направлен на вход abs
для вычисления абсолютного значения сигнала:
процесс = + : абс ;
Вот пример параллельной композиции с использованием ,
оператора, который размещает его левое и правое выражения параллельно. Это аналог стереокабеля.
процесс = _ , _ ;
Эти операторы можно комбинировать произвольно. Следующий код умножает входной сигнал на 0,5:
process = _ , 0.5 : * ;
Вышеизложенное можно переписать в каррированном виде:
process = * ( 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 ++ (из-за побочных эффектов, псевдонимов указателей и т. Д.) Они не могут далеко продвинуться в этом направлении. Это явное преимущество чисто функционального языка: он позволяет компиляторам выполнять очень продвинутую оптимизацию.
Стрелочная семантика [ править ]
Семантика Faust почти такая же, как у класса типов Arrows в Haskell . Однако класс типа 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, например, сохраняется вложение параллельной композиции, и входные данные операндов &&&
должны точно совпадать.
Ссылки [ править ]
- ^ Релизы · grame-cncm / faust · GitHub
- Мишон, Ромен; Смит, Юлий О. 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) . Труды французского конгресса d'Acoustique .[ постоянная мертвая ссылка ]
- Летц, Стефан; Орларей, Янн; Фобер, Доминик (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) 07.04.2012 . Проверено 11 октября 2011 .
- Орларей, Янн; Летц, Стефан; Фобер, Доминик (2009). «Добавление автоматического распараллеливания в Faust» (PDF) . Материалы конференции Linux Audio (LAC-2009) .[ постоянная мертвая ссылка ]
- Жувело, Пьер; Орларей, Янн (2009). «Семантика для многоскоростного Фауста». Технические отчеты Центра исследований и информатики шахт ParisTech (PDF) .[ постоянная мертвая ссылка ]
- Орларей, Янн; Фобер, Доминик; Letz, Стефан (2009). «Распараллеливание аудио приложений с помощью Faust» (PDF) . Цитировать журнал требует
|journal=
( помощь ) - Орларей, Янн; Фобер, Доминик; Letz, Стефан (2009). «Фауст: эффективный функциональный подход к программированию DSP». Новые компьютерные парадигмы для компьютерной музыки (PDF) . Издание Delatour. ISBN 978-2-7521-0054-2.[ постоянная мертвая ссылка ]
- Орларей, Янн; Летц, Стефан; Фобер, Доминик (2008). "Многоядерные технологии в Джеке и Фаусте" (PDF) . Материалы Международной компьютерной музыкальной конференции 2010 (ICMC-2008) .[ постоянная мертвая ссылка ]
- Граф, Альберт (2007). «Связь чистых данных с Фаустом» (PDF) . Труды 5-й Международной конференции Linux Audio (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) .[ постоянная мертвая ссылка ]
Внешние ссылки [ править ]
Викискладе есть медиафайлы по теме FAUST (язык программирования) . |
- Официальный сайт , онлайн-компилятор, поддержка, документация, новости и т. Д.