Hi,
i have a question about filters and how they behave (or should behave) when notes are tied.
I am using the UDO from Steven Yi, that helps analyzing when a note is not tied, the initial note within a group of tied notes, middle note within a group of tied notes and when it is is an end note out of a group of tied notes.
This all works well with oscillators.
On every note i have a HP filter that moves over the note: kfrq expon 14000, p3, 500
A filter, like for example buthp, also has a skip parameter to: skip initialization if present and non-zero.
However, when a note is held (negative p3), the filter starts at a value of 500, instead of the 14000 i set as a start value. And it keeps on falling well below the end value of 500 when more than 1 note is held.
I was expecting the first held note (the tie to the next note) to start at 14000 and i could set a time to let it drop to 500.
I guess this is not how this works…
Can someone please explain to me why the filter starts at the end value when it encounters a tied note?
The example, generated by Blue, is this:
;
; “”
; by
;
;
;
; Generated by blue 2.8.2 (http://blue.kunstmusik.com)
;
gk_blue_auto0 init 0.0458397183
gk_blue_auto1 init 0.6618621314
opcode tieStatus,i,0
itie tival
if (itie == 0 && p3 < 0) ithen ; this is an initial note within a group of tied notes
itiestatus = 0
elseif (p3 < 0 && itie == 1) ithen ; this is a middle note within a group of tied notes
itiestatus = 1
elseif (p3 > 0 && itie == 1) ithen ; this is an end note out of a group of tied notes
itiestatus = 2
elseif (p3 > 0 && itie == 0) ithen ; this note is a standalone note
itiestatus = -1
endif
xout itiestatus
endop
instr 1 ;untitled
event “e”, 0, 0, 0.1
endin
instr 2 ;Type 1 Instrument (Monosynth)
idur = abs(p3) ; idur is always positive
ipch = p4
iamp = p5
itiestatus tieStatus
iskip tival
tigoto skipInit
ioldpch init ipch ; copy pitch
ioldamp init iamp ; copy amplitude
skipInit:
inewpch = ipch
kpchline linseg ioldpch, i(gk_blue_auto1), inewpch, idur - i(gk_blue_auto1), inewpch ; takes care of pitch jumps
ioldpch = inewpch
kamp port iamp, i(gk_blue_auto0), ioldamp ; takes care of amplitude jumps
ioldamp = -1
if (itiestatus == -1) then ; envelope for normal notes
kenv adsr .001, .05, .9, .05
iskp = 0
elseif (itiestatus == 0) then ; envelope for first tied note
kenv linseg 0, .05, 1, .2, 1
iskp = 0
elseif (itiestatus == 1) then ; envelope for tied middle notes
kenv init 1
iskp = 1
elseif (itiestatus == 2) then ; release for last tied note
kenv linseg 1, idur - .05, 1, .05, 0
iskp = 0
endif
;aout vco2 1, kpchline, iskip
aout flooper2 1, kpchline, 0, .5, 0.05, 1, 1, 0, 0, iskip
;aout poscil3 1, kpchline, 1, -(iskip)
kfrq expon 14000, p3, 500
aout buthp aout, kfrq, iskp
aout = aout * kamp * kenv *.8
outs aout, aout
prints “\nstatus of TIE = %d\n”, itiestatus ; report tieStatus
prints “status of SKIP = %d\n”, iskip ; 1 if this note has been “tied” onto a previously held note, 0 if no tie
prints “status of FILTER = %d\n”, iskp
printk .1, kfrq
endin
f 1 0 0 1 “fox.wav” 0 0 0
i2 0.0 1.5384615385 1.0 .80
i2 1.9230769230769234 1.5384615385 0.7 .83
i2 3.8461538461538467 1.5384615385 2.7 .76
i2 5.76923076923077 1.5384615385 1.5 .70
i2 7.692307692307693 -1.5384615385 1.0 .80
i2 9.615384615384615 -1.5384615385 0.7 .83
i2 11.538461538461538 -1.5384615385 2.7 .76
i2 13.46153846153846 1.5384615385 1.5 .70
i1 15.0 0.1
e
Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here