فاوست (لغة برمجة)

FAUST ( تدفق الصوت الوظيفي ) هي لغة برمجة مرئية نصية وظيفية بحتة ، متخصصة في مجال معين ، تُستخدم لتنفيذ خوارزميات معالجة الإشارات الصوتية على شكل مكتبات أو إضافات صوتية أو تطبيقات مستقلة. يُمثل برنامج FAUST معالج إشارات: دالة رياضية تُطبق على إشارة مُدخلة ثم تُخرج الإشارة. وهي برمجيات مجانية ومفتوحة المصدر، مُرخصة بموجب رخصة جنو العمومية (GPL).

ملخص

يجمع نموذج برمجة FAUST بين منهج البرمجة الوظيفية وبنية مخطط الكتلة :

  • يوفر أسلوب البرمجة الوظيفية إطارًا طبيعيًا لمعالجة الإشارات . يتم نمذجة الإشارات الرقمية كدوال منفصلة للزمن، ومعالجات الإشارات كدوال من الدرجة الثانية تعمل عليها، وعوامل تركيب مخططات الكتل في FAUST ، المستخدمة لدمج معالجات الإشارات معًا، كدوال من الدرجة الثالثة، وما إلى ذلك.
  • تُشجع المخططات الكتلية، حتى وإن كانت نصية بحتة كما في FAUST، على اتباع نهج معياري في معالجة الإشارات يتوافق مع ممارسات مهندسي الصوت ومطوري الصوت. لا يصف برنامج FAUST صوتًا أو مجموعة أصوات، بل يصف معالج إشارات . يُنظم مصدر البرنامج على شكل مجموعة من التعريفات ، تتضمن على الأقل تعريف الكلمة المفتاحية process(المكافئة لـ mainفي لغة C):
العملية = ... ؛

يقوم مترجم FAUST بترجمة كود FAUST إلى كائن C++ ، والذي قد يتفاعل بعد ذلك مع كود C++ آخر لإنتاج برنامج كامل.

يمكنه أيضًا تجميع (ترجمة) مواصفات معالجة الإشارات الرقمية FAUST إلى: C و C++ و C# و Cmajor و Codebox ( Max ) و D والمترجم و Java و JSFX ( REAPER ) و LLVM IR و Julia و Rust و WebAssembly (Wast/Wasm).

يعمل الكود المُولّد على مستوى العينة، مما يجعله مناسبًا لتنفيذ وظائف معالجة الإشارات الرقمية منخفضة المستوى ، مثل المرشحات التكرارية . كما يمكن تضمين الكود في الأنظمة الأخرى. وهو مكتفٍ ذاتيًا ولا يعتمد على أي مكتبة لمعالجة الإشارات الرقمية أو نظام تشغيل . يتميز بسلوك حتمي للغاية وحجم ذاكرة ثابت.

تتميز دلالات لغة FAUST بالبساطة والوضوح، مما يسمح لمترجم FAUST بالعمل وفقًا للدلالات . فبدلاً من ترجمة البرنامج حرفيًا، يقوم المترجم بترجمة الدالة الرياضية التي يمثلها. وهذا بدوره يُعزز إعادة استخدام المكونات. علاوة على ذلك، فإن الوصول إلى الدلالات الدقيقة لبرنامج FAUST يُسهّل عملية حفظ البيانات.

فاوست هي لغة نصية ولكنها موجهة نحو مخططات الكتل. تجمع بين منهجين: البرمجة الوظيفية ومخططات الكتل الجبرية ، التي تُبنى عبر تركيب الدوال . ولذلك، تعتمد فاوست على جبر مخططات الكتل المكون من خمس عمليات تركيب.

مثال على التعليمات البرمجية

تُعرّف برامج FAUST processدالةً تعمل على البيانات الواردة. وهذا يُشابه الدالة mainفي معظم لغات البرمجة. فيما يلي مثال يُنتج صمتًا:

العملية = 0 ؛

ينسخ المثال الثاني إشارة الإدخال إلى إشارة الإخراج. ويتضمن ذلك الدالة _الأساسية التي تدل على دالة التطابق للإشارات:

العملية = _ ;

مثال آخر هو جمع إشارة ستيريو في إشارة أحادية باستخدام العملية +الأساسية:

العملية = + ;
مخططات الكتل التي أنشأها برنامج Faust من بعض البرامج البسيطة

معظم الدوال الأساسية في FAUST تُشابه نظيراتها في لغة C عند التعامل مع الأرقام، ولكنها مُطبقة على الإشارات. على سبيل المثال، sinتعمل الدالة الأساسية في FAUST على الإشارة X بتطبيق دالة C علىsin كل عينة X[t]. جميع الدوال العددية في C لها نظير في FAUST. بعض الدوال الأساسية لمعالجة الإشارات خاصة بـ FAUST. على سبيل المثال، @يأخذ مُعامل التأخير إشارتين مُدخلتين: X (الإشارة المراد تأخيرها) و D (التأخير المراد تطبيقه)، ويُنتج إشارة مُخرجة Y بحيث Y(t) = X(t − D(t)).

تكوين مخطط الكتلة

على عكس لغات البرمجة المرئية الشبيهة بـ Max حيث يقوم المستخدم بإجراء الاتصالات اليدوية، يتم تجميع العناصر الأولية في FAUST في مخططات كتلية باستخدام مجموعة من عمليات تكوين المخططات الكتلية عالية المستوى .

أمثلة بسيطة لتكوين المخططات الهيكلية
عوامل تكوين المخطط الكتلي المستخدمة في FAUST
f~gالتركيب التكراري (الأولوية 4)
و، زالتركيب المتوازي (الأسبقية 3)
f:gالتركيب التسلسلي (الأسبقية 2)
f<:gالتأليف المنفصل (الأولوية 1)
f:>gدمج التركيب (الأولوية 1)

باستخدام عامل التركيب التسلسلي، يمكن توجيه :مخرجات +إلى مدخلات absلحساب القيمة المطلقة للإشارة:

العملية = + : القيمة المطلقة ;

إليك مثال على التركيب المتوازي باستخدام ,المؤثر الذي يرتب تعبيراته اليسرى واليمنى بشكل متوازٍ. وهذا يشبه كابل ستيريو.

العملية = _ ، _ ؛

يمكن دمج هذه العمليات بشكل عشوائي. الكود التالي يضرب إشارة الإدخال في 0.5:

process = _ , 0.5 : * ;

يمكن إعادة كتابة ما سبق بصيغة الكاري :

العملية = * ( 0.5 );

يمكن استخدام عامل التركيب التكراري ~لإنشاء مخططات كتلية ذات دورات (تتضمن تأخيرًا ضمنيًا لعينة واحدة). فيما يلي مثال على مُكامل يأخذ إشارة دخل X ويحسب إشارة خرج Y بحيث يكون Y(t) = X(t) + Y(t−1):

العملية = + ~ _ ;

إنشاء تطبيقات كاملة

باستخدام ملفات معمارية محددة ، يمكن استخدام برنامج FAUST لإنتاج كود لمجموعة متنوعة من المنصات وتنسيقات المكونات الإضافية. تعمل هذه الملفات المعمارية كأغلفة وتصف التفاعلات مع نظام الصوت وواجهة المستخدم الرسومية المضيف. اعتبارًا من عام 2021يتم دعم أكثر من 30 بنية معمارية، ويمكن لأي شخص تنفيذ بنى معمارية جديدة.

لقطة شاشة لملف mixer.dsp (المتوفر في توزيعة FAUST) باستخدام بنية jack-qt
تتوفر بعض ملفات البنية لـ FAUST
ملفبنيان
alsa-gtk.cppتطبيق ALSA + GTK
alsa-qt.cppتطبيق ALSA + Qt 4
android.cppتطبيقات أندرويد
au.cppمكون إضافي لوحدة الصوت
ca-qt.cppتطبيق CoreAudio + Qt 4
ios-coreaudio.cppتطبيقات iPhone و iPad
jack-gtk.cppتطبيق JACK + GTK
jack-qt.cppتطبيق JACK + Qt 4
ladspa.cppإضافة LADSPA
max-msp.cppإضافة Max MSP
pd.cppإضافة Pure Data
q.cppإضافة لغة Q
supercollider.cppإضافة SuperCollider
vst.cppإضافة VST
vsti-mono.cppمكون إضافي أحادي الصوت لآلة VST
vsti-poly.cppمكون إضافي متعدد الأصوات لآلة VST

إنشاء مخططات هيكلية

يُتيح خيار مفيد إمكانية إنشاء تمثيل مخطط الكتلة للبرنامج كملف رسومي واحد أو أكثر بصيغة SVG.

من المفيد ملاحظة الفرق بين مخطط الكتلة وشفرة C++ المُولَّدة. الفكرة الأساسية ليست ترجمة مخطط الكتلة حرفيًا، بل ترجمة الدالة الرياضية التي يُمثلها. لا تُترجم مُترجمات C/C++ الحديثة البرامج حرفيًا أيضًا. ولكن نظرًا لتعقيد دلالات C/C++ (بسبب الآثار الجانبية، وتداخل المؤشرات، وما إلى ذلك)، لا يُمكنها المضي قدمًا في هذا الاتجاه. هذه ميزة واضحة للغة وظيفية بحتة: فهي تُتيح للمُترجمات إجراء تحسينات متقدمة للغاية.

دلالات شبيهة بالأسهم

تتشابه دلالات فاوست تقريبًا مع دلالات فئة أنواع الأسهم في هاسكل . ومع ذلك، فإن فئة الأسهم غير مرتبطة بمعالجات الإشارات.

أوجه التكافؤ بين مُركِّبات FAUST و Arrow
f~gloop((\(a,b)->(b,a))^>>f>>>id&&&(delay>>>g))لا تُعدّ خاصية where delayطريقةً من Arrowطرق فئة النوع، ولكنها خاصة بأسهم معالجة الإشارات.
f,gf***g
f:gf>>>g
f<:gf>>^h>>>gمع الوظيفة المناسبة h(أو &&&في حالات خاصة)
f:>gf>>^h>>>gمع الوظيفة المناسبةh

تعتبر مُركِّبات Arrow أكثر تقييدًا من نظيراتها في FAUST، على سبيل المثال، يتم الحفاظ على تداخل التركيب المتوازي، ويجب أن تتطابق مدخلات المعاملات &&&تمامًا.

الجوائز

مراجع