[Csnd] [csnd] Windcontroller Portamento with cpsmidib opcode
Date | 2009-06-30 22:49 |
From | jinku kim |
Subject | [Csnd] [csnd] Windcontroller Portamento with cpsmidib opcode |
Hello! csounder. It is a question about Portamento and cpsmidib. This csd file is for woodwind instrument for Akai_Ewi and Wiimote. This csd use cpsmidib with i-rate as note input and Linseg opcode as a portamento funtion, in this case I can't control pitchbend, when I am blowing Ewi(noteon). Can you tell me what I miss, some hint or tips for using k-rate_cpsmidib and portamento together, Or another Idea for making portamento. Thank you in advance. <CsoundSynthesizer> <CsOptions> -odac -iadc -d </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 giseed = .5 garev init 0 gicps init 440 gitable1 ftgen 1, 0, 4096, 10, 1 gitable2 ftgen 3, 0, 4097, -10, 2661, 87, 33, 18 gitable3 ftgen 4, 0, 4097, -10, 174, 12, gitable4 ftgen 5, 0, 4097, -10, 314, 13, gitable5 ftgen 6, 0, 16, -2, 40, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 10240 ctrlinit 1, 2, 0 instr 1 ; This is based on Flute1.csd from Dr. Boulanger's csound library. I modified it for Midi_Windcontoroller and Wiimote. knoise chnget "breathnoise" kvib chnget "vibrato" kport chnget "port" kfilt chnget "filt" kfilt2 chnget "filt2" iportim chnget "portamento" icpsb init gicps icps cpsmidib gicps = icps kport linseg icpsb, iportim, gicps kbreath midictrl 2, 0, 1 gkbreath = kbreath kbreath port kbreath, 0.02 kbreath linenr kbreath, 0.02, 0.05, 0.1 kvibdepth = abs(kvib*kport/100.) kvibdepth randi kvibdepth*.1, 1000,giseed giseed = frac(giseed*105.947) kport = kport + kvibdepth iphase = giseed knfrq = kport kampr1 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp1 = kbreath + kampr1 kampr2 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp2 = kbreath + kampr2 kampr3 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp3 = kbreath + kampr3 awt1 oscili kamp1, kport, gitable3, iphase awt2 oscili kamp2, kport, gitable4, iphase awt3 oscili kamp3, kport, gitable5, iphase awnoise rand 20000, giseed afiltn butbp awnoise, knfrq,100 kbreath = (knoise = 1 ? kbreath : 0) asig = awt1 + awt2 + awt3+(afiltn*kbreath*.4) asig = asig/3/4000 afilt tone asig, kfilt2 asig balance afilt, asig outs asig, asig garev = garev + asig endin instr 100 ;printk 1, gkbreath ;krevenv linseg 2, p3, 2, 1.0, 0.1 arev reverb garev, 2.0;krevenv ;arev clip arev, 5 outs arev*0.1, arev*0.1 garev = 0 endin </CsInstruments> <CsScore> f 0 36000 i 100 0 3600 </CsScore> </CsoundSynthesizer> |
Date | 2009-07-01 02:01 |
From | Tim Mortimer |
Subject | [Csnd] Re: [csnd] Windcontroller Portamento with cpsmidib opcode |
Steven Yi wrote an article in an early Csound journal (online) about legato & portamento handling. I wrote some code (featuring portomento) for somebody's wx7 wind controller, & the easiest solution i came up with (utilising Steven Yi's tiestatus UDO from the journal article) is to handle midi / user input in one csound instrument, & then translate that into sending score events to a subsequent sound generating instrument. i dont have code to hand. if you are patient i may be able to dig out some examples. but I dont have any experience with the wii. Steven's article & tiestatus opcode however is/are highly recommended jinku kim wrote: > > Hello! csounder. > > It is a question about Portamento and cpsmidib. > > This csd file is for woodwind instrument for Akai_Ewi and Wiimote. > > This csd use cpsmidib with i-rate as note input and Linseg opcode as a > portamento funtion, in this case I can't control pitchbend, when I am > blowing Ewi(noteon). > > Can you tell me what I miss, some hint or tips for using k-rate_cpsmidib > and > portamento together, Or another Idea for making portamento. > > Thank you in advance. > > |
Date | 2009-07-01 02:53 |
From | jinku kim |
Subject | [Csnd] Re: Re: [csnd] Windcontroller Portamento with cpsmidib opcode |
Hello Tim Thank you for your comment. I am very interested in your works about WX-7 and other. Tie-opcode and 'Legato & portamento handlings' will be useful for me. It is my csd file which I came up with just before.(It was a simple way. Still have a minor problem -less effective than pitchbend. I don't know why.-) Your recommendations will make it better. Thank you so much. Have a great days~ <CsoundSynthesizer> <CsOptions> -odac -iadc -d </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 giseed = .5 garev init 0 gicps init 440 gitable1 ftgen 1, 0, 4096, 10, 1 gitable2 ftgen 3, 0, 4097, -10, 2661, 87, 33, 18 gitable3 ftgen 4, 0, 4097, -10, 174, 12, gitable4 ftgen 5, 0, 4097, -10, 314, 13, gitable5 ftgen 6, 0, 16, -2, 40, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 10240 ctrlinit 1, 2, 0 ctrlinit 1, 1, 0 instr 1 ;This is based on Flute1.csd from Dr. Boulanger's csound library. I modified it for Midi_Windcontoroller and Wiimote. knoise chnget "noise" kvib chnget "vibrato" kport chnget "port" kfilt chnget "filt" kfilt2 chnget "filt2" iportim chnget "portamento" icpsb init gicps icps cpsmidi gicps = icps kpitch midictrl 1, 0, 100 kport linseg icpsb, iportim, gicps kport = kport - kpitch kbreath midictrl 2, 0, 1 gkbreath = kbreath kbreath port kbreath, 0.02 kbreath linenr kbreath, 0.02, 0.05, 0.1 kvibdepth = abs(kvib*kport/100.) kvibdepth randi kvibdepth*.1, 1000,giseed giseed = frac(giseed*105.947) kport = kport + kvibdepth iphase = giseed knfrq = kport tigoto kampr1 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp1 = kbreath + kampr1 kampr2 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp2 = kbreath + kampr2 kampr3 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp3 = kbreath + kampr3 awt1 oscili kamp1, kport, gitable3, iphase awt2 oscili kamp2, kport, gitable4, iphase awt3 oscili kamp3, kport, gitable5, iphase awnoise rand 20000, giseed afiltn butbp awnoise, knfrq,100 kbreath = (knoise = 1 ? kbreath : 0) asig = awt1 + awt2 + awt3+(afiltn*kbreath*.4) asig = asig/3/4000 afilt tone asig, kfilt2 asig balance afilt, asig outs asig, asig garev = garev + asig endin instr 100 ;printk 1, gkbreath ;krevenv linseg 2, p3, 2, 1.0, 0.1 arev reverb garev, 2.0;krevenv ;arev clip arev, 5 outs arev*0.1, arev*0.1 garev = 0 endin </CsInstruments> <CsScore> f 0 36000 i 100 0 3600 </CsScore> </CsoundSynthesizer> On Tue, Jun 30, 2009 at 9:01 PM, Tim Mortimer <timmortimer@d2.net.au> wrote:
|
Date | 2009-07-01 10:15 |
From | Iain McCurdy |
Subject | [Csnd] RE: [csnd] Windcontroller Portamento with cpsmidib opcode |
Hi, Your portamento function (kport linseg icpsb, iportim, gicps) won't do anything because it begins and ends on the same value. I think what you want it to do is to glide from the previous pitch value to the current one, the following example does that. For pitch bend I would recommend 'pchbend' over 'cpsmidib'. This is probably not the way that you want to implement pitch portamento. See second example. ;----------------------------------------------------------------------------------------------------------------------- <CsoundSynthesizer> <CsOptions> -M0 -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 64 nchnls = 2 0dbfs = 1 gisine ftgen 0,0,4096,10,1 gkOctOld init 8 instr 1 ;PORTAMENTO TIME iporttime init 0.2 ;READ MIDI PITCH VALUES (OCT FORMAT) ioct octmidi ;PITCH BEND INFORMATION IS READ (2 SEMITONE RANGE) kbend pchbend 0, 2/12 ;AMPLITUDE ENVELOPE aenv linenr 0.1, 0.01, 0.01, 0.01 ;PORTAMENTO GLIDE FROM PREVIOUS PITCH TO CURRENT PITCH koct expseg i(gkOctOld), iporttime, ioct, 1, ioct ;AUDIO OSCILATOR asig oscili aenv, cpsoct(gkOctOld+kbend), gisine ;DEFINE OLD PITCH VALUE FOR NEXT PASS (I.E. NEXT NOTE); MUST BE GLOBAL VARIABLE gkOctOld = koct ;SEND AUDIO TO OUTPUTS outs asig, asig endin </CsInstruments> <CsScore> f 0 3600 </CsScore> </CsoundSynthesizer> ;----------------------------------------------------------------------------------------------------------------------- A more likely method of using portamento, and the one that I think Tim suggests, is on a monophonic instrument in which 2 instruments are used: one senses changes in pitch values and whether a note is actually being played and the other actually creates the sound. The first instrument instructs the second instrument to play if required. ;----------------------------------------------------------------------------------------------------------------------- <CsoundSynthesizer> <CsOptions> -odac -M0 </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ;INITIALISE GLOBAL VARIABLES giportamento init 0.06 ;PORTAMENTO TIME gkcps init 0 ;INITIALISE GLOBAL VARIABLES gkNumInstr1 init 0 ;INITIALISE GLOBAL VARIABLES gisine ftgen 1, 0, 131072, 10, 1 ;A SINE WAVE - USED BY BOTH THE VIBRATO AND THE vco ;THIS INSTRUMENT SENSES INCOMING MIDI BUT DOESN'T MAKE ANY SOUND ITSELF, IT INSTRUCTS INSTR 2 TO PLAY instr 1 ;READ IN MIDI PITCH (OCT FORMAT) ioct octmidi ;PITCH BEND INFORMATION IS READ (2 SEMITONE RANGE) kbend pchbend 0, 2/12 ;CPS VALUE FOR PITCH gkcps = cpsoct(ioct + kbend) ;INSTR 2 IS INSTRUCTED TO PLAY A VERY LONG NOTE - ONLY ONE NOTE AT A TIME IS ALLOWED ; KTRIGGER, KMINTIM, KMAXNUM, KINSNUM, KWHEN, KDUR schedkwhen 1, 0, 1, 2, 0, 3600 endin ;SOUND PRODUCING INSTRUMENT (MONOPHONIC) instr 2 ;SENSE THE NUMBER OF NOTES ARE BEING PLAYED BY INSTR 1 gkNumInstr1 active 1 ;IF INSTR 1 IS NOT ACTIVE; I.E. NO MIDI NOTES ARE BEING HELD... if gkNumInstr1=0 then turnoff ;INSTR 2 TURNS ITSELF OFF IF INSTR IS INACTIVE endif ;CREATE PORTAMENTO ON PITCH PARAMETER kporttime linseg 0, (.01), giportamento, (1), giportamento kcps portk gkcps, kporttime ;AMPLITUDE ENVELOPE aenv linenr 0.5, 0.01, 0.01, 0.01 ;CREATE AN OSILLATOR asig oscili aenv, kcps, gisine ;SEND SIGNAL TO OUTPUT outs asig, asig endin </CsInstruments> <CsScore> f 0 3600 ;DUMMY SCORE EVENT - REAL TIME PERFORMANCE FOR 1 HOUR </CsScore> </CsoundSynthesizer> ;----------------------------------------------------------------------------------------------------------------------- You should still investigate Steven Yi's work on designing legato instruments. I hope this helps, Bye, Iain Date: Tue, 30 Jun 2009 17:49:53 -0400 From: jaikai10@gmail.com To: csound@lists.bath.ac.uk Subject: [Csnd] [csnd] Windcontroller Portamento with cpsmidib opcode Hello! csounder. It is a question about Portamento and cpsmidib. This csd file is for woodwind instrument for Akai_Ewi and Wiimote. This csd use cpsmidib with i-rate as note input and Linseg opcode as a portamento funtion, in this case I can't control pitchbend, when I am blowing Ewi(noteon). Can you tell me what I miss, some hint or tips for using k-rate_cpsmidib and portamento together, Or another Idea for making portamento. Thank you in advance. <CsoundSynthesizer> <CsOptions> -odac -iadc -d </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 giseed = .5 garev init 0 gicps init 440 gitable1 ftgen 1, 0, 4096, 10, 1 gitable2 ftgen 3, 0, 4097, -10, 2661, 87, 33, 18 gitable3 ftgen 4, 0, 4097, -10, 174, 12, gitable4 ftgen 5, 0, 4097, -10, 314, 13, gitable5 ftgen 6, 0, 16, -2, 40, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 10240 ctrlinit 1, 2, 0 instr 1 ; This is based on Flute1.csd from Dr. Boulanger's csound library. I modified it for Midi_Windcontoroller and Wiimote. knoise chnget "breathnoise" kvib chnget "vibrato" kport chnget "port" kfilt chnget "filt" kfilt2 chnget "filt2" iportim chnget "portamento" icpsb init gicps icps cpsmidib gicps = icps kport linseg icpsb, iportim, gicps kbreath midictrl 2, 0, 1 gkbreath = kbreath kbreath port kbreath, 0.02 kbreath linenr kbreath, 0.02, 0.05, 0.1 kvibdepth = abs(kvib*kport/100.) kvibdepth randi kvibdepth*.1, 1000,giseed giseed = frac(giseed*105.947) kport = kport + kvibdepth iphase = giseed knfrq = kport kampr1 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp1 = kbreath + kampr1 kampr2 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp2 = kbreath + kampr2 kampr3 randi .02*kbreath, 10, giseed giseed = frac(giseed*105.947) kamp3 = kbreath + kampr3 awt1 oscili kamp1, kport, gitable3, iphase awt2 oscili kamp2, kport, gitable4, iphase awt3 oscili kamp3, kport, gitable5, iphase awnoise rand 20000, giseed afiltn butbp awnoise, knfrq,100 kbreath = (knoise = 1 ? kbreath : 0) asig = awt1 + awt2 + awt3+(afiltn*kbreath*.4) asig = asig/3/4000 afilt tone asig, kfilt2 asig balance afilt, asig outs asig, asig garev = garev + asig endin instr 100 ;printk 1, gkbreath ;krevenv linseg 2, p3, 2, 1.0, 0.1 arev reverb garev, 2.0;krevenv ;arev clip arev, 5 outs arev*0.1, arev*0.1 garev = 0 endin </CsInstruments> <CsScore> f 0 36000 i 100 0 3600 </CsScore> </CsoundSynthesizer> Windows Live™: Keep your life in sync. Check it out. |
Date | 2009-07-01 14:04 |
From | Tim Mortimer |
Subject | [Csnd] Re: [csnd] Windcontroller Portamento with cpsmidib opcode |
Ive cut this out of a larger ensemble, so there may be some redundant / wierd code, or slightly idiosyncratic things going on, but it should give you another example to pour over & hopefully find some useful ideas. it uses cc1 (modwheel) to model what would happen when controlled by cc2 breath control. just change the appropraite cc number - there's a note to this effect in the code. you'll no doubt have to fiddle around with it. take & use what is of any use. hope it helps / is of interest. ;;;************************ ;;;************************ ;;;************************ |
Date | 2009-07-01 19:13 |
From | jinku kim |
Subject | [Csnd] Re: RE: [csnd] Windcontroller Portamento with cpsmidib opcode |
Hello Lain, Tim Thank you for your comments and codes. The pchbend and octmidi are exactly what I am looking for. There are lots of stuff I haven't seen before. I need time for understanding yours. I will try t now!! And, I am sorry about I didn't write down comment each line for understanding my code easily. By the way, I don't understand part of your comment - "Your portamento function (kport linseg icpsb, iportim, gicps) won't do anything because it begins and ends on the same value." It may not be a same value. It works. Am I missunderstanding or miss something? My portamento function(which I updated, yesterday) has been working. =============================================================================== icpsb init gicps ; icpbs is previous pitch icps cpsmidi ; It is a new pitch gicps = icps ; assign new pitch to gicp kpitch midictrl 1, 0, 100 ; It is for pitchbend kport linseg icpsb, iportim, gicps ; Portamento from old pitch to new pitch, iportamento time from wiimote in Max patch. ================================================================================ I am happy in csound world. I glad to know yours in csound world. Thank you for your guide and teach. On Wed, Jul 1, 2009 at 5:15 AM, Iain McCurdy <i_mccurdy@hotmail.com> wrote:
|
Date | 2009-07-01 19:21 |
From | Iain McCurdy |
Subject | [Csnd] RE: Re: RE: [csnd] Windcontroller Portamento with cpsmidib opcode |
Apologies I mis-read your code with regard to the portamento function. Iain Date: Wed, 1 Jul 2009 14:13:33 -0400 From: jaikai10@gmail.com To: csound@lists.bath.ac.uk Subject: [Csnd] Re: RE: [csnd] Windcontroller Portamento with cpsmidib opcode Hello Lain, Tim Thank you for your comments and codes. The pchbend and octmidi are exactly what I am looking for. There are lots of stuff I haven't seen before. I need time for understanding yours. I will try t now!! And, I am sorry about I didn't write down comment each line for understanding my code easily. By the way, I don't understand part of your comment - "Your portamento function (kport linseg icpsb, iportim, gicps) won't do anything because it begins and ends on the same value." It may not be a same value. It works. Am I missunderstanding or miss something? My portamento function(which I updated, yesterday) has been working. =============================================================================== icpsb init gicps ; icpbs is previous pitch icps cpsmidi ; It is a new pitch gicps = icps ; assign new pitch to gicp kpitch midictrl 1, 0, 100 ; It is for pitchbend kport linseg icpsb, iportim, gicps ; Portamento from old pitch to new pitch, iportamento time from wiimote in Max patch. ================================================================================ I am happy in csound world. I glad to know yours in csound world. Thank you for your guide and teach. On Wed, Jul 1, 2009 at 5:15 AM, Iain McCurdy <i_mccurdy@hotmail.com> wrote:
Lauren found her dream laptop. Find the PC that’s right for you. |