என் மகளுடைய பள்ளி அறிவியல் முகாமில் ஒலியை அடிப்படையாக வைத்து ஏதாவது செய்யலாம் என்று ஆராய்ந்துகொண்டிருக்கிறேன். அதற்கு சி-சௌன்’ட் (CSound) என்ற ஒலி நிரல் மொழியை பயன்படுத்த முயற்சித்துக் கொண்டிருக்கிறேன். நான் பட்டயப்படிப்பு படித்த காலத்தில் மின்னணுவியல் கொசு விரட்டி செய்துபார்த்து இருக்கிறேன். மிகு அதிர்வு ஒலி உண்டாக்கினால் கொசுக்கள் அண்டாது என்ற நம்பிக்கையில் இந்த விரட்டிகள் வடிவமைக்கப் படுகின்றன. அது சரியா தவறா? எத்தனை மிகு அதிர்வலை வரை நமக்கு கேட்கிறது போன்றவற்றை ஆய்வு செய்ய உத்தேசித்திருக்கிறோம்.
தேவையான விடயங்களை சேகரித்த பொழுது இந்த சுருதிப்பெட்டி கண்ணில் பட்டது. இங்கே உங்கள் பார்வைக்காக.
இந்த சுருதிப்பெட்டியை செயல்படுத்த நீங்கள் சி-சௌன்’ட் சொவ்வறையை (http://www.csounds.com/downloads) தரவிறக்கிக் கொள்ள வேண்டும்.
இந்த நிரலிக்கு கீழ்க்கண்ட கட்டளைகள் (அ. நிரல்) அடங்கிய கோப்பைக் கொடுத்தால் படத்தில் உள்ளதுபோல இடைமுகப்பை உருவாக்கும். முகப்பில் உங்களுக்கு தேவையானபடி எண்களை பொருத்தி பயன்படுத்திக்கொள்ளலாம். மேலதிக விபரங்களுக்கு சுட்டியைக்காண்க: http://mysterybear.net/article/8/drone-instrument-sruti-box. இந்த நிரல் இதே தளத்தில் SrutiDrone.csd.txt என்ற பெயரில் இணைக்கப் பட்டுள்ளது. நிரலின் வடிமைப்பை காண்பிக்க அதை அப்படியே இங்கே கொடுத்துள்ளேன்.
சி-சௌன்’டையும் இந்த நிரலையும் தரவிக்கிக்கொண்ட பின் நிரல் கோப்பின் பெயரை SrutiDrone.csd என்று மாற்றிக்கொள்ளவும். சி-சௌன்’டை நிருவிக் கொண்டபின் முனையத்தில் இருந்து இவ்வாறு இயக்கிக்கொள்ளலாம்:
c:>csound StrutiDrone.csd
இந்த நிரல் மொழி பார்க்க கடினமாகத் தோன்றினாலும் ஒலி/இசையின் தன்மைகளை அறிந்தவர்கள் எளிதில் புரிந்து கொள்ளலாம். பல லட்சம் விலை ஆகும் சிந்த்தசைசரைவிட (synthesizer) அதிக திறம் வாய்ந்தது எனபதையும் அறிந்து கொள்ளலாம். கணினி விளையாட்டுக்கள் திரைப்படங்கள் ஆகியவற்றில் தனித்தன்மையான இசைக் கோர்வைக்கு சி-சௌன்’ட் பாவிக்கப்படுவதாக அறிகிறேன்.
சி-சௌன்’ட் உருவாக்கிய இசைகள் சில:
இசை 1
இசை 2
உதாரணமாக சிந்த்தசைசரில் கருநாடக இசையை உருவாக்குவது கடினம். குறிப்பாக கருநாடக இசையின் கமகம் (microtonal?, intonation?) என்னும் ஒரு சுரத்தில் இருந்து அடுத்த சுரத்திற்கு இழைந்து குழைந்து மாறும் வித்தை அதற்கு கைவராது.
ஆனால் சி-சௌன்’ட்-ஐ வைத்து சில ஆண்டுகளுக்கு முன்பு கணினியில் கருநாடக இசையை உருவாக்க கொஞ்சம் வேலை செய்தேன். (முன்பு அப்படியெல்லாம் விளையாட நேரம் இருந்தது) எனக்கு இசையில் பயிற்சி இல்லை என்றாலும் காயகா (http://carnatic2000.tripod.com/) என்ற கருநாடக இசை சொவ்வறைப் பற்றிய விளக்கங்களிலிருந்து, அவர்கள் உபயோகிக்கும் ச-ரி-க-ம-ப-த-நி குறியீட்டில் எழுதப்பட்ட இசைக் கோர்வையை சி-சௌன்’ட் மூலம் வீணை இசை வருமாறு செய்தேன். அந்த கணினி பழுதடைந்துவிட்டதால் முக்கியமான சில வேலைகள் அதில் முடங்கிப்போய்விட்டன. கொஞ்சம் நேரம் கிடைத்தால் மீண்டும் அந்த வேலையை முதலில் இருந்து ஆரம்பிக்க வேண்டும்.
சி-சௌன்’டில் முதலில் நமக்கு வேண்டிய இசைக்கருவி(களை) உள்ளடக்கிய குழுவை (orchestra) உருவாக்கிக் கொள்ளவேண்டும். பின்னர் அந்த குழுவுக்கு எந்த இசையை வாசிக்க வேண்டுமென்று அலை வரிசை எண்களாகப் பட்டியல் (score) தரவேண்டும். ஆனால் இப்படி எண்களின் பட்டியலாக தருவது சற்று கடினம்தான். அதற்கு பதிலாக, ஆங்கில சுரக் குறியீடுகளைக் கொண்டு இசையை குறித்துக்கொள்ள முடியுமானால் எளிதாக இருக்கும் இல்லையா? "abc" என்ற பெயரில் அத்தகையக் குறியீடு ஏற்கனவே செந்தரப்படுத்த பட்டுள்ளது. இது இசைப் பலகையில் உள்ள கட்டைகளுக்கு வழங்கும் C,D,E,F,G,A,B குறியீடுகளை வைத்தே இசைக் கோர்வையை எழுதிக்கொள்ளும் முறை.
அதன்படி, பைத்தான் நிரல் மொழி உதவியுடன் "abc" குறியீட்டிலிருந்து அலை எண்களாக மாற்றிக் கொண்டால் இசைக்கோர்வையை எழுதுவது எளிதாகும். மேலும் பல பாடல்கள் "abc" குறியீட்டில் முன்பே எழுதப்பட்டுள்ளன. நாம் விரும்பும் பாடலை விரும்பிய இசைக்கருவிகளில் மீட்கச் செய்து கேட்கலாம். அப்படி ஒரு "abc" பாடல் ஒன்றை (John Dowland's "Can She Excuse My Wrongs") சி-சௌன்’டின் கிடாரில் வாசிக்கப்பட்ட இசை இங்கே
;------------------------------------------------------------------------- ; ; Drone Instrument/Sruti Box ; by Dave Seidel (dave at mysterybear dot com) ; http://mysterybear.net ; ; Copyright 2005, Dave Seidel. Some rights reserved. ; This work is licensed under a Creative Commons "Attribution" License. ; http://creativecommons.org/licenses/by/2.0/ ; ;-------------------------------------------------------------------------;-+P ; for CsoundAV realtime ;-o devaudio ; for MyCsound4 & flcsound (csoundgbs) realtime. Adding a -b1000 flag to this line may help performance. -o dac ; for Csound5 ;------------------------------------------------------------------------- ; globals ;------------------------------------------------------------------------- sr = 44100 kr = 441 ksmps = 100 nchnls = 1 ; basic offset value for Risset effect giofs init .01 ; zak channels zakinit 16, 16 ;------------------------------------------------------------------------- ; waveform tables ;------------------------------------------------------------------------- giTblSz init 1048576 ; pure sine wave giFn1 ftgen 1, 0, giTblSz, 10, 1 ; sawtooth wave � all partials (through 17) at a strength of 1/harmonic# giFn2 ftgen 2, 0, giTblSz, 10, 1, .5, .3333, .25, .2, .1667, .1428, .125, .111, .1, .0909, .0833, .077, .0714, .0667, .0625, .0588 ; first 13 partials, strength = 1/n + 1/(n-1) giFn3 ftgen 3, 0, giTblSz, 10, 1, 1.5, .8333, .58, .45, .367, .31, .268, .236, .211, .1909, .1742, .1603 ; square wave � odd partials (through 19) at a strength of 1/harmonic# giFn4 ftgen 4, 0, giTblSz, 9, 1,1,0, 3,.3333,0, 5,.2,0, 7,.1428,0, 9,.111,0, 11,.0909,0, 13,.077,0, 15,.0667,0, 17,.0588,0, 19,.0526,0 ; odd partials to 19, strength = 1/n, where n is ordinal to the odd set giFn5 ftgen 5, 0, giTblSz, 9, 1,1,0, 3,.5,0, 5,.3333,0, 7,.25,0, 9,.2,0, 11,.1667,0, 13,.1429,0, 15,.125,0, 17,.1111,0, 19,.1,0 ; prime partials to 23, strength = 1/n giFn6 ftgen 6, 0, giTblSz, 9, 1,1,0, 2,.5,0, 3,.3333,0, 5,.2,0, 7,.143,0, 11,.0909,0, 13,.077,0, 17,.0588,0, 19,.0526,0, 23,.0435,0, 27,.037,0 ; primes to 23, strength = 1/n, where n is ordinal to the prime set giFn7 ftgen 7, 0, giTblSz, 9, 1,1,0, 2,.5,0, 3,.3333,0, 5,.25,0, 7,.20,0, 11,.1667,0, 13,.1429,0, 17,.125,0, 19,.1111,0, 23,.1,0, 27,.0909,0 ; partials in the Fibonacci series to 89, strength = 1/n giFn8 ftgen 8, 0, giTblSz, 9, 1,1,0, 2,.5,0, 3,.3333,0, 5,.2,0, 8,.125,0, 13,.0769,0, 21,.0476,0, 34,.0294,0, 55,.0182,0, 89,.0112,0 144,.0069,0 ; fibs to 89, strength = 1/n, where n is ordinal to the fib set giFn9 ftgen 9, 0, giTblSz, 9, 1,1,0, 2,.5,0, 3,.3333,0, 5,.25,0, 8,.2,0, 13,.1667,0, 21,.1429,0, 34,.125,0, 55,.1111,0, 89,.1,0, 144,.0909,0 ;--------------------------------------------------------------------------- ; orchestra macros ;--------------------------------------------------------------------------- ; base pitch in specified octave above base #define BOCT(O) #gkroot*(2^($O.))# ; for UI #define XOFS #50# #define X(xx) #($XOFS.+($xx.))# #define YOFS #0# #define Y(yy) #($YOFS.+($yy.))# ;------------------------------------------------------------------------- ; UI ;------------------------------------------------------------------------- FLpanel "Drone Instrument/Sruti Box (Dave Seidel, 1/2005)", 530, 420, 100, 100 ; per-drone settings, in vertical columns by drone gkd1,gi1 FLbutton "1", 1, 0, 2, 40, 30, $X.(35), 35, -1 gkd2,gi2 FLbutton "2", 1, 0, 2, 40, 30, $X.(138), 35, -1 gkd3,gi3 FLbutton "3", 1, 0, 2, 40, 30, $X.(241), 35, -1 gkd4,gi4 FLbutton "4", 1, 0, 2, 40, 30, $X.(344), 35, -1 gknu1,i1a FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(6), 75, -1 FLsetVal_i 1, i1a gknu2,i2a FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(109), 75, -1 FLsetVal_i 3, i2a gknu3,i3a FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(212), 75, -1 FLsetVal_i 2, i3a gknu4,i4a FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(315), 75, -1 FLsetVal_i 2, i4a gkde1,i1b FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(6), 105, -1 FLsetVal_i 1, i1b gkde2,i2b FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(109), 105, -1 FLsetVal_i 2, i2b gkde3,i3b FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(212), 105, -1 FLsetVal_i 1, i3b gkde4,i4b FLcount " ", 1, 1500, 1, 10, 1, 98, 25, $X.(315), 105, -1 FLsetVal_i 1, i4b gkoc1,i1c FLcount " ", -7, 7, 1, 1, 1, 98, 25, $X.(6), 150, -1 FLsetVal_i 1, i1c gkoc2,i2c FLcount " ", -7, 7, 1, 1, 1, 98, 25, $X.(109), 150, -1 FLsetVal_i 1, i2c gkoc3,i3c FLcount " ", -7, 7, 1, 1, 1, 98, 25, $X.(212), 150, -1 FLsetVal_i 1, i3c gkoc4,i4c FLcount " ", -7, 7, 1, 1, 1, 98, 25, $X.(315), 150, -1 FLsetVal_i 1, i4c gkx1,gi1a FLbutton " mute", 1, 0, 3, 40, 40, $X.(35), 190, -1 gkx2,gi2b FLbutton " mute", 1, 0, 3, 40, 40, $X.(138), 190, -1 gkx3,gi3c FLbutton " mute", 1, 0, 3, 40, 40, $X.(241), 190, -1 gkx4,gi4d FLbutton " mute", 1, 0, 3, 40, 40, $X.(344), 190, -1 ; global settings and controls gkroot,iroot FLcount "Root (Hz)", 0.00, 440.00, .05, 5, 1,\ 124, 30, $X.(145), 235, -1 FLsetVal_i 60.00, iroot il12 FLbox "Waveforms", 1, 1, 14, 70, 25, $X.(12), 295 gktbl,itbl FLbutBank 1, 9, 1, 300, 25, $X.(90), 295, -1 FLsetVal_i 0, itbl FLsetText "0=Sine 1,2=Sawtooth 3,4=Square 5,6=Prime 7,8=Fibonacci", itbl gkdall,giAll FLbutton "Play", 1, 0, 2, 60, 30, $X.(30), 355, -1 gkdoff,giOff FLbutton "Stop", 1, 0, 2, 60, 30, $X.(93), 355, -1 gkOfs,iR FLbutton "Harmonic arpeggio", 1, 0, 3,\ 140, 30, $X.(170), 355, -1 FLpanelEnd FLrun ;--------------------------------------------------------------------------------------- ; drone scheduler (thanks to Art Hunkins) ;--------------------------------------------------------------------------------------- instr 3 gkdoff1 trigger gkdoff, .5, 0 schedkwhen gkdoff1, 0, 0, 5, 0, 1 gkdall1 trigger gkdall, .5, 0 schedkwhen gkdall1, 0, 0, 6, 0, 1 DRONE1: if gkx1 == 1 kgoto DRONE2 kd1 trigger gkd1, .5, 0 schedkwhen kd1, 0, 0, 4.1, 0, -1, 1300, gktbl+1, 2, $BOCT.(gkoc1), gknu1, gkde1, giofs kd1a trigger gkd1, .5, 1 schedkwhen kd1a, 0, 0, -4.1, 0, 0 DRONE2: if gkx2 == 1 kgoto DRONE3 kd2 trigger gkd2, .5, 0 schedkwhen kd2, 0, 0, 4.2, 0, -1, 1300, gktbl+1, 3, $BOCT.(gkoc2), gknu2, gkde2, giofs kd2a trigger gkd2, .5, 1 schedkwhen kd2a, 0, 0, -4.2, 0, 0 DRONE3: if gkx3 == 1 kgoto DRONE4 kd3 trigger gkd3, .5, 0 schedkwhen kd3, 0, 0, 4.3, 0, -1, 1300, gktbl+1, 4, $BOCT.(gkoc3), gknu3, gkde3, giofs kd3a trigger gkd3, .5, 1 schedkwhen kd3a, 0, 0, -4.3, 0, 0 DRONE4: if gkx4 == 1 kgoto DONE kd4 trigger gkd4, .5, 0 schedkwhen kd4, 0, 0, 4.4, 0, -1, 1300, gktbl+1, 5, $BOCT.(gkoc4), gknu4, gkde4, giofs kd4a trigger gkd4, .5, 1 schedkwhen kd4a, 0, 0, -4.4, 0, 0 DONE: endin ; turn off drone buttons when Stop button is pressed instr 5 FLsetVal_i 0, giAll FLsetVal_i 0, gi1 FLsetVal_i 0, gi2 FLsetVal_i 0, gi3 FLsetVal_i 0, gi4 endin ; turn on drone buttons when All button is pressed instr 6 gkdoff1 = 0 gkd1 = 1 gkd2 = 1 gkd3 = 1 gkd4 = 1 FLsetVal_i 0, giOff FLsetVal_i 1, gi1 FLsetVal_i 1, gi2 FLsetVal_i 1, gi3 FLsetVal_i 1, gi4 endin ;--------------------------------------------------------------------------- ; Risset harmonic arpeggio instrument, adapted from: ; ACCCI: 02_43_1.ORC ; timbre: tibetan chant ; synthesis: additive same units(02) ; basic instrument with minimal differences in frequency(43) ; arpeggio instrument by Risset ; source: Phase6, Lorrain(1980); Boulanger(1990): risset1.orc ; coded: jpg 9/93 ;--------------------------------------------------------------------------- instr 4 idur = p3 ; duration iamp = p4/9 ; amplitude ifn = p5 ; function table number (waveform) izch = p6 ; zak output channel inum = p8 iden = p9 ifrac = inum/iden ibase = p7 ifreq = ibase*ifrac ; pitch (base * (n/m)) print inum, iden, ifrac, ibase, ifreq iflag = i(gkOfs) if iflag == 1 igoto USE_OFS ioff = 0 iamp2 = .75 ; scale down output if no offsets igoto SET_OFS USE_OFS: iamp2 = 1 ;ioff = p10 ; same offset for all ;ioff = ifrac*p10 ; proportional to interval ioff = ((iden*2)/inum)*p10 ; inversely proportional to ratio print ioff SET_OFS: ioff1 = ioff ; oscillator offset for arpeggio ioff2 = 2*ioff ; . ioff3 = 3*ioff ; . ioff4 = 4*ioff ; . if gkdoff1 == 0 goto skip turnoff skip: FLsetVal_i 0, giOff ae linenr iamp, 1, 3, .03 ; simple envelope a1 oscil ae, ifreq, ifn a2 oscil ae, ifreq+ioff1, ifn ; nine oscillators with the same envelope a3 oscil ae, ifreq+ioff2, ifn ; and waveform, but slightly different a4 oscil ae, ifreq+ioff3, ifn ; frequencies, create harmonic arpeggio a5 oscil ae, ifreq+ioff4, ifn a6 oscil ae, ifreq-ioff1, ifn a7 oscil ae, ifreq-ioff2, ifn a8 oscil ae, ifreq-ioff3, ifn a9 oscil ae, ifreq-ioff4, ifn zaw (a1+a2+a3+a4+a5+a6+a7+a8+a9)*iamp2, izch endin ;--------------------------------------------------------------------------- ; mixer (adapted from Mikelson, "Modelling a Multieffects Processor") ; added 4 more channels and a simple reverb at the end ;--------------------------------------------------------------------------- instr 3099 asig1 zar p4 igl1 init p5*p6 igr1 init p5*(1-p6) asig2 zar p7 igl2 init p8*p9 igr2 init p8*(1-p9) asig3 zar p10 igl3 init p11*p12 igr3 init p11*(1-p12) asig4 zar p13 igl4 init p14*p15 igr4 init p14*(1-p15) asig5 zar p16 igl5 init p17*p17 igr5 init p17*(1-p18) asig6 zar p19 igl6 init p20*p21 igr6 init p20*(1-p21) asig7 zar p22 igl7 init p23*p24 igr7 init p23*(1-p24) asig8 zar p25 igl8 init p26*p27 igr8 init p26*(1-p27) asigl = asig1*igl1 + asig2*igl2 + asig3*igl3 + asig4*igl4 + asig5*igl5 + asig6*igl6 + asig7*igl7 + asig8*igl8 asigr = asig1*igr1 + asig2*igr2 + asig3*igr3 + asig4*igr4 + asig5*igr5 + asig6*igr6 + asig7*igr7 + asig8*igr8 irvtime = p28 irvfqc = p29 irvlev = p30 aoutl nreverb asigl, irvtime, irvfqc aoutr nreverb asigr, irvtime, irvfqc ; outs asigl+(aoutl/irvlev), asigr+(aoutr/irvlev) out asigl+(aoutl/irvlev) + asigr+(aoutr/irvlev) zacl 0, 16 endin ;--------------------------------------------------------------------------- ; score ;--------------------------------------------------------------------------- ; mixer ; ; channel 1: unused ; channel 2-5: drones ; channel 6-8: unused ; ;i 3099 0 3600 \ ; 1 4 .5 \ ; 2 1.5 .80 \ ; 3 1.5 .20 \ ; 4 1.5 .75 \ ; 5 1.5 .40 \ ; 6 0 .5 \ ; 7 0 .5 \ ; 8 0 .5 \ ; 5 .3 6 i 3099 0 3600 \ 1 4 .5 \ 2 1.5 .5 \ 3 1.5 .5 \ 4 1.5 .5 \ 5 1.5 .5 \ 6 0 .5 \ 7 0 .5 \ 8 0 .5 \ 5 .3 6 i 3 0 3600 e
உசாத்துணைகள்:
சி-சௌன்’ட்
பாடங்கள்
சில உதாரணங்கள்
abc இசைக் குறியீடு
ABC-CSound பைத்தான் உதவியுடன் ABC to CSound
கணினியில் கருநாடக இசை
1 மறுமொழிகள்:
http://mysterybear.net/article/51/drone-instrumentsruti-box-new-version
Post a Comment