Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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 собираются в блок-схемы с помощью набора высокоуровневых операций компоновки блок-схем .

Простые примеры построения блок-схемы

Используя оператор последовательной композиции, :вывод +может быть направлен на вход absдля вычисления абсолютного значения сигнала:

процесс  =  +  :  абс ;

Вот пример параллельной композиции с использованием ,оператора, который размещает его левое и правое выражения параллельно. Это аналог стереокабеля.

процесс  =  _ , _ ;

Эти операторы можно комбинировать произвольно. Следующий код умножает входной сигнал на 0,5:

process  =  _ , 0.5  :  * ;

Вышеизложенное можно переписать в каррированном виде:

process  =  * ( 0.5 );

Оператор рекурсивной композиции ~может использоваться для создания блок-схем с циклами (которые включают неявную задержку на одну выборку). Вот пример интегратора, который принимает входной сигнал X и вычисляет выходной сигнал Y такой, что Y (t) = X (t) + Y (t − 1):

процесс  =  +  ~  _ ;

Создание полных приложений [ править ]

Используя определенные файлы архитектуры , программу FAUST можно использовать для создания кода для различных платформ и форматов подключаемых модулей. Эти файлы архитектуры действуют как оболочки и описывают взаимодействие со звуком хоста и системой графического интерфейса. По состоянию на 2015 год поддерживается более 10 архитектур, новые могут быть реализованы кем угодно.

Снимок экрана mixer.dsp (доступен в дистрибутиве FAUST) с использованием архитектуры jack-qt

Создание блок-схем [ править ]

Полезная опция позволяет генерировать представление программы в виде блок-схемы в виде одного или нескольких графических файлов SVG.

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

Стрелочная семантика [ править ]

Семантика Faust почти такая же, как у класса типов Arrows в Haskell . Однако класс типа Arrow не привязан к процессорам сигналов.

Комбинаторы Arrow более строгие, чем их аналоги в FAUST, например, сохраняется вложение параллельной композиции, и входные данные операндов &&&должны точно совпадать.

Ссылки [ править ]

  1. ^ Релизы · 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) .[ постоянная мертвая ссылка ]

Внешние ссылки [ править ]

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