
libpo32 v0.3.0
مكتبة بلغة C99 لنقل الصوتيات وتركيب الطبول لـ PO-32.
libpo32
مكتبة C99 صغيرة لنقل البيانات الصوتية وتوليف الطبول لجهاز Teenage Engineering PO-32.
libpo32 تعيد تنفيذ حزمة نقل PO-32 Tonic ونموذج صوت طبول متوافق. إنها ليست برنامجًا ثابتًا كاملاً لـ PO-32 أو محاكي واجهة مستخدم؛ بل تغطي تنسيق الحزم، والمودم الصوتي، وفك تشفير الإطارات، وتوليف الطبول المحلي اللازم لبناء وإرسال واستقبال ومعاينة عمليات نقل PO-32.
المحتويات
- نظرة عامة
- الاستخدام مع PO-32
- بدء الاستخدام
- أمثلة
- مشاريع مبنية على libpo32
- واجهة برمجة التطبيقات العامة
- التوثيق
- هيكل المشروع
- المساهمة
- الترخيص
نظرة عامة
| المجال | ما توفره libpo32 |
|---|---|
| بروتوكول النقل | بناء وتحليل حزم التصحيح والنمط والحالة الخاصة بـ PO-32 |
| المودم الصوتي | عرض إطارات النقل إلى صوت DPSK للتشغيل في الجهاز |
| وحدة فك التشفير | استعادة الإطارات والحزم المعيارية من صوت النقل |
| توليف الطبول | عرض صوت الطبول ذي 21 معاملًا محليًا للمعاينة والاختبار |
النواة هي C99 مستقلة: لا يوجد وقت تشغيل libc، ولا مكتبات DSP خارجية، ولا واجهات برمجة تطبيقات صوتية للمنصة، ولا إدخال/إخراج ملفات. يتم استخدام الرؤوس المستقلة <stddef.h> و <stdint.h> فقط. مناسبة للأهداف المدمجة والبيئات المعدنية العارية.
الاستخدام مع PO-32
لا يستقبل PO-32 صوت طبول نهائيًا عند نقل صوت أو نمط. بل يستقبل بيانات منظمة:
| البيانات | المعنى |
|---|---|
| حزم التصحيح | نقطتا التصحيح لكل آلة (Left و Right)، مع ترميز فتحة الآلة الوجهة في الحزمة |
| حزم النمط | أي الآلات تُطلق على أي خطوات، مع ترميز فتحة النمط الوجهة كـ pattern_number |
| حزمة الحالة | الإيقاع، والتأرجح، وافتراضيات المورف، وقائمة الأنماط المنقولة |
ثم يستخدم الجهاز محرك التوليف الداخلي الخاص به لتحويل هذه المعاملات إلى صوت.
على مستوى عالٍ، سير العمل مع الأجهزة الحقيقية هو:
| الخطوة | ما تفعله |
|---|---|
| 1 | بناء نقل في البرنامج من بيانات التصحيح والنمط والحالة |
| 2 | عرض هذا النقل إلى WAV أو دفق صوتي مباشر |
| 3 | وضع PO-32 في تدفق الاستقبال/الاستيراد العادي |
| 4 | تشغيل صوت النقل المعروض في الجهاز |
| 5 | يقوم PO-32 بفك تشفير الحزم وكتابتها في فتحات الصوت أو النمط المسماة داخل تلك الحزم |
بدء الاستخدام
من جذر المستودع، قم بالتكوين والبناء وتشغيل الاختبارات ثم العرض التوضيحي:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo
اختياري، لكن موصى به للتطوير المحلي:
./scripts/install-git-hooks.sh
يقوم ذلك بتمكين خطاف ما قبل الالتزام المُدار من المستودع، والذي يشغّل clang-format على ملفات .c و .h المرحّلة قبل كل التزام ويتحقق من عناوين الالتزامات وفقًا لـ Conventional Commits. يشغّل خطاف ما قبل الدفع المُدار من المستودع سكربت التحليل الثابت قبل الدفع.
يتطلب خطاف ما قبل الالتزام clang-format 18 ويفشل مع أي إصدار رئيسي آخر؛ راجع CONTRIBUTING.md لخيارات التثبيت.
يبني العرض التوضيحي إطار نقل، ويعرضه إلى صوت، ويفك تشفيره مرة أخرى (مع التحقق من رحلة ذهاب وإياب بدون فقدان)، ويولّف ضربة طبلة، ويكتب ملفي WAV: demo_modem.wav و demo_kick.wav.
التثبيت والاستهلاك
يشحن cmake --install المكتبة الثابتة والرؤوس وحزمة CMake وملف pkg-config، بحيث يعمل كلا مساري الاستهلاك مباشرة:
find_package(LibPO32 0.2 REQUIRED)
target_link_libraries(app PRIVATE LibPO32::po32)
cc app.c $(pkg-config --cflags --libs po32) -lm
أمثلة
| الأمر | الغرض |
|---|---|
./build/po32_example | رحلة ذهاب وإياب دنيا: ترميز وعرض وفك تشفير والتحقق |
./build/po32_demo | عرض توضيحي شامل: بناء/عرض/فك تشفير إطار النقل بالإضافة إلى توليف الطبول المحلي |
./build/po32_pattern_editor | تحرير تفاعلي لأنماط PO-32 وتصدير WAV |
./build/po32_decode_capture <input.wav> <out-dir> | تفريغ الحزم والأنماط من WAV نقل |
مشاريع مبنية على libpo32
| المشروع | ما يفعله |
|---|---|
| Libpo32 for Schwung | وحدة توليف طبول بـ 16 صوتًا لـ Schwung على Ableton Move، مدعومة بـ libpo32 |
واجهة برمجة التطبيقات العامة
| الرأس | المسؤولية |
|---|---|
core/include/po32.h | باني النقل، ومساعدات الحزم، والعارض، ووحدة فك التشفير |
core/include/po32_synth.h | مولّف الطبول |
التوثيق
| المستند | الغرض |
|---|---|
| البنية | كيف يعمل برنامج الترميز |
| البروتوكول | تفاصيل تنسيق الأسلاك |
| واجهة C | مرجع دوال C |
| التوليف | مسار إشارة المولّف |
| معاملات التصحيح | المعاملات الـ 21 |
| الروابط | كيفية كتابة ربط لغة جديد |
| الأمثلة | برامج الأمثلة المدعومة |
| الاختبار بالتغذية العشوائية | أدوات التغذية العشوائية والخصائص التفاضلية |
| المساهمة | الإعداد المحلي والفحوصات واتفاقيات الالتزام |
هيكل المشروع
| المسار | الغرض |
|---|---|
core/src | تنفيذ C الأساسي |
core/include | رؤوس C العامة |
core/examples | أمثلة C المدعومة |
core/tests | تغطية الاختبارات الأساسية |
core/fuzz | أدوات libFuzzer لكل سطح إدخال غير موثوق |
core/docs | ملاحظات البنية والبروتوكول وواجهة برمجة التطبيقات |
bindings/go | روابط Go (cgo، تغلف واجهة برمجة التطبيقات العامة الكاملة) |
المساهمة
راجع CONTRIBUTING.md للإعداد المحلي وأوامر التحقق وسياسة Conventional Commits المستخدمة لتاريخ متوافق مع SemVer.
الترخيص
حقوق النشر (c) 2026 Eric Lewis. مرخّص بموجب رخصة MIT. راجع LICENSE.