- यह एक installation art score है जिसमें code chord selection, sound synthesis और LED response को साथ में निर्देशित करता है; पौधे के तने जैसी दिखने वाली संरचना बार-बार sound और light generate करती है
- Part A, A2 से D5 तक के Major, Minor, Major 7th, Minor 7th chords और inversions बनाता है, और हर 8 सेकंड में केवल एक note अलग वाले chord पर जाता है
- Part B मौजूदा chord से एक note चुनकर उसे random waveform और duration में play करता है, जिससे नियमित chord progression के ऊपर अप्रत्याशित single notes जुड़ते हैं
- हर बार नया chord या note आने पर तने के आकार की LEDs react करती हैं, और हर note का color circle of fifths में पास-पास के notes को मिलते-जुलते दिखने के हिसाब से map किया गया है
- implementation Raspberry Pi 3 B+ पर चलने वाले C++ audio program और Arduino Uno के FastLED LED control में बंटी है; दोनों devices serial port के जरिए note information का आदान-प्रदान करते हैं
Generative rules से बना score
- Part A, A2 से D5 तक संभव Major, Minor, Major 7th, Minor 7th chords और सभी inversions को enumerate करता है
- चुना गया chord 8 सेकंड तक play होता है, फिर मौजूदा chord से केवल एक note अलग रखने वाले chords में से किसी एक पर जाता है
- यह प्रक्रिया 8 सेकंड playback और adjacent chord selection को दोहराते हुए लगातार चलती रहती है
Sound generation rules
- Part B मौजूदा play हो रहे chord से एक note चुनता है
- चुना गया note random waveform में, random duration के लिए play होता है
- अगर duration छोटी हो, तो वह random number of times repeat होता है, फिर random समय तक wait करके वही प्रक्रिया दोहराई जाती है
Lighting response rules
- Part C, Part A में नया chord trigger होने पर हर stem को root से tip तक रोशन करता है
- light color chord के हर note से मेल खाता है, और circle of fifths में adjacent notes के रंग मिलते-जुलते shades रखते हैं
- Part D, Part B में note play होने पर stems में से किसी एक के tip को उस note से मेल खाने वाले bright color से illuminate करता है
Hardware और software implementation
- Part A और B को Raspberry Pi 3 B+ पर चलने वाला custom C++ program संभालता है
- यह note selection और audio buffer synthesis दोनों process करता है
- Part C और D Arduino Uno board के custom program से implement किए गए हैं
- FastLED का उपयोग करके WS2812B protocol LED strips से interface किया जाता है
- Raspberry Pi से Arduino तक भेजी जाने वाली note information serial port signals के जरिए आती-जाती है
Physical structure और operation
- LED strips घरेलू aquarium में इस्तेमाल होने वाली transparent tubes के अंदर से गुजरती हैं
- tubes को मोटे nickel wire से reinforce किया गया है, जिससे वे sculptable form लेती हैं
- गमले के नीचे wooden housing में microcomputers, wiring और sound system connection के लिए 3.5mm audio socket है
- power दो main power connections के जरिए आती है
- computers headless mode में चलते हैं और power on होते ही auto-start हो जाते हैं
1 टिप्पणियां
Hacker News की रायें
यह व्यक्ति एक शानदार endless acid banger का निर्माता भी है, जिससे आप browser में घंटों खेल सकते हैं
https://www.vitling.xyz/toys/acid-banger/
इसे आज़माने के बाद मैंने एक असली 303 clone भी खरीद लिया और उससे छेड़छाड़ शुरू कर दी। यह भी अच्छा है कि सभी demos बिना आवाज़ वाले “click to start” screen से खुलते हैं, और autoplay videos भी इस लेख की तरह default रूप से muted हैं
इस लेख में volume control देखने के लिए “silent gif” पर mouse ले जाना पड़ा, और acid banger में कहीं भी click करने से mute हटता है—यह पता लगाने से पहले मैं comment का आधा हिस्सा लिख चुका था
generative music की score को इस तरह की specification के रूप में लिखा देखना दिलचस्प है
यह इतनी विस्तृत है कि अगर कोई इन instructions के आधार पर अपना version फिर से implement करे, तो मूल रूप से वही “musical work” निकलेगा, लेकिन interpretation निश्चित रूप से अलग होगी। क्योंकि score कुछ हिस्सों को सटीक रूप से तय करती है, जबकि दूसरे choices खुले छोड़ती है। जैसे chords गिनाते समय “all inversions” का ठीक-ठीक मतलब क्या है, क्या इसमें open voicings भी शामिल हैं, arbitrary waveform की length किन values में से चुनी जाए, repetition तय करते समय “short” कितना short है, कौन सा waveform synthesizer इस्तेमाल करना है और उसे कैसे modulate करना है—ऐसे सवाल रह जाते हैं
ऐसे decisions वैसा ही हैं जैसे traditional instrument player score को interpret करके perform करते समय लेते हैं। यहाँ generative music coder इस “score” को follow करते हुए अपनी interpretation वाला program बना सकता है
Sonic Pi(https://sonic-pi.net/) में इसे implement करना एक मज़ेदार exercise था, और लगा कि मैं composer के intended direction के करीब कुछ बना पाया। उसमें video की recording जैसा माहौल है, लेकिन अगर यह कहना ठीक हो तो वह उस work का मेरा “performance” है। हालांकि actual run के समय perform तो Sonic Pi ही करता है
इस process ने specification और implementation के रिश्ते के बारे में भी दोबारा सोचने पर मजबूर किया। किसी algorithm की अलग-अलग programmers द्वारा की गई implementations को overall design नामक score के अलग-अलग “performances” के रूप में देखा जा सकता है, और बड़े system architecture के elements बनाने वाले developers band या orchestra में अपना part निभाने वाले performers जैसे लग सकते हैं। कुछ teams को conductor-cum-architect lead करता है, कुछ teams आपस में riffs exchange करते हुए improvise करती हैं और कभी-कभी solo लेती हैं। कुछ teams producer की specification के हिसाब से भले flashy न हों, पर solid performance देने वाले session musicians जैसी होती हैं
रविवार दोपहर के लिए यह एक अच्छा meditative coding exercise था, और इसने नजरिया बदल दिया
जब मैं अपने पुराने work को exhibit करना चाहता था, तब एक art curator से feedback मिला था; वह work यही था: https://www.vitling.xyz/welcome-to-tech-talk/. शुरुआत में उन्हें ठीक से समझ नहीं आया कि क्या हो रहा है, लेकिन जब मैंने working और अंदर क्या हो रहा है समझाया, तो उन्होंने कहा, “अब यह सचमुच अच्छा लग रहा है। लेकिन आप audience से सारे interesting parts छिपा रहे हैं”
generative art में मेरा “work” outcome के रूप में आने वाला audio या visuals नहीं, बल्कि ruleset या algorithm के ज्यादा करीब है। इसलिए मैं हमेशा यह दिखाने का तरीका ढूँढना चाहता था कि “box के अंदर” क्या हो रहा है। source code अच्छा हो सकता है, लेकिन सिर्फ उन लोगों के लिए जो उसे पढ़ सकते हैं, और core idea boilerplate और technical oddities के बीच दब जाना आसान है। इसलिए score के रूप में लिखने का विचार आया; मकसद था कि क्या हो रहा है उसका basic premise दिखे, लेकिन इतना ही कि details में खो न जाएँ
https://massmoca.org/event/walldrawing305/
इसलिए ज्यादा open और sparse voicings शायद काफी हद तक छूट जाएँगी
inversion chord के flavor को काफी बदल देती है
इस algorithm या https://www.vitling.xyz/toys/acid-banger/ को समझने में मदद करने वाली music theory की किताबों या courses की recommendations चाहिए
कुछ काफी सरल rules भी हैं जो predict करते हैं कि कुछ ठीक-ठाक सुनाई देगा, और कुछ ज्यादा complex rules भी हैं; और यह मशहूर है कि Baroque music algorithmic होती है, लेकिन अभी बिल्कुल समझ नहीं बन पा रही
पहले कभी मैंने इसी दिशा में खोजा था, लेकिन मैंने जो किताबें देखीं उनमें ठीक-ठीक क्या समस्या थी, यह याद नहीं है। शायद उनमें से ज्यादातर बहुत basic थीं, इसलिए मदद नहीं मिली। बहुत पहले मुझे बेहद basic solfège training मिली थी और मैं sheet music पढ़ सकता हूँ, लेकिन उस समय मैं इतने छोटा था कि अभी जो सवाल मन में हैं वे पूछ सकूँ या उस training का उद्देश्य समझ सकूँ
आखिरकार, खुद बहुत सारा music लिखे बिना music theory समझना मुश्किल है। यह JavaScript की किताब पढ़ने जैसा है: अगर आपने कभी software लिखा ही नहीं और आगे लिखने की कोई योजना भी नहीं है, तो उस किताब को सच में समझने का कोई तरीका नहीं
यह application कैसे काम करती होगी, समझाएँ तो हो सकता है कि minor में notes का subset, यानी scale degrees, शायद randomly चुना जाता हो। scale में 5 या कम notes का subset, यानी pentatonic scale, possible melody space को सीमित कर देता है, जिससे ज्यादातर configurations अच्छी सुनाई देती हैं। कम notes इस्तेमाल करने पर वह और predictable तरीके से सुरीली लगती है, लेकिन कम interesting हो सकती है। उदाहरण के लिए root chord बनाने वाले notes किसी भी क्रम में बजें, हमेशा अच्छे लगते हैं। acid lines आम तौर पर arpeggio के जरिए किसी minor chord का संकेत देती हैं, यानी किसी खास chord के ही notes से बनी repeating melody
साथ ही, किसी एक scale का subset हमेशा किसी दूसरे scale में भी हो सकता है। shared notes के subset का इस्तेमाल करने वाला section बनाकर फिर नए scale में बदलें, तो एक scale से दूसरे scale में modulate किया जा सकता है। इस तरह एक track संभव सभी scales से गुजर सकता है, और acid techno में लगभग सब minor scales होते हैं
जो चीज अभी आपके level से ऊपर की understanding वाले व्यक्ति के लिए लिखी गई हो, उसे उठाकर बहुत कुछ हासिल नहीं किया जा सकता। हर page को धीरे-धीरे, सोचे-समझे और विनम्रता से पढ़ना होगा, और सामने आने वाले हर term को पूरी तरह समझने में समय लगाना होगा। इस process में कई-कई घंटे side trips में निकलेंगे, और उनके अंदर भी दूसरे terms शाखाओं की तरह अंतहीन फैलते जाएँगे। interval, locrian/lydian जैसी बातों को skip करके यह उम्मीद नहीं की जा सकती कि वे अपने-आप समझ में आ जाएँगी
pitch क्या है, brain कुछ pitch combinations को “पसंद” और कुछ को नापसंद क्यों करता है, वगैरह पर बात करती है। music neurology पर कई theories के लिहाज से भी यह दिलचस्प किताब है, और शुरुआत में बहुत basic theory intro भी है
लेखक के लिए एक tip: Arduino हटाकर Raspberry Pi से WS281x strips को directly control करने वाली यह library इस्तेमाल करें, तो hardware और software complexity काफी घट सकती है: https://github.com/jgarff/rpi_ws281x
मैं Pi 4 पर इसका इस्तेमाल करके अपने घर की eaves पर लगी 466-pixel WS2815 strip को holiday decorations के लिए control कर रहा हूँ
इस project के अंदर दिलचस्प music theory छिपी है। बताए गए algorithm से एक chord से दूसरे chord में होने वाले सभी transitions या तो उसी chord में transition हैं—जैसे C major से उसके inversion में जाना या 7th note जोड़ना/हटाना—या Neo-Riemannian theory के तीन basic transformations P, L, R में से कोई एक हैं
details के लिए Neo-Riemannian theory का Wikipedia page देखें, और P, L, R का सार यह है। अगर कोई arbitrary chord x major है, तो P(x), L(x), R(x) सभी minor होंगे। अगर x minor है, तो P(x), L(x), R(x) सभी major होंगे। P, L, R सभी अपने-आप के inverse transformations हैं, यानी P(P(x)) = x, और L तथा R भी ऐसे ही हैं। P, L, R transformations के किसी भी sequence के जरिए किसी भी major या minor chord से किसी भी दूसरे major या minor chord तक जाया जा सकता है। उदाहरण के लिए C major से L और फिर R apply करने पर G major मिलता है, R और फिर P apply करने पर A major मिलता है, और L और फिर P apply करने पर E major मिलता है
Neo-Riemannian transformations से move करना smooth voice leading के जरिए “दूर” tonal centers—यानी शुरुआती key से ज्यादा common scale tones न रखने वाली जगहों—तक जल्दी पहुँचने का तरीका है। लेकिन इस piece को सुनते समय harmony अपेक्षाकृत stable लगी, इसलिए हैरानी हुई। दिलचस्प बात यह है कि algorithm की बनावट के कारण P transformation, L या R transformation, या उसी chord में रहने की तुलना में बहुत कम आता है। P transformation दूर की keys में तेजी से जाने का core ingredient है, लेकिन मेरे rough calculation के हिसाब से, Markov process के steady state में पहुँचने को मानें और lowest/highest pitch limits को ignore करें, तो सभी chord changes में केवल 1/27 ही P transformation हैं। steady state में यह भी निकलता है कि 7th chords, simple triads की तुलना में 16:11 ratio से ज्यादा common हैं
Raspberry Pi की limits और जानना चाहता हूँ, इसलिए technical details में रुचि है
क्या यह सब सिर्फ एक Raspberry Pi और उससे जुड़े बहुत सारे GPIO pins से handle नहीं किया जा सकता था? अभी Raspberry Pi कुछ कम utilized लग रहा है, और single board से simplify करना बेहतर लगता है। इससे एक अच्छा परिणाम यह भी होगा कि power connection भी सिर्फ एक चाहिए होगा
अगर Pi का काम सिर्फ “notes चुनना और audio buffer की actual synthesis” है, तो Arduino Uno भी यह निश्चित रूप से कर नहीं सकता क्या?
यह बात अच्छी लगी कि इसे सभी के समझने लायक pseudocode में लिखा गया है
मैंने भी ऐसे projects किए हैं, खासकर music generation वाला हिस्सा, इसलिए यह presentation style मुझे सच में बहुत पसंद है। अगर video demo भी हो तो और अच्छा होगा; कई code projects में लेखक सिर्फ लंबे text wall से समझाते हैं और शुरू करने से पहले ही interest खत्म हो जाता है
वाकई शानदार। काश ऐसी चीज़ बनाने के लिए detailed build instructions मिलें
इसे Four Tet set के intro के तौर पर भी इस्तेमाल किया जा सकता है :)
खूबसूरत। इससे ऐसे alien planet की कल्पना होती है जहाँ पौधे कुछ ऐसे हों
ऐसी चीज़ें मिलकर जंगल बना सकती हैं, और metronome या fireflies के synchronize होने की तरह एक-दूसरे के साथ तालमेल भी बिठा सकती हैं