Fragments of a Bohlen-Pierce Composition Jacob Joaquin Feb 28, 2010 jacobjoaquin@gmail.com csound.noisepages.com sr = 44100 kr = 44100 ksmps = 1 nchnls = 2 0dbfs = 1.0 ; Tune Instruments # define TUNE # 264.99816498389697 # ; 440 * 3 ^ (-6 / 13) ; Master Amplitude (not fully implemented) # define AMP # 1.0 # ; Instruments # define Init # 1 # # define Fade_Player # 2 # # define Fade_Synth # 3 # # define Fade_Player_2 # 4 # # define Fade_Synth_2 # 5 # # define Fade_Reverb # 6 # # define FM_Brass_Cycler # 7 # # define FM_Brass # 8 # # define FM_Brass_Echo # 9 # ; F-Tables # define T_Sine # 1 # ; Sine wave # define T_BP # 13 # ; Just intonation Bohlen-Pierce scale # define T_Theme_Pitches # 20 # ; Theme pitches # define T_Theme_2 # 21 # ; Theme pitches ; Sine wave gitemp ftgen $T_Sine, 0, 2 ^ 16, 10, 1 ; Just Intonation Bohlen-Pierce Tuning gitemp ftgen $T_BP, 0, 64, -2, 13, 3, $TUNE, 60, \ 1, \ 27 / 25, \ 25 / 21, \ 9 / 7, \ 7 / 5, \ 75 / 49, \ 5 / 3, \ 9 / 5, \ 49 / 25, \ 15 / 7, \ 7 / 3, \ 63 / 25, \ 25 / 9, \ 3 ; Note tables gitemp ftgen $T_Theme_Pitches, 0, -5, -2, 0, 1, 3, 6, 7 gitemp ftgen $T_Theme_2, 0, 8, -2, 6, 3, 0, 1, 3, 4, -1, -1 ; -1 == don't play opcode Get_Ratio, i, i i_interval xin iratio cpstuni 60 + i_interval, 13 iratio = iratio / $TUNE xout iratio endop opcode Get_Ratio_k, k, k k_interval xin kratio cpstun 1, 60 + k_interval, 13 kratio = kratio / $TUNE xout kratio endop instr $Init a0 = 0 ; Fade chn_a "verb_left", 3 chn_a "verb_right", 3 chnset a0, "verb_left" chnset a0, "verb_right" ; FM_Brass chn_a "FM_Brass_send", 3 chnset a0, "FM_Brass_send" turnoff endin instr $Fade_Player itime = p4 ; Time the Player instr is active ibase_dur = p5 ; Base duration of notes generated ibase_interval = p6 ; Base interval ibase_width = p7 ; Base interval width ; Play Synth iratio Get_Ratio int(rnd(14)) idur = ibase_dur * iratio iamp = rnd(0.7) + 0.2 ibase = ibase_interval + int(rnd(ibase_width)) i_interval = int(rnd(14)) iratio Get_Ratio int(rnd(14)) i_index = iratio idistance = 0.6 + rnd(0.4) ipan = rnd(1) event_i "i", $Fade_Synth, 0, idur, iamp, ibase, i_interval, i_index, \ idistance, ipan ; Play Player inext = idur * 0.4 itime = itime - inext if (itime > 0) then event_i "i", $Fade_Player, inext, 1, itime, ibase_dur, \ ibase_interval, ibase_width endif turnoff endin instr $Fade_Synth idur = p3 ; Duration iamp = p4 ; Amplitude ibase = p5 ; Base note iratio_interval = p6 ; Modulation ratio i_index = p7 ; Modulation index idistance = p8 ; Front to back, 0 .. 1 ipan = p9 ; Pan position ; Stream Bohlen-Pierce ratios iratio Get_Ratio iratio_interval ; Amp envelope iratio_env Get_Ratio int(rnd(12)) + 1 iratio_env = (iratio_env - 1) / 2 kenv expseg 0.001, idur * iratio_env, 1, idur * (1 - iratio_env), 0.001 ; FM synth kfreq cpstun 1, ibase, 13 a1 foscil iamp, kfreq, 1, iratio, i_index, $T_Sine a1 = a1 * kenv ; Pan aleft = a1 * sqrt(1 - ipan) aright = a1 * sqrt(ipan) ; Send to out and bus outs aleft * sqrt(1 - idistance) * $AMP, aright * sqrt(1 - idistance) * $AMP chnmix aleft * sqrt(idistance), "verb_left" chnmix aright * sqrt(idistance), "verb_right" endin instr $Fade_Player_2 ibeat = p3 ; Duration itime = p4 * ibeat ; Time the Player instr is active ibase_dur = p5 ; Base duration of notes generated ibase_interval = p6 ; Base interval itable = p7 ; Table of stored pitches ; Play Synth iratio Get_Ratio int(rnd(14)) idur = ibase_dur * iratio iamp = rnd(0.7) + 0.2 ibase tab_i int(rnd(ftlen(itable))), itable print ibase ibase = ibase + ibase_interval print ibase i_interval = int(rnd(14)) iratio Get_Ratio int(rnd(14)) i_index = iratio idistance = 0.6 + rnd(0.4) ipan = rnd(1) event_i "i", $Fade_Synth, 0, idur, iamp, ibase, i_interval, i_index, \ idistance, ipan ; Play Player inext = idur * 0.4 itime = itime - inext if (itime > 0) then event_i "i", $Fade_Player_2, inext, 1, itime, ibase_dur, \ ibase_interval, itable endif turnoff endin instr $Fade_Synth_2 idur = p3 ; Duration iamp = p4 ; Amplitude ibase = p5 ; Base note iratio_interval = p6 ; Modulation ratio i_index = p7 ; Modulation index idistance = p8 ; Front to back, 0 .. 1 ienv_peak = p9 ; Peak of amp envelope, 0 .. 1 ipan = p10 ; Pan position ; Stream Bohlen-Pierce ratios iratio Get_Ratio iratio_interval ; Amp envelope kenv expseg 0.001, idur * ienv_peak, 1, idur * (1 - ienv_peak), 0.001 ; FM synth kfreq cpstun 1, ibase, 13 a1 foscil iamp, kfreq, 1, iratio, i_index, $T_Sine a1 = a1 * kenv ; Pan aleft = a1 * sqrt(1 - ipan) aright = a1 * sqrt(ipan) ; Send to out and bus outs aleft * sqrt(1 - idistance) * $AMP, aright * sqrt(1 - idistance) * $AMP chnmix aleft * sqrt(idistance), "verb_left" chnmix aright * sqrt(idistance), "verb_right" endin instr $Fade_Reverb iroom_size = p4 ; Size of room idamp = p5 ; High frequency dampening aleft chnget "verb_left" aright chnget "verb_right" aleft delay aleft, 0.22 aright delay aright, 0.2 al, ar freeverb aright, aleft, iroom_size, idamp outs al * $AMP, ar * $AMP chnclear "verb_left" chnclear "verb_right" endin instr $FM_Brass_Cycler idur = p3 ; Duration iamp = p4 ; Amplitude ibase = p5 ; Base note itable = p6 ; Table of notes istart_rate = p7 ; Start rate of cycler iend_rate = p8 ; End rate of cycler ilength = ftlen(itable) arate expon istart_rate, idur, iend_rate aphasor phasor arate / ilength, 0.5 - 1 / sr kphasor downsamp aphasor ktrig trigger kphasor, 0.5, 1 kctr init 0 ktable tab kctr, itable if (ktrig == 1) then kctr = (kctr + 1) % ilength if (ktable >= 0) then event "i", $FM_Brass, 0, 2, iamp, ktable + ibase, 0.5, 0.6 endif endif endin instr $FM_Brass idur = p3 iamp = p4 ipch = p5 ivelocity = p6 ksend = p7 kamp linseg 0, 0.05, iamp, idur - 0.1, iamp, 0.05, 0 ; Frequency ifreq = $TUNE * 3 ^ ((ipch - 60) / 13) kindex linseg 1, idur, 0 ; FM Synth a1 foscil ivelocity, ifreq, 1, 1, 12 * ivelocity * kindex, \ $T_Sine a1 = a1 * kamp ; Outputs outs a1, a1 chnmix a1 * ksend, "FM_Brass_send" endin instr $FM_Brass_Echo iamp = p4 ; Amplitude itime = p5 ; Time of delay ifb = p6 ; Delay feedback amount iroom_size = p7 ; Size of room, for reverb idamp = p8 ; High frequency dampening of reverb ; Receive send signal from Synth a0 chnget "FM_Brass_send" ; Effects adelay delayr itime delayw a0 + adelay * ifb al, ar freeverb adelay, adelay, 0.1, 0.2 ; Outputs outs al * iamp, ar * iamp chnclear "FM_Brass_send" endin ; Instruments # define Init # 1 # # define Fade_Player # 2 # # define Fade_Synth # 3 # # define Fade_Player_2 # 4 # # define Fade_Synth_2 # 5 # # define Fade_Reverb # 6 # # define FM_Brass_Cycler # 7 # # define FM_Brass # 8 # # define FM_Brass_Echo # 9 # ; F-Tables # define T_Sine # 1 # ; Sine wave # define T_BP # 13 # ; Just intonation Bohlen-Pierce scale # define T_Theme_Pitches # 20 # ; Theme pitches # define T_Theme_2 # 21 # ; Theme pitches t 0 80 i $Init 0 1 ; Turn on echo effects i $FM_Brass_Echo 0 200 1 0.333 0.5 0.2 0.2 i $Fade_Reverb 0 200 0.7 0.7 ; ---- Fragment 1 ---- i $FM_Brass 0 1 1 56 0.3 0.5 i $FM_Brass 1 1.5 1 63 0.35 . i $FM_Brass 2.5 0.5 1 62 0.3 . i $FM_Brass 3 1 0.9 59 0.28 0.9 i $FM_Brass 8 0.5 1.2 59 0.32 0.5 i $FM_Brass 8.5 1 . 57 0.3 . i $FM_Brass 9.5 0.5 . 62 0.32 0.3 i $FM_Brass 10 2 1.02 62 0.35 0.2 i $Fade_Synth_2 9.25 3 0.5 62 11 4 0.7 0.9 0.5 i $FM_Brass 16 1 1 56 0.3 0.5 i $FM_Brass 17 1.5 1 63 0.35 . i $FM_Brass 18.5 0.5 1 62 0.3 . i $FM_Brass 19 1 0.9 59 0.28 0.9 i $FM_Brass 24 0.5 1.2 59 0.32 0.5 i $FM_Brass 24.5 1 . 57 0.3 . i $FM_Brass 25.5 0.5 . 62 0.32 0.3 i $FM_Brass 26 2 1.02 62 0.35 0.2 i $Fade_Synth_2 18.9 1 0.5 59 6 4 0.7 0.05 0.5 i $Fade_Synth_2 25.5 12 0.5 67 6 4 0.7 0.5 0.5 i $FM_Brass 32 1 1 56 0.3 0.5 i $FM_Brass 33 1.5 1 63 0.35 . i $FM_Brass 34.5 0.5 1 62 0.3 . i $FM_Brass 35 1 0.9 59 0.28 0.9 i $FM_Brass 40 0.5 1.2 59 0.32 0.5 i $FM_Brass 40.5 1 . 57 0.3 . i $FM_Brass 41.5 0.5 . 62 0.32 0.3 i $FM_Brass 42 2 1.02 62 0.35 0.8 i $Fade_Synth_2 32 8 0.5 43 0 4 0.7 0.4 0.5 i $Fade_Synth_2 38 4 0.5 62 0 10 0.7 0.9 0.5 i $FM_Brass 48 1 1 56 0.3 0.5 i $FM_Brass 49 1.5 1 63 0.35 . i $FM_Brass 50.5 0.5 1 62 0.3 . i $FM_Brass 51 4 0.9 59 0.28 0.9 i $Fade_Synth_2 42 14 0.5 46 0 4 0.7 0.95 0.5 ; ---- Fragment 2 ---- i $Fade_Player_2 56 1 6 0.6 56 $T_Theme_Pitches i $FM_Brass 60 1 1 42 0.3 0.8 i $FM_Brass 61 3 1 40 0.3 0.8 i $FM_Brass 64 0.5 1 42 0.3 0.8 i $FM_Brass 64.5 0.5 1 40 0.3 0.8 i $FM_Brass 65 3 1 39 0.3 0.8 i $Fade_Player_2 68 1 2 0.2 69 $T_Theme_Pitches i $FM_Brass 76 1 1 42 0.3 0.8 i $FM_Brass 77 3 1 40 0.3 0.8 i $FM_Brass 80 0.5 1 42 0.3 0.8 i $FM_Brass 80.5 0.5 1 40 0.3 0.8 i $FM_Brass 81 4 1 45 0.3 0.8 i $FM_Brass 82.5 1 0.4 63 0.3 0.8 i $FM_Brass 83.0 1 0.4 62 0.3 0.8 i $FM_Brass 83.5 1 0.4 57 0.3 0.8 i $FM_Brass 84.0 1 0.4 59 0.3 0.8 i $FM_Brass 84.5 1 0.4 63 0.3 0.8 i $FM_Brass 85.0 3 0.4 62 0.3 0.8 i $Fade_Synth_2 76 9 0.5 66 10 10 0.7 0.95 0.5 i $Fade_Synth_2 87 9 0.5 45 6 6 0.7 0.01 0.5 i $Fade_Synth_2 87.5 9 0.7 45 1 2 0.1 0.01 0.5 i $Fade_Synth_2 90 11 0.1 60 11 6 0.8 0.99 0.5 ; ---- Fragment 3 ---- i $FM_Brass 98.5 1 0.4 62 0.3 0.8 i $FM_Brass 99.0 1 0.4 59 0.3 0.8 i $FM_Brass 99.5 1 0.4 56 0.3 0.8 i $FM_Brass 100.0 1 0.4 57 0.3 0.8 i $FM_Brass 100.5 1 0.4 59 0.3 0.8 i $FM_Brass 101.0 4 0.4 60 0.3 0.8 i $FM_Brass 103.0 3 0.8 43 0.3 0.8 i $FM_Brass_Cycler 103 32 0.125 56 $T_Theme_2 12 100 i $Fade_Synth_2 135 9 0.5 45 6 6 0.7 0.01 0.5 i $Fade_Synth_2 135.5 9 0.7 45 1 2 0.1 0.01 0.5 i $FM_Brass 142.0 1 0.4 63 0.3 0.8 i $FM_Brass 142.5 1 0.4 62 0.3 0.8 i $FM_Brass 143.0 1 0.4 57 0.3 0.8 i $FM_Brass 143.5 1 0.4 59 0.3 0.8 i $FM_Brass 144.0 1 0.4 63 0.3 0.8 i $FM_Brass 144.5 3 0.4 62 0.3 0.8 i $FM_Brass 150.0 1 0.4 62 0.3 0.8 i $FM_Brass 150.5 1 0.4 59 0.3 0.8 i $FM_Brass 151.0 1 0.4 56 0.3 0.8 i $FM_Brass 151.5 1 0.4 57 0.3 0.8 i $FM_Brass 152.0 1 0.4 59 0.3 0.8 i $FM_Brass 153.0 0.5 0.4 57 0.3 0.8 i $FM_Brass 153.5 3 0.4 62 0.3 0.8