Jump to content

ФАУСТ (язык программирования)

ФАУСТ
Оригинальный автор(ы) Янн Орлари, Доминик Фобер, Стефан Летц
Разработчик(и) GRAME, Национальный центр музыкального творчества
Первоначальный выпуск 2002  ( 2002 )
Стабильная версия
2.60.3 [1] / 14 июня 2023 г. ( 14.06.2023 )
Написано в С++
Операционная система Linux , OS X , Windows , Unix
Тип Функциональный язык программирования для обработки аудиосигналов.
Лицензия лицензия GPL
Веб-сайт Фауст .грамм .fr

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 из некоторых простых программ.

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

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

В отличие от подобных Max, языков визуального программирования, где пользователь выполняет соединения вручную, примитивы FAUST собираются в блок-схемы с помощью набора высокоуровневых операций композиции блок-схем .

Простые примеры составления блок-схем
блок-схемы, Операторы композиции используемые в 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 год , поддерживается более 30 архитектур, а новые может реализовать кто угодно.

Скриншот файла Mixer.dsp (доступен в дистрибутиве FAUST) с использованием архитектуры jack-qt.
Некоторые файлы архитектуры доступны для FAUST
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 не привязан к процессорам сигналов.

Эквивалентность комбинаторов FAUST и 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, например, сохраняется вложенность параллельной композиции, а входы операндов &&& должно точно совпадать.

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

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 463fc9a50eb027d11a5af6c5556968de__1696048980
URL1:https://arc.ask3.ru/arc/aa/46/de/463fc9a50eb027d11a5af6c5556968de.html
Заголовок, (Title) документа по адресу, URL1:
FAUST (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)