अपडेट पर वापस जाएँ
New releaseSep 3, 2026

libpo32 v0.3.0

PO-32 ध्वनिक स्थानांतरण और ड्रम संश्लेषण के लिए C99 लाइब्रेरी।

साझा करें

libpo32

Tests Codecov FOSSA Status

Teenage Engineering PO-32 ध्वनिक डेटा स्थानांतरण और ड्रम संश्लेषण के लिए एक छोटी C99 लाइब्रेरी।

libpo32 PO-32 Tonic स्थानांतरण स्टैक और एक संगत ड्रम वॉइस मॉडल को पुनः लागू करता है। यह पूर्ण PO-32 फर्मवेयर या UI एमुलेटर नहीं है; यह पैकेट प्रारूप, ध्वनिक मॉडेम, फ्रेम डिकोडर, और स्थानीय ड्रम संश्लेषण को कवर करता है जो PO-32 स्थानांतरण बनाने, भेजने, प्राप्त करने और पूर्वावलोकन करने के लिए आवश्यक हैं।

सामग्री

अवलोकन

क्षेत्रlibpo32 क्या प्रदान करता है
स्थानांतरण प्रोटोकॉलPO-32 पैच, पैटर्न, और स्टेट पैकेट बनाना और पार्स करना
ध्वनिक मॉडेमडिवाइस में प्लेबैक के लिए स्थानांतरण फ्रेम को DPSK ऑडियो में रेंडर करना
डिकोडरस्थानांतरण ऑडियो से सामान्यीकृत फ्रेम और पैकेट पुनर्प्राप्त करना
ड्रम संश्लेषणपूर्वावलोकन और परीक्षण के लिए PO-32 के 21-पैरामीटर ड्रम वॉइस को स्थानीय रूप से रेंडर करना

कोर फ्रीस्टैंडिंग C99 है: कोई libc रनटाइम नहीं, कोई बाहरी DSP लाइब्रेरी नहीं, कोई प्लेटफ़ॉर्म ऑडियो API नहीं, कोई फ़ाइल I/O नहीं। केवल फ्रीस्टैंडिंग हेडर <stddef.h> और <stdint.h> उपयोग किए जाते हैं। एम्बेडेड टारगेट और बेयर-मेटल वातावरण के लिए उपयुक्त।

PO-32 के साथ उपयोग

जब आप ध्वनि या पैटर्न स्थानांतरित करते हैं तो PO-32 तैयार ड्रम ऑडियो प्राप्त नहीं कर रहा है। यह संरचित डेटा प्राप्त करता है:

डेटाअर्थ
पैच पैकेटप्रति वाद्ययंत्र दो पैच एंडपॉइंट (Left और Right), गंतव्य वाद्ययंत्र स्लॉट पैकेट में एन्कोडेड होता है
पैटर्न पैकेटकौन से वाद्ययंत्र किन चरणों पर ट्रिगर होते हैं, गंतव्य पैटर्न स्लॉट pattern_number के रूप में एन्कोडेड होता है
स्टेट पैकेटटेम्पो, स्विंग, मॉर्फ डिफ़ॉल्ट, और स्थानांतरित पैटर्न सूची

डिवाइस फिर उन पैरामीटरों को ध्वनि में बदलने के लिए अपने स्वयं के आंतरिक सिंथ इंजन का उपयोग करता है।

उच्च स्तर पर, वास्तविक हार्डवेयर के साथ कार्यप्रवाह है:

चरणआप क्या करते हैं
1पैच, पैटर्न, और स्टेट डेटा से सॉफ़्टवेयर में स्थानांतरण बनाएं
2उस स्थानांतरण को WAV या लाइव ऑडियो स्ट्रीम में रेंडर करें
3PO-32 को उसके सामान्य प्राप्त/आयात प्रवाह में रखें
4रेंडर किए गए स्थानांतरण ऑडियो को डिवाइस में चलाएं
5PO-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

यह रिपो-प्रबंधित pre-commit हुक सक्षम करता है, जो प्रत्येक कमिट से पहले स्टेज किए गए .c और .h फ़ाइलों पर clang-format चलाता है और Conventional Commits के विरुद्ध कमिट विषयों को मान्य करता है। रिपो-प्रबंधित pre-push हुक पुश से पहले स्थैतिक विश्लेषण स्क्रिप्ट चलाता है।

pre-commit हुक के लिए 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 SchwungAbleton Move पर Schwung के लिए एक 16-वॉइस ड्रम सिंथेसाइज़र मॉड्यूल, libpo32 द्वारा संचालित

सार्वजनिक API

हेडरज़िम्मेदारी
core/include/po32.hस्थानांतरण बिल्डर, पैकेट सहायक, रेंडरर, और डिकोडर
core/include/po32_synth.hड्रम सिंथेसाइज़र

दस्तावेज़ीकरण

दस्तावेज़उद्देश्य
आर्किटेक्चरकोडेक कैसे काम करता है
प्रोटोकॉलवायर प्रारूप विवरण
C APIC फ़ंक्शन संदर्भ
सिंथसिंथेसाइज़र सिग्नल पथ
पैच पैरामीटर21 पैरामीटर
बाइंडिंगनई भाषा बाइंडिंग कैसे लिखें
उदाहरणसमर्थित उदाहरण प्रोग्राम
फ़ज़िंगफ़ज़ हार्नेस और विभेदक गुण
योगदानस्थानीय सेटअप, जाँच, और कमिट परंपराएँ

परियोजना संरचना

पथउद्देश्य
core/srcकोर C कार्यान्वयन
core/includeसार्वजनिक C हेडर
core/examplesसमर्थित C उदाहरण
core/testsकोर परीक्षण कवरेज
core/fuzzप्रत्येक अविश्वसनीय-इनपुट सतह के लिए libFuzzer हार्नेस
core/docsआर्किटेक्चर, प्रोटोकॉल, और API नोट्स
bindings/goGo बाइंडिंग (cgo, पूर्ण सार्वजनिक API लपेटता है)

योगदान

स्थानीय सेटअप, सत्यापन कमांड, और SemVer-अनुकूल इतिहास के लिए उपयोग की जाने वाली Conventional Commits नीति के लिए CONTRIBUTING.md देखें।

लाइसेंस

कॉपीराइट (c) 2026 Eric Lewis। MIT लाइसेंस के तहत लाइसेंस प्राप्त। LICENSE देखें।

श्रेणियाँ