OSC
OSC स्क्रीन वह जगह है जहाँ आप UDP पर Open Sound Control (OSC 1.0) हाथ से बोलते हैं। इसके तीन हिस्से हैं:
- प्रेषक: एक संदेश, टाइप किए गए आर्ग्युमेंट, जो Enter दबाते ही भेजा जाता है।
- मॉनिटर: किसी पोर्ट पर सुनता है और आने वाले हर पैकेट को डिकोड करता है।
- सिग्नल जनरेटर: ऐसा मान भेजता है जो एक वेवफ़ॉर्म का अनुसरण करता है, सेकंड में कई बार, और उसे खींचता है।
Signal Lab OSC को ख़ुद एन्कोड और डिकोड करता है। जो वह भेजता है, वही इंस्पेक्टर बाइट दर बाइट दिखाता है।
संदेश भेजना
- OSC खोलें।
- लक्ष्य host:port में डिवाइस का IP पता या होस्ट नाम और उसका पोर्ट डालें, जैसे
127.0.0.1:9000याstage-mixer.local:9000। - OSC पता में वह पता डालें जिस पर डिवाइस सुनता है, जैसे
/mixer/fader/1। - आर्ग्युमेंट के नीचे हर आर्ग्युमेंट का प्रकार और मान सेट करें। एक और जोड़ने के लिए + आर्ग्युमेंट दबाएँ; ✕ एक हटाता है।
- भेजें दबाएँ, या भेजने वाले के किसी फ़ील्ड में Enter दबाएँ।
बटनों के नीचे की पंक्ति बताती है कि क्या बाहर गया: पता, बाइट में उसका आकार और लक्ष्य। वही संदेश फिर भेजने पर गिनती बढ़ती जाती है (×2, ×3…), ताकि आप देख सकें कि दोहराया गया भेजना कुछ किया। विफलता इसके बजाय वहीं और कंसोल में दिखती है।
लक्ष्य, पता और आर्ग्युमेंट स्क्रीन बदलने पर और ऐप फिर से शुरू करने पर भी बने रहते हैं।
फ़ील्ड
| फ़ील्ड | क्या | डिफ़ॉल्ट |
|---|---|---|
| लक्ष्य host:port | रिसीवर का IP:port या host:port। IPv6 पता कोष्ठकों में जाता है: [::1]:9000। होस्ट नाम हर बार भेजते समय खोजा जाता है; जब उसका कोई IPv4 पता होता है, तो वही उपयोग होता है (इसलिए localhost 127.0.0.1 पर सुनने वाले रिसीवर तक पहुँचता है), वरना उसका IPv6 वाला। पोर्ट के बिना लक्ष्य अस्वीकार कर दिया जाता है। | 127.0.0.1:9000 |
| OSC पता | OSC पता, / से शुरू होकर, हिस्से / से अलग। शुरुआती / के बिना वाला कुछ भी भेजे जाने से पहले अस्वीकार कर दिया जाता है। | /hello/avatar/1 |
| आर्ग्युमेंट | पते के बाद टाइप किए गए मान, क्रम में। किसी संदेश में एक भी न हो। | एक float, 1.0 |
आर्ग्युमेंट के प्रकार
हर आर्ग्युमेंट का प्रकार संदेश का हिस्सा होता है (उसका टाइप टैग), इसलिए जो डिवाइस float की अपेक्षा करता है, वह उसी मान वाले int को अनदेखा कर सकता है।
| सूची में प्रकार | OSC टैग | मान | आप इसे कैसे डालते हैं |
|---|---|---|---|
int | i | 32-बिट signed पूर्णांक | एक पूर्ण संख्या |
float | f | 32-बिट फ़्लोटिंग पॉइंट | एक संख्या, 0.75 |
str | s | टेक्स्ट | कोई भी टेक्स्ट, UTF-8 के रूप में भेजा जाता है |
bool | T / F | सही या ग़लत | सूची से true या false; कोई बाइट नहीं ले जाता, केवल टैग |
long | h | 64-बिट signed पूर्णांक | एक पूर्ण संख्या |
double | d | 64-बिट फ़्लोटिंग पॉइंट | एक संख्या |
nil | N | कुछ नहीं | कोई मान नहीं |
blob | b | बाइट | यहाँ टाइप नहीं किया जाता: यह तब दिखता है, केवल-पढ़ने योग्य और hex में, जब आप ऐसा सिग्नल खोलते हैं जिसमें यह हो |
जो संख्या फ़ील्ड संख्या नहीं रखता, वह 0 भेजता है।
TIP
OSC का true टैग T है, टेक्स्ट "true" नहीं। bool की प्रतीक्षा करता डिवाइस स्ट्रिंग को चुपचाप अनदेखा कर देता है।
बंडल
भेजने वाला अकेले संदेश भेजता है, बंडल नहीं। जब कोई बंडल (#bundle) आता है, तो मॉनिटर, प्रयोग के waits और एमुलेटर उसे खोल देते हैं: उसके भीतर का हर संदेश अपने आप पर संभाला जाता है, और उसका time tag अनदेखा कर दिया जाता है।
किसी पोर्ट को देखना
यह देखने के लिए कि कोई डिवाइस या शो कंट्रोलर क्या भेजता है:
- बाइंड पता में सुनने का पता और पोर्ट डालें।
0.0.0.0:9000(डिफ़ॉल्ट) हर नेटवर्क कार्ड पर सुनता है;127.0.0.1:9000केवल इसी मशीन पर। - सुनें दबाएँ। मॉनिटर चलते समय फ़ील्ड लॉक हो जाता है।
- भेजने वाले को इस मशीन के IP पते और उस पोर्ट की ओर मोड़ें।
हर पैकेट एक पंक्ति बन जाता है, सबसे नई सबसे ऊपर:
| कॉलम | क्या |
|---|---|
| समय | यह कब आया, मिलीसेकंड तक |
| स्रोत | भेजने वाले का IP:port |
| पता | OSC पता, या (डिकोड त्रुटि) जब पैकेट मान्य OSC न हो |
| आर्ग्युमेंट | आर्ग्युमेंट के मान; blob blob[n] के रूप में दिखता है, nil nil के रूप में। जो पैकेट डिकोड न हो सका, उसके लिए क्यों। |
एक बंडल हर संदेश के लिए एक पंक्ति देता है। सूची नवीनतम 300 पंक्तियाँ रखती है; साफ़ करें उसे ख़ाली कर देता है। पोर्ट बंद करने के लिए रोकें दबाएँ। मॉनिटर कंसोल पट्टी में एक जॉब भी है, इसलिए वहाँ से भी रोका जा सकता है।
मॉनिटर अधिकतम 64 KiB के पैकेट पढ़ता है। यह i f s S b h d T F N I टैग डिकोड करता है (S टेक्स्ट के रूप में पढ़ा जाता है, I nil के रूप में); कोई और टैग वाला, या बीच में कटा पैकेट, ड्रॉप होने के बजाय डिकोड त्रुटि के रूप में दिखता है।
संदेश को wait में बदलना
हर पंक्ति में एक ⇠ बटन, इसकी प्रतीक्षा करें होता है। यह खुले प्रयोग में एक Wait for OSC चरण जोड़ता है, जो मॉनिटर के बाइंड पता पर इस पते के लिए सुनता है, हर टेक्स्ट, पूर्ण-संख्या और true/false आर्ग्युमेंट के लिए "बराबर" नियम के साथ — floats, blobs और nil को कोई नहीं मिलता — अधिकतम 16 नियम। इसका टाइमआउट 2000 ms है। एडिटर नए चरण के साथ खुलता है।
WARNING
वह प्रयोग चलाने से पहले मॉनिटर रोकें। रन वही पोर्ट ख़ुद खोलता है, और दो listeners उसे साझा नहीं कर सकते।
वेवफ़ॉर्म चलाना
सिग्नल जनरेटर एक के बाद एक संदेश एक पते पर भेजता है, एक ही आर्ग्युमेंट के साथ जिसका मान एक वेवफ़ॉर्म का अनुसरण करता है — कोई फ़ेडर, लाइट का स्तर, कोई स्थिति। इसका उपयोग यह देखने के लिए करें कि कोई डिवाइस चलते मान का अनुसरण कैसे करता है, या किसी रिसीवर पर लगातार धारा डालने के लिए।
- लक्ष्य host:port और पता सेट करें। दोनों जनरेटर शुरू करें दबाने पर जाँचे जाते हैं, जैसे भेजने वाला उन्हें जाँचता है।
- वेवफ़ॉर्म, उसकी आवृत्ति (Hz) और दर (pps) चुनें।
- न्यूनतम और अधिकतम सेट करें, यानी मान की सीमा।
- जनरेटर शुरू करें दबाएँ। यह तब तक चलता है जब तक आप जनरेटर रोकें न दबाएँ या कंसोल पट्टी में उसका जॉब न रोकें।
| फ़ील्ड | क्या | डिफ़ॉल्ट |
|---|---|---|
| लक्ष्य host:port | रिसीवर का IP:port या host:port; नाम एक बार खोजा जाता है, जब जनरेटर शुरू होता है | 127.0.0.1:9000 |
| पता | वह पता जिस पर हर संदेश भेजा जाता है; यह / से शुरू होता है | /hello/lfo |
| वेवफ़ॉर्म | समय के साथ मान का आकार (नीचे) | साइन |
| आवृत्ति (Hz) | प्रति सेकंड वेवफ़ॉर्म के चक्र | 1 |
| दर (pps) | प्रति सेकंड संदेश, 0.1 से 5000 तक; बाहर का मान उसी सीमा में रोक दिया जाता है | 60 |
| न्यूनतम, अधिकतम | सबसे नीचा और सबसे ऊँचा मान। अगर Max, Min से नीचे हो, तो मान हिलता नहीं। | 0, 1 |
| int के रूप में भेजें | निकटतम पूर्ण संख्या तक राउंड करें और float के बजाय int भेजें | बंद |
| वेवफ़ॉर्म | हर चक्र में मान क्या करता है |
|---|---|
| साइन | Min और Max के बीच सहजता से झूलता है, बीच से शुरू होकर ऊपर उठता है |
| त्रिकोण | Min से Max तक उठता है, फिर Min पर वापस गिरता है, Min से शुरू होकर |
| सॉ | गिरता आरा-दाँता: Max से शुरू होकर Min तक गिरता है, फिर Max पर वापस उछलता है |
| रैंप | चढ़ता आरा-दाँता: Min से शुरू होकर Max तक चढ़ता है, फिर Min पर वापस उछलता है |
| वर्ग | पहले आधे में Max, दूसरे में Min |
| रैंडम | हर संदेश के साथ Min और Max के बीच एक नया रैंडम मान; आवृत्ति उपयोग नहीं होती |
| स्थिर | हर बार Max; आवृत्ति उपयोग नहीं होती |
स्कोप
फ़ील्डों के बगल में, स्कोप मान को भेजे जाते समय खींचता है: नवीनतम 300 बिंदु, फ़िट होने के लिए स्केल किए हुए। उसके नीचे वेवफ़ॉर्म, आवृत्ति और दर, और अंतिम भेजा गया मान होता है। स्कोप लगभग 30 बार प्रति सेकंड अपडेट होता है, चाहे जनरेटर कितनी भी तेज़ी से भेजे, इसलिए ऊँची दरों पर यह संदेशों का एक नमूना दिखाता है, हर एक को नहीं।
अगर कोई भेजना विफल हो, तो जनरेटर रुक जाता है और कंसोल कारण बताता है।
इंस्पेक्टर में
कैप्चर चालू रहते (इंस्पेक्टर में कैप्चर चालू करें), OSC ट्रैफ़िक प्रोटोकॉल osc के साथ दिखता है:
| स्रोत | क्या | टिप्पणियाँ |
|---|---|---|
osc-send | वह हर संदेश जो भेजने वाला, कोई लाइब्रेरी सिग्नल, कोई OSC संदेश चरण या signallab send osc भेजता है | जवाब की प्रतीक्षा करता कोई चरण experiment के रूप में दिखता है |
osc-monitor | मॉनिटर को मिला हर पैकेट | बंडल का सारांश उसके पहले संदेश और +n more in bundle से दिया जाता है; ख़राब पैकेट का फ़ैसला decode error: … होता है |
osc-gen | जनरेटर के संदेश | हर 100 ms में अधिकतम एक कैप्चर होता है, फ़ैसले sampled के साथ; छोड़े गए संदेशों के बाद आने वाला अगला जोड़ता है कि कितने नहीं खींचे गए — sampled · +5 not shown |
हर फ़्रेम उन बाइट को रखता है जिनसे इसे बनाया गया था। देखें इंस्पेक्टर।
सहेजना और दोबारा उपयोग
- सिग्नल के रूप में सहेजें। बटनों के नीचे सहेजें… संदेश को — लक्ष्य, पता और आर्ग्युमेंट — सिग्नल लाइब्रेरी में, आपके चुने फ़ोल्डर में रख देता है। तब से भेजने वाला उस सिग्नल से जुड़ जाता है: सहेजें (या भेजने वाले में Ctrl+S) उसे अपडेट करता है, इस रूप में सहेजें… एक कॉपी बनाता है, और उनके बगल की चिप उसे सिग्नल में खोलती है। बाद में उसे सिग्नल से या किसी भी स्क्रीन पर Ctrl+K से भेजें। देखें सिग्नल।
- किसी प्रयोग में जोड़ें। प्रयोग में जोड़ें खुले प्रयोग में उसी लक्ष्य, पते और आर्ग्युमेंट वाला एक OSC संदेश चरण जोड़ता है — End से ठीक पहले, या चुने गए चरण के बाद — और उसे खोल देता है। प्रयोग चलते समय कुछ नहीं जोड़ा जा सकता; कंसोल ऐसा बताता है।
प्रयोगों में
| चरण | क्या करता है |
|---|---|
| OSC संदेश | एक संदेश भेजता है। इसका लक्ष्य, पता और टेक्स्ट आर्ग्युमेंट {{templates}} लेते हैं। जवाब की प्रतीक्षा करें के साथ यह अपने किसी पोर्ट से भेजता है और उसी चरण में वहीं जवाब की प्रतीक्षा करता है। विवरण |
| OSC की प्रतीक्षा | ऐसे संदेश की प्रतीक्षा करता है जिसका पता किसी पैटर्न से मेल खाता हो और जिसके आर्ग्युमेंट नियम पास करते हों। विवरण |
| एमुलेटर | एक OSC डिवाइस जो पूरे रन के लिए नियमों से जवाब देता है। देखें एमुलेटर। |
OSC संदेश चरण स्क्रीन की तरह IP:port या host:port लेता है, और इसका पता / से शुरू होना चाहिए। होस्ट नाम हर बार चरण के भेजने पर खोजा जाता है।
पता पैटर्न
OSC की प्रतीक्षा, OSC संदेश का जवाब और OSC एमुलेटर के नियम पतों को OSC 1.0 पैटर्न से मिलाते हैं:
| पैटर्न | मेल खाता है |
|---|---|
* | अक्षरों की कोई भी श्रृंखला, कोई भी नहीं भी |
? | ठीक एक अक्षर |
[0-9], [a-c] | समूह या श्रेणी से एक अक्षर |
[!0-9] | समूह में न होने वाला एक अक्षर |
{ping,pong} | शब्दों में से एक |
वाइल्डकार्ड स्लैशों के बीच एक ही हिस्से में रहते हैं: /cue/* /cue/7 से मेल खाता है पर /cue/7/go से नहीं, और कोई पैटर्न केवल उतने ही हिस्सों वाले पते से मेल खाता है। मिलान केस-संवेदी है। पैटर्न / से शुरू होता है, उसमें ख़ाली हिस्सा (//), स्पेस, # और ASCII से बाहर के अक्षर नहीं होते, और यह अधिकतम 512 अक्षर का होता है।
आर्ग्युमेंट नियम आर्ग्युमेंट संख्या 0–63 की किसी मान से तुलना करते हैं (बराबर, उससे कम, समाहित, कोई रेगुलर एक्सप्रेशन से मेल और इसी तरह); किसी wait में अधिकतम 16 होते हैं। जब कोई बंडल आता है, तो wait उसे ले लेता है अगर उसका कोई संदेश मेल खाता हो। मिले संदेश के बाद के चरणों को क्या देता है, यह देखें डेटा और टेम्पलेट में।
कमांड लाइन से
signallab send osc भेजने वाले की तरह एक संदेश भेजता है:
signallab send osc 127.0.0.1:9000 /cue/go f:0.75 s:main✔ sent /cue/go (24 bytes) → 127.0.0.1:9000हर आर्ग्युमेंट tag:value होता है: i:3, f:0.5, d:1.5, h:64, s:text, b:de ad be ef (hex बाइट), या अकेले T, F, N। टैग के बिना, पूर्ण संख्या i होती है, दशमलव बिंदु वाली संख्या f, और बाकी कुछ भी s; टेक्स्ट 7 भेजने के लिए s:7 लिखें। लक्ष्य IP:port या host:port होता है। यह 0 के साथ निकलता है जब संदेश चला गया, 1 जब भेजना विफल हुआ (वह होस्ट नाम भी जो रिज़ॉल्व नहीं होता), और 2 जब कोई आर्ग्युमेंट, पता या लक्ष्य अमान्य हो। signallab fire सहेजा गया सिग्नल भेजता है। देखें कमांड लाइन।
TIP
Windows पर Git Bash में, / से शुरू होने वाला आर्ग्युमेंट signallab के देखने से पहले एक फ़ाइल पथ में बदल दिया जाता है। कमांड को आगे MSYS_NO_PATHCONV=1 लगाकर चलाएँ, या PowerShell या cmd का उपयोग करें।
समस्याएँ
| जो आप देखते हैं | सामान्य कारण |
|---|---|
भेजते समय … is not a valid address | लक्ष्य में पोर्ट नहीं है, या वह न IP:port है न host:port। |
भेजते समय Cannot resolve … | होस्ट नाम इस मशीन पर रिज़ॉल्व नहीं होता। उसे जाँचें, या IP पता उपयोग करें। |
OSC addresses start with / (…) | पते में शुरुआती / नहीं है। |
| संदेश भेजा जाता है पर डिवाइस कुछ नहीं करता | ग़लत पोर्ट या पता; उससे भिन्न प्रकार जिसकी वह अपेक्षा करता है (float के बजाय int, bool के बजाय टेक्स्ट "true")। इसे इंस्पेक्टर में देखें, या यह देखने के लिए कि क्या बाहर जाता है, लक्ष्य को इसी मशीन के मॉनिटर की ओर मोड़ें। |
सुनें पर … is already in use by another program | कोई और प्रोग्राम — या कोई चलता प्रयोग, एमुलेटर या दूसरा मॉनिटर — उस पोर्ट पर है। |
… is not an address of this computer | बाइंड पता का IP किसी और मशीन का है। 0.0.0.0 या इस मशीन के किसी पते का उपयोग करें। |
| दूसरी मशीनों से पैकेट कभी नहीं आते | Windows पर फ़ायरवॉल उन्हें रोक सकता है: जब ऐप पेशकश करे तो Signal Lab को अनुमति दें। स्थानीय ट्रैफ़िक (127.0.0.1) प्रभावित नहीं होता। देखें समस्या निवारण। |
| (डिकोड त्रुटि) पंक्तियाँ | भेजने वाला उस पोर्ट पर OSC 1.0 नहीं बोल रहा, या ऐसा टाइप टैग उपयोग कर रहा है जिसे Signal Lab डिकोड नहीं करता। |
सर्वर पर स्क्रीन सर्वर के नेटवर्क पर काम करती है: 127.0.0.1 सर्वर ही है, और मॉनिटर सर्वर के पोर्ट पर सुनता है। देखें सर्वर।
हर त्रुटि संदेश त्रुटि संदेश में सूचीबद्ध है।