مكتبة C++ مفتوحة المصدر لتطبيقات الصوت والإضافات
واجهة برمجة تطبيقات C++ مجانية لتطبيقات الصوت والإضافات. تعلّم كيفية بناء تطبيقات سطح المكتب، الجوال، وإضافات الصوت عبر منصات متعددة باستخدام دليلنا للميزات الرئيسية وأمثلة الشيفرة.
ما هو JUCE؟
تتطلب برامج الصوت الحديثة مثل المولّدات، ومحطات العمل الرقمية الصوتية (DAWs)، وأدوات معالجة الصوت أطر عمل فعّالة تُبسّط مهام برمجة الصوت المعقدة. أحد أكثر أطر العمل استخدامًا في صناعة تطوير الصوت هو JUCE، مكتبة C++ مفتوحة المصدر صُممت لبناء تطبيقات ومكوّنات صوتية متعددة المنصات. توفر للمطورين مجموعة أدوات كاملة لمعالجة الصوت، وتطوير المكوّنات، وإنشاء واجهات المستخدم الرسومية، وتكامل الأجهزة. تمكّن المطورين من كتابة الشيفرة مرة واحدة ونشر التطبيقات عبر منصات متعددة بما فيها Windows و macOS و Linux و iOS و Android.
JUCE (Jules’ Utility Class Extensions) هو إطار عمل تطبيقات C++ مفتوح المصدر يُستخدم لبناء تطبيقات سطح المكتب والهواتف المحمولة، خصوصًا برامج الصوت والمكوّنات. يوفر وحدات قابلة لإعادة الاستخدام تُبسّط مهام مثل معالجة الصوت، والتواصل عبر MIDI، وإنشاء واجهات المستخدم الرسومية، وتطوير المكوّنات، ومعالجة الملفات والشبكات وغيرها. يُستخدم JUCE على نطاق واسع من قبل المطورين وشركات برامج الصوت لبناء مكوّنات VST و VST3 و AU و AUv3 و AAX و LV2، بالإضافة إلى التطبيقات المستقلة. يقلل بشكل كبير من تعقيد بناء تطبيقات الصوت. بدلاً من كتابة شيفرة خاصة بكل منصة لكل نظام تشغيل، يمكن للمطورين استخدام واجهة برمجة التطبيقات الموحدة لـ 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 مثالياً لإنشاء أدوات إنتاج الموسيقى ومُلحقات مؤثرات الصوت. إليك مثالًا على معالجة كود لمخزن صوتي يقلل سعة كل عينة. تُستخدم مثل هذه العمليات عادةً لتنفيذ التحكم في الكسب أو مؤثرات الصوت.
كيف يتم معالجة مخزن صوتي وتقليل السعة عبر واجهة برمجة التطبيقات 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; // reduce volume } } تطوير ملاحق الصوت عبر واجهة برمجة تطبيقات C++
تبسط مكتبة JUCE إنشاء ملحقات صوتية احترافية. يمكن للمطورين بناء ملحقات متوافقة مع معايير الصوت الرئيسية مثل VST و VST3 و AU و AUv3 و AAX و LV2 باستخدام إطار واحد. تتيح هذه الميزة للمطورين توزيع ملحقاتهم عبر العديد من محطات العمل الرقمية (DAWs) دون إعادة كتابة الكود. يُظهر الكود ملحق صوتي بسيط يقلل كسب الإشارة بنسبة 20٪. في المشاريع الحقيقية، يمكن للمطورين إضافة معلمات، وأتمتة، وخوارزميات DSP معقدة.
كيف تنشئ مكوّن صوتي بسيط عبر واجهة برمجة التطبيقات C++؟
class GainProcessor : public juce::AudioProcessor { public: void processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer&) override { buffer.applyGain(0.8f); } }; التطوير متعدد المنصات
إحدى أقوى ميزات JUCE هي قدرته على بناء تطبيقات متعددة المنصات باستخدام قاعدة شفرة C++ واحدة. يمكن للمطورين إنشاء برامج تعمل على Windows و macOS و Linux و iOS و Android دون إعادة كتابة شفرة خاصة بالمنصة. يقلل ذلك بشكل كبير من وقت التطوير ويضمن سلوكًا متسقًا عبر أنظمة التشغيل. المثال التالي ينشئ تطبيق 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 App", "Hello from a cross-platform JUCE application!"); }
void shutdown() override {} };
START_JUCE_APPLICATION (HelloWorld) تكامل أجهزة MIDI والصوت
يتضمن JUCE أيضًا واجهات برمجة تطبيقات للتفاعل مع أجهزة الصوت ووحدات تحكم MIDI. يمكن للمطورين الوصول إلى الميكروفونات، والسماعات، ولوحات مفاتيح MIDI، وغيرها من الأجهزة مباشرة عبر الإطار. هذا أمر حيوي لتطبيقات مثل المُركّبات الصوتية، ومحطات العمل الرقمية (DAWs)، وبرامج الأداء الحي. الكود التالي يستمع إلى رسائل MIDI الواردة ويطبع رقم النوتة كلما تم ضغط مفتاح MIDI.
كيف تستمع لرسائل MIDI الواردة عبر واجهة برمجة التطبيقات C++؟
void handleIncomingMidiMessage(juce::MidiInput*, const juce::MidiMessage& message) { if (message.isNoteOn()) { int note = message.getNoteNumber(); juce::Logger::writeToLog("تشغيل النغمة: " + juce::String(note)); } }