کتابخانه منبع باز C++ برای برنامهها و افزونههای صوتی
API رایگان C++ برای برنامهها و افزونههای صوتی. بیاموزید چگونه برنامههای دسکتاپ، موبایل و افزونههای صوتی چندپلتفرمی را با راهنمای ما درباره ویژگیهای کلیدی و مثالهای کد بسازید.
JUCE چیست؟
نرمافزارهای صوتی مدرن مانند سینتسایزرها، ایستگاههای کاری دیجیتال صوتی (DAWها) و ابزارهای پردازش صدا به چارچوبهای کارآمدی نیاز دارند که کارهای پیچیده برنامهنویسی صوتی را ساده کنند. یکی از پرکاربردترین چارچوبها در صنعت توسعه صوتی JUCE است، یک کتابخانه منبع باز C++ که برای ساخت برنامهها و افزونههای صوتی چندپلتفرمی طراحی شده است. این کتابخانه مجموعه کامل ابزارهایی برای پردازش صدا، توسعه افزونه، ایجاد رابط کاربری گرافیکی و یکپارچهسازی سختافزار را در اختیار توسعهدهندگان قرار میدهد. این امکان را به توسعهدهندگان میدهد که یک بار کد بنویسند و برنامهها را بر روی چندین پلتفرم از جمله ویندوز، macOS، لینوکس، iOS و اندروید مستقر کنند.
JUCE (Jules’ Utility Class Extensions) یک چارچوب برنامهنویسی منبع باز C++ است که برای ساخت برنامههای دسکتاپ و موبایل، بهویژه نرمافزارها و افزونههای صوتی استفاده میشود. این چارچوب ماژولهای قابل استفاده مجددی ارائه میدهد که کارهایی مانند پردازش صدا، ارتباط MIDI، ایجاد رابط کاربری گرافیکی، توسعه افزونه، مدیریت فایل و شبکه و غیره را ساده میکنند. JUCE بهطور گسترده توسط توسعهدهندگان و شرکتهای نرمافزار صوتی برای ساخت افزونههای VST، VST3، AU، AUv3، AAX و LV2، همچنین برنامههای مستقل استفاده میشود. این چارچوب بهطور قابل توجهی پیچیدگی ساخت برنامههای صوتی را کاهش میدهد. بهجای نوشتن کدهای مخصوص هر پلتفرم برای هر سیستمعامل، توسعهدهندگان میتوانند از API یکپارچه JUCE برای ساخت نرمافزارهای چندپلتفرمی استفاده کنند.
شروع کار با JUCE
سادهترین روش برای نصب JUCE استفاده از GitHub است. لطفاً برای نصب کامل از فرمان زیر استفاده کنید.
نصب JUCE از NuGet
git clone https://github.com/juce-framework/JUCE.git نصب JUCE از طریق CMake
cd JUCE cmake . -B build cmake --build build پردازش صوتی و پشتیبانی DSP
JUCE منبع باز ماژولهای داخلی برای پردازش سیگنال دیجیتال (DSP) فراهم میکند که به توسعهدهندگان امکان ساخت افکتهای صوتی، سینثسایزرها و پردازشکنندههای صدا را میدهد. این چارچوب شامل ابزارهایی برای فیلترها، نوسانسازها، تحلیل FFT و پردازش صوتی زمان واقعی است. این ویژگی JUCE را برای ایجاد ابزارهای تولید موسیقی و پلاگینهای افکت صوتی ایدهآل میسازد. در زیر یک مثال کد پردازش برای یک بافر صوتی آورده شده است که دامنه هر نمونه را کاهش میدهد. چنین عملیاتی معمولاً برای پیادهسازی کنترل گین یا افکتهای صوتی استفاده میشود.
چگونه یک بافر صوتی را پردازش کرده و دامنه آن را با استفاده از API C++ کاهش دهیم؟
void processBlock(juce::AudioBuffer& buffer) { for (int channel = 0; channel < buffer.getNumChannels(); ++channel) { auto* samples = buffer.getWritePointer(channel);
for (int i = 0; i < buffer.getNumSamples(); ++i) samples[i] *= 0.5f; // کاهش حجم } } توسعه افزونههای صوتی با API C++
کتابخانه JUCE فرآیند ایجاد پلاگینهای صوتی حرفهای را ساده میکند. توسعهدهندگان میتوانند با استفاده از یک چارچوب، پلاگینهایی سازگار با استانداردهای اصلی صوتی مانند VST، VST3، AU، AUv3، AAX و LV2 بسازند. این ویژگی به توسعهدهندگان امکان توزیع پلاگینهای خود در بسیاری از DAWها را بدون بازنویسی کد میدهد. کد یک پلاگین صوتی ساده را نشان میدهد که گین سیگنال را به میزان ۲۰٪ کاهش میدهد. در پروژههای واقعی، توسعهدهندگان میتوانند پارامترها، خودکارسازی و الگوریتمهای پیچیده DSP را اضافه کنند.
چگونه یک افزونه صوتی ساده را با استفاده از API C++ ایجاد کنیم؟
class GainProcessor : public juce::AudioProcessor { public: void processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer&) override { buffer.applyGain(0.8f); } }; توسعه چندپلتفرمی
یکی از قدرتمندترین ویژگیهای JUCE توانایی آن در ساخت برنامههای چندپلتفرمی با استفاده از یک کد پایه C++ است. توسعهدهندگان میتوانند نرمافزاری ایجاد کنند که بر روی ویندوز، macOS، لینوکس، iOS و اندروید بدون بازنویسی کدهای مخصوص هر پلتفرم اجرا شود. این امر زمان توسعه را بهطرز چشمگیری کاهش میدهد و رفتار یکسانی را در تمام سیستمعاملها تضمین میکند. مثال زیر یک برنامه ساده JUCE را ایجاد میکند که یک پنجره دیالوگ را نمایش میدهد. چون JUCE انتزاع پلتفرم را مدیریت میکند، همان کد بر روی چندین سیستمعامل کار میکند.
چگونه برنامههای چندپلتفرمی JUCE را با C++ ایجاد کنیم؟
#include
class HelloWorld : public juce::JUCEApplication { public: const juce::String getApplicationName() override { return "JUCE Demo"; } const juce::String getApplicationVersion() override { return "1.0"; }
void initialise (const juce::String&) override { juce::AlertWindow::showMessageBoxAsync( juce::AlertWindow::InfoIcon, "برنامه JUCE", "سلام از یک برنامه JUCE چندسکویی!"); }
void shutdown() override {} }
START_JUCE_APPLICATION (HelloWorld) یکپارچهسازی دستگاههای MIDI و صوتی
JUCE همچنین شامل APIهایی برای تعامل با دستگاههای صوتی و کنترلکنندههای MIDI است. توسعهدهندگان میتوانند به میکروفنها، بلندگوها، کیبوردهای MIDI و سایر سختافزارها مستقیماً از طریق چارچوب دسترسی پیدا کنند. این برای برنامههایی مانند سینثسایزرها، DAWها و نرمافزارهای اجرا زنده حیاتی است. کد زیر به پیامهای MIDI ورودی گوش میدهد و هر زمان که یک کلید MIDI فشار داده شد، شماره نُت را چاپ میکند.
چگونه به پیامهای MIDI ورودی با استفاده از API C++ گوش دهیم؟
void handleIncomingMidiMessage(juce::MidiInput*, const juce::MidiMessage& message) { if (message.isNoteOn()) { int note = message.getNoteNumber(); juce::Logger::writeToLog("Note On: " + juce::String(note)); } }