Oscil Omega Jacob Joaquin June 4, 2010 jacobjoaquin@gmail.com csoundblog.com sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 0dbfs = 1.0 # define Synth # 1 # opcode ExpInterp, k, kkii kfreq_1, \ kfreq_2, \ ithis_point, \ in_points \ xin kvalue = kfreq_1 * (kfreq_2 / kfreq_1) ^ (ithis_point / (in_points - 1)) xout kvalue endop opcode OscilOmegaEngine, a, kkiii kfreq_1, \ ; Start frequency kfreq_2, \ ; End frequency in_oscils, \ ; Number of oscillators ifn, \ ; F-table of waveform ivoice \ ; Index of this voice xin kfreq ExpInterp kfreq_1, kfreq_2, ivoice, in_oscils a1 oscil 1, kfreq, ifn, 0 a2 init 0 if ivoice < in_oscils then a2 OscilOmegaEngine kfreq_1, kfreq_2, in_oscils, ifn, ivoice + 1 endif xout a1 + a2 endop opcode OscilOmega, a, kkii kfreq_1, \ ; Start frequency kfreq_2, \ ; End frequency in_oscils, \ ; Number of oscillators ifn, \ ; F-table of waveform xin a1 OscilOmegaEngine kfreq_1, kfreq_2, in_oscils, ifn, 0 xout a1 endop instr $Synth idur = p3 ; Duration iamp = p4 ; Amplitude ifreq_1 = p5 ; Left frequency ifreq_2 = p6 ; Right frequency idetune = p7 ; OscilOmega voice detune ifn = p8 ; F-table in_oscils = p9 ; Number of oscillators/voices for OscilOmega a1 OscilOmega ifreq_1 * (1 + idetune), ifreq_1 * (1 - idetune), \ in_oscils, ifn a2 OscilOmega ifreq_2 * (1 + idetune), ifreq_2 * (1 - idetune), \ in_oscils, ifn aenv linseg 0, 0.01, 1, idur - 0.02, 1, 0.01, 0 a1 = a1 / in_oscils * iamp * aenv a2 = a2 / in_oscils * iamp * aenv outs a1, a2 endin # define Synth # 1 # f 1 0 [2 ^ 16] 10 1 f 2 0 [2 ^ 16] -7 1 [2 ^ 16] -1 f 3 0 8 -2 1 -1 1 1 -1 -1 -1 1 f 4 0 [2 ^ 12] 10 1.0 0.5 0.333333333333 0.25 0.2 0.166666666667 \ 0.142857142857 0.125 0.111111111111 0.1 0.0909090909091 \ 0.0833333333333 0.0769230769231 0.0714285714286 \ 0.0666666666667 0.0625 0.0588235294118 0.0555555555556 \ 0.0526315789474 0.05 0.047619047619 0.0454545454545 \ 0.0434782608696 0.0416666666667 i $Synth 0 12 0.68 50 55 0.011 4 10 s i $Synth 0 12 0.85 100 101 0.1 4 10 s i $Synth 0 8 2.46 600 800 0.618 1 100 s i $Synth 0 8 0.7 101 100 0.001 2 100 s i $Synth 0 0.333 0.6 50 55 0.0159 3 23 i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . < < < . < i $Synth + . . 200 150 0.5 . 12