FAUST: زبانی فانکشنال برای پردازش و ترکیب سیگنال‌های صوتی

FAUST: زبانی فانکشنال برای پردازش و ترکیب سیگنال‌های صوتی

FAUST که مخفف عبارات Functional Audio Stream است، یک زبان برنامه‌نویسی فانکشنال است که به طور خاص برای پردازش و ترکیب سیگنال‌های صوتی در کمترین زمان ممکن طراحی شده است به طوری که این زبان برنامه‌های پردازش صوت با عملکرد بالا و افزونه‌های صوتی برای انواع سیستم‌عامل‌ها و استانداردها را هدف قرار داده است.

اولین کسی باشید که به این سؤال پاسخ می‌دهید

یک برنامۀ نوشته‌شده با زبان FAUST می‌تواند به سادگی اسکریپت زیر باشد که به طور کامل یک تولیدکنندۀ نویز را نمایش می‌دهد:

process  = +(12345) ~ *(1103515245) : /(2147483647.0);

اگر بخواهیم یک مثال پیچیده‌تر را بررسی می‌کنیم، می‌توانیم برنامهٔ زیر را مد نظر قرار دهیم که یک اِسلایدر برای کنترل میزان نویز در اختیارمان قرار می‌‌گیرد:

noise  = +(12345) ~ *(1103515245) : /(2147483647.0);
process = noise * hslider("noise volume", 0, 0, 1, 0.01);

البته با استفاده از کامپایلر FAUST‌ می‌توان کدهای این زبان را به زبان ++C ترجمه کرد. برای مثال، می‌توان کامند زیر را در نظر گرفت:

$ faust noise.dsp

کامند فوق، کدهای زیر را تولید خواهد کرد:

virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) {
	FAUSTFLOAT* output0 = outputs[0];
	float fSlow0 = (4.65661e-10f * float(fHslider0));
	for (int i = 0; (i < count); i = (i + 1)) {
		iRec0[0] = (12345 + (1103515245 * iRec0[1]));
		output0[i] = FAUSTFLOAT((fSlow0 * float(iRec0[0])));
		iRec0[1] = iRec0[0];
	}
}

برای ساخت و توسعهٔ یک برنامهٔ در حال اجرا یا یک پلاگین، می‌توانید از یکی از دستورات بسیار زیاد اسکریپت faust2 استفاده نمائید. برای مثال داریم:

$ faust2jaqt noise.dsp

دستور بالا یک برنامۀ مستقل آمادۀ اجرا بر پایه Jack و QT تولید خواهد کرد (با استفاده از این لینک، می‌توانید یک برنامۀ تحت وب از تولیدکنندهٔ نویز را امتحان کنید.)