என் மகளுடைய பள்ளி அறிவியல் முகாமில் ஒலியை அடிப்படையாக வைத்து ஏதாவது செய்யலாம் என்று ஆராய்ந்துகொண்டிருக்கிறேன். அதற்கு சி-சௌன்’ட் (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
கணினியில் கருநாடக இசை