
PO-32 ध्वनिक स्थानांतरण और ड्रम संश्लेषण के लिए C99 लाइब्रेरी।
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 तैयार ड्रम ऑडियो प्राप्त नहीं कर रहा है। यह संरचित डेटा प्राप्त करता है:
| डेटा | अर्थ |
|---|---|
| पैच पैकेट | प्रति वाद्ययंत्र दो पैच एंडपॉइंट (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
यह रिपो-प्रबंधित 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 for Schwung | Ableton Move पर Schwung के लिए एक 16-वॉइस ड्रम सिंथेसाइज़र मॉड्यूल, libpo32 द्वारा संचालित |
| हेडर | ज़िम्मेदारी |
|---|---|
core/include/po32.h | स्थानांतरण बिल्डर, पैकेट सहायक, रेंडरर, और डिकोडर |
core/include/po32_synth.h | ड्रम सिंथेसाइज़र |
| दस्तावेज़ | उद्देश्य |
|---|---|
| आर्किटेक्चर | कोडेक कैसे काम करता है |
| प्रोटोकॉल | वायर प्रारूप विवरण |
| C API | C फ़ंक्शन संदर्भ |
| सिंथ | सिंथेसाइज़र सिग्नल पथ |
| पैच पैरामीटर | 21 पैरामीटर |
| बाइंडिंग | नई भाषा बाइंडिंग कैसे लिखें |
| उदाहरण | समर्थित उदाहरण प्रोग्राम |
| फ़ज़िंग | फ़ज़ हार्नेस और विभेदक गुण |
| योगदान | स्थानीय सेटअप, जाँच, और कमिट परंपराएँ |
| पथ | उद्देश्य |
|---|---|
core/src | कोर C कार्यान्वयन |
core/include | सार्वजनिक C हेडर |
core/examples | समर्थित C उदाहरण |
core/tests | कोर परीक्षण कवरेज |
core/fuzz | प्रत्येक अविश्वसनीय-इनपुट सतह के लिए libFuzzer हार्नेस |
core/docs | आर्किटेक्चर, प्रोटोकॉल, और API नोट्स |
bindings/go | Go बाइंडिंग (cgo, पूर्ण सार्वजनिक API लपेटता है) |
स्थानीय सेटअप, सत्यापन कमांड, और SemVer-अनुकूल इतिहास के लिए उपयोग की जाने वाली Conventional Commits नीति के लिए CONTRIBUTING.md देखें।
कॉपीराइट (c) 2026 Eric Lewis। MIT लाइसेंस के तहत लाइसेंस प्राप्त। LICENSE देखें।