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 تولید خواهد کرد (با استفاده از این لینک، می‌توانید یک برنامۀ تحت وب از تولیدکنندهٔ نویز را امتحان کنید.)