diff --git a/dynamics/TiedNotesADSR.binstr b/dynamics/TiedNotesADSR.binstr new file mode 100644 index 0000000..7523ba7 --- /dev/null +++ b/dynamics/TiedNotesADSR.binstr @@ -0,0 +1,1415 @@ + + TiedNotesADSRModule + +DESCRIPTION: + +** 3 Control signals OUT** + +The TiedNotesModule gets the negative duration information and decide what to do with it. In this Module pitch, amplitude and/or filter cutoff frequency can be modelled +according to the information of a first tied note, a middle tied note and the last note that is tied to. Also 'normal' standalone notes of course. +It is based on the UDO from Steven Yi https://csoundjournal.com/2005fall/tiedNotes.html. But a few different decisions are made on what to do with the tied note information. + +This Module needs the ADSRModule. But, if you prefer, you can take another ADSR and implement that one. +Any filters in the code must get the iskip parameter set for detection if it needs to re-initialize or not. + +CONTROLLERS: + +see the help balloon when hovering over the controllers in the instrument. Help can be turned off by pressing the 'I' button next to the play bar. + +--- + +version 1.0, July 2023 +- initial version + + + iFirstTableNumber<INSTR_ID> = 100*<INSTR_ID> ; create room for 100 soundfile tables +giSample<INSTR_ID> ftsamplebank "<samplebank>", iFirstTableNumber<INSTR_ID>, 0, 4, 0 + + + + f 2 0 16 -2 40 40 80 160 320 640 1280 2560 5120 10240 22000 + idur = abs(p3) ; be sure idur is always positive, but collect info on a negative duration or not +ipitch = p4 ; here in frequency +iamp = p5 ; range 0 - 1 +icutoff = p6 ; (optional) cutoff frequency of filter + +itiestatus tieStatus +iskip tival +tigoto skipInit + +ioldpch init ipitch ; copy pitch +ioldamp init iamp ; copy amplitude +ioldfrq init ipitch ; copy freq for filter value + +skipInit: +inewpch = ipitch ; takes care of pitch jumps +kpchline transeg ioldpch, i(<TiedNotes_pitch>)*idur, -(i(<TiedNotes_pitchenvtype>)), inewpch, idur - i(<TiedNotes_pitch>)*idur, i(<TiedNotes_pitchenvtype>), inewpch +ioldpch = inewpch + +inewamp = iamp ; takes care of amplitude jumps +kampline transeg ioldamp, i(<TiedNotes_amplitude>)*idur, -(i(<TiedNotes_ampenvtype>)), inewamp, idur - i(<TiedNotes_amplitude>)*idur, i(<TiedNotes_ampenvtype>), inewamp +ioldamp = inewamp + +inewfrq = icutoff ; takes care of cutoff frequency of filter jumps +kcutline transeg ioldfrq, i(<TiedNotes_filter>)*idur, -(i(<TiedNotes_filterenvtype>)), inewfrq, idur - i(<TiedNotes_filter>)*idur, i(<TiedNotes_filterenvtype>), inewfrq +ioldfrq = inewfrq + +aret init 1 ; takes care of ADSR_ envelopes for normal and tied notes +aagate = linseg:a(1, idur - i(<ADSR_release>), 1, 0, 0, i(<ADSR_release>), 0) ; ADSR_ UDO +if (itiestatus == -1) then ; envelope for normal notes + aampdsr adsr140 aagate, aret, <ADSR_attack>, <ADSR_decay>, <ADSR_sustain>, <ADSR_release> +elseif (itiestatus == 0) then ; envelope for first tied note + aampdsr linseg 0, i(<ADSR_attack>) +0.000001, 1 + prints "\n--> first tied note\n", itiestatus +elseif (itiestatus == 1) then ; envelope for tied middle notes + aampdsr = 1 + prints "\n--> tied middle note\n", itiestatus +elseif (itiestatus == 2) then ; release for last tied note + aampdsr linseg 1, 1 - i(<ADSR_release>), 1, idur*i(<ADSR_release>), 0 + prints "\n--> last tied note\n", itiestatus +endif + +if (<TiedNotes_sync> == 0) then +; ; no syncing +elseif (<TiedNotes_sync> == 1) then + <TiedNotes_amplitude> = <TiedNotes_pitch> ; sync amp time with pitch time + <TiedNotes_ampenvtype> = <TiedNotes_pitchenvtype> ; and pitch envelope type +elseif (<TiedNotes_sync> == 2) then + <TiedNotes_amplitude> = <TiedNotes_pitch> ; sync amp time with pitch time + <TiedNotes_filter> = <TiedNotes_pitch> ; sync filter time with pitch time + <TiedNotes_ampenvtype> = <TiedNotes_pitchenvtype> ; and pitch envelope type + <TiedNotes_filterenvtype> = <TiedNotes_pitchenvtype> +endif + + +ain vco2 kampline, kpchline, iskip ; example of oscillator + +asig moogladder2 ain, kcutline, .5, iskip ; example of filter + + +;==================outs======================================= +blueMixerOut asig * aampdsr, asig * aampdsr + + + + + + 5 + 5 + DOT + true + + + + 0 + 0 + Group + 0x00000033 + 0x000000ff + 0xffffffff + true + 20 + 20 + + Roboto + 12.0 + + + + + 185 + 0 + 4 envelopes for amplitude + ADSR + 0x282828ff + 0x000000ff + 0xffffffff + true + 20 + 99 + + Roboto + 12.0 + + + + + 180 + 145 + + + Roboto + 12.0 + + + + + ADSR_sustain + 110 + 5 + true + 0.0 + 1.0 + 0.001 + 0.271 + 150 + true + false + + + ADSR_decay + 60 + 5 + true + 0.0 + 1.0 + 0.001 + 0.659 + 150 + true + false + + + ADSR_attack + 10 + 5 + true + 0.0 + 1.0 + 0.001 + 0.155 + 150 + true + false + + + + 30 + 145 + + + Roboto + 12.0 + + + + + ADSR_release + 160 + 5 + true + 0.0 + 1.0 + 0.001 + 0.837 + 150 + true + false + + + + 130 + 145 + + + Roboto + 12.0 + + + + + + 80 + 145 + + + Roboto + 12.0 + + + + + + + 415 + 0 + Score Module - use this to add extra P-fields in Score and instrumentcode + Score Module + 0x66666600 + 0x000000ff + 0xff0000ff + false + 137 + 20 + + Roboto + 12.0 + + + + + 14 + 34 + + + Roboto + 14.0 + + + + + + 14 + 74 + + + Roboto + 14.0 + + + + + + 6 + 263 + + + Roboto + 14.0 + + + + + + 28 + 113 + + 100 + + + + 36 + 34 + + + Roboto + 12.0 + + + + + + 28 + 260 + + 100 + + + + 28 + 239 + + 100 + + + + 28 + 219 + + 100 + + + + 14 + 53 + + + Roboto + 14.0 + + + + + + 14 + 97 + + + Roboto + 14.0 + + + + + + 14 + 117 + + + Roboto + 14.0 + + + + + + 28 + 71 + cutoff filter + 100 + + + + 6 + 179 + + + Roboto + 14.0 + + + + + + 6 + 159 + + + Roboto + 14.0 + + + + + + 28 + 134 + + 100 + + + + 28 + 156 + + 100 + + + + 28 + 93 + + 100 + + + + 6 + 199 + + + Roboto + 14.0 + + + + + + 6 + 222 + + + Roboto + 14.0 + + + + + + 14 + 138 + + + Roboto + 14.0 + + + + + + 6 + 243 + + + Roboto + 14.0 + + + + + + 12 + 10 + + + Roboto + 14.0 + + + + + + 28 + 178 + + 100 + + + + 28 + 197 + + 100 + + + + 36 + 53 + + + Roboto + 12.0 + + + + + + + 0 + 0 + 4 envelopes for amplitude + tied notes + 0x282828ff + 0x000000ff + 0xffffffff + true + 160 + 117 + + Roboto + 12.0 + + + + + 10 + 10 + 4 envelopes for amplitude + note + 0x282828ff + 0x000000ff + 0xffffffff + true + 152 + 99 + + Roboto + 12.0 + + + + TiedNotes_amplitude + 10 + 90 + true + 1.0E-5 + 1.0 + 0.43818063256499307 + 50 + true + false + + true + + Roboto + 12.0 + + + + + + 120 + 140 + + + Roboto + 12.0 + + + + + TiedNotes_pitch + 10 + 10 + true + 0.001 + 1.0 + 0.09664893617021274 + 50 + true + false + + true + + Roboto + 12.0 + + + + + + 70 + 60 + + + Roboto + 12.0 + + + + + TiedNotes_ampenvtype + 80 + 90 + true + -2.0 + 2.0 + -1.0956615983355624 + 50 + true + false + + true + + Roboto + 12.0 + + + + + TiedNotes_pitchenvtype + 80 + 10 + true + -2.0 + 2.0 + -2.0 + 50 + true + false + + true + + Roboto + 12.0 + + + + + + 120 + 60 + + + Roboto + 12.0 + + + + + + 70 + 140 + + + Roboto + 12.0 + + + + + + + 10 + 200 + 4 envelopes for amplitude + filter + 0x282828ff + 0x000000ff + 0xffffffff + true + 152 + 85 + + Roboto + 12.0 + + + + TiedNotes_filter + 10 + 10 + true + 1.0E-5 + 1.0 + 0.6065522614326705 + 50 + true + false + + true + + Roboto + 12.0 + + + + + + 70 + 60 + + + Roboto + 12.0 + + + + + TiedNotes_filterenvtype + 80 + 10 + true + -2.0 + 2.0 + 1.875202402339061 + 50 + true + false + + true + + Roboto + 12.0 + + + + + + 120 + 60 + + + Roboto + 12.0 + + + + + + TiedNotes_sync + 20 + 305 + true + 0.0 + 2.0 + 1 + 2.0 + 130 + true + false + + + + 10 + 320 + + + Roboto + 12.0 + + + + + + 75 + 320 + + + Roboto + 12.0 + + + + + + 120 + 320 + + + Roboto + 12.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4 + 5 + true + 0.04800000000000004 + ver2:0.31 + true + false + 261.625565 + false + version=2@_@amplitude envelope:0.0:0.0:0.19550561797752808:1.0:0.5700934579439252:1.0:0.6214953271028038:1.0:0.8121495327102803:1.0:1.0:0.0:1.0:0.0@_@filter envelope:0.0:9025.0:0.0691588785046729:1127.0000000000011:0.21460674157303372:648.3333333333331:0.516822429906542:528.6666666666658:0.798876404494382:7828.333333333334:1.0:289.3333333333329@_@pitch bend envelope:0.0:2.3466666666666667:0.525233644859813:2.293333333333333:0.5831460674157304:1.12:0.7168539325842697:1.7599999999999998:0.8299065420560747:0.0:1.0:2.24 + /media/menno/datae/EigenWerk/eigenwerk/samples/gilpiep.wav + ver2:1.0:1.0 + 1.0 + 0.0 + true + false + 0.0 + 1.0 + true + ver2:1.666 + 2517.2 + id:-717362694 + ver2:0.54 + false + true + false + 0.299 + 0.321 + 1.0 + 0.237 + ver2:1 + ver2:1 + ver2:1 + 1.0 + 2.0 + ver2:0.102 + false + ver2:10 + ver2:1.76 + + + 4 + 5 + false + 0.04800000000000004 + ver2:0.31 + true + false + 261.625565 + false + version=2@_@amplitude envelope:0.0:0.0:0.19550561797752808:1.0:0.5700934579439252:1.0:0.6214953271028038:1.0:0.8121495327102803:1.0:1.0:0.0:1.0:0.0@_@filter envelope:0.0:9025.0:0.0691588785046729:1127.0000000000011:0.21460674157303372:648.3333333333331:0.516822429906542:528.6666666666658:0.798876404494382:7828.333333333334:1.0:289.3333333333329@_@pitch bend envelope:0.0:2.3466666666666667:0.525233644859813:2.293333333333333:0.5831460674157304:1.12:0.7168539325842697:1.7599999999999998:0.8299065420560747:0.0:1.0:2.24 + /media/menno/datae/EigenWerk/eigenwerk/samples/gilpiep.wav + ver2:1.0:0.0 + 1.0 + 0.0 + true + false + 0.0 + 1.0 + true + ver2:1.666 + 2517.2 + id:-717362696 + ver2:0.54 + false + false + false + 0.572 + 0.61 + 1.0 + 0.528 + ver2:1 + ver2:1 + ver2:1 + 1.0 + 5.0 + ver2:0.045 + false + ver2:10 + ver2:1.76 + + + false + 0.04800000000000004 + ver2:0.26 + true + false + false + version=2@_@amplitude envelope:0.0:0.0:0.19550561797752808:1.0:0.5700934579439252:1.0:0.6214953271028038:1.0:0.8121495327102803:1.0:1.0:0.0:1.0:0.0@_@filter envelope:0.0:9025.0:0.0691588785046729:1127.0000000000011:0.21460674157303372:648.3333333333331:0.516822429906542:528.6666666666658:0.798876404494382:7828.333333333334:1.0:289.3333333333329@_@pitch bend envelope:0.0:2.3466666666666667:0.525233644859813:2.293333333333333:0.5831460674157304:1.12:0.7168539325842697:1.7599999999999998:0.8299065420560747:0.0:1.0:2.24 + /media/menno/datae/EigenWerk/verzameling_ideejen/samples/tiedtest.wav + ver2:1.0:1.0 + 1.0 + 0.0 + true + true + 0.0 + 1.0 + true + ver2:0.651 + 2517.2 + id:1680432903 + ver2:0.54 + false + false + 0.45 + 0.503 + 2.504 + 0.346 + ver2:1 + ver2:7.46 + ver2:1 + 1.0 + 5.0 + ver2:0.045 + false + ver2:10 + ver2:0.48 + + + 11.79 + true + id:-2009231365 + false + -0.16099999999999998 + ver2:0.082 + ver2:0 + ver2:0.29 + ver2:0.35 + ver2:0.2 + true + ver2:0.69 + ver2:40 + ver2:20.14 + 2.63 + true + false + version=2@_@amplitude envelope:0.0:0.0:0.0:1.0:1.0:1.0:1.0:0.0@_@filter envelope:0.0:0.0:0.6229299363057325:1.0:0.778343949044586:0.013333333333333308:1.0:0.5@_@pitch bend envelope:0.0:1.0:0.25477707006369427:1.95:1.0:1.0 + ver2:1 + false + ver2:1 + /media/menno/datae/EigenWerk/verzameling_ideejen/samples/robot.wav + ver2:1 + ver2:0.15 + 1.0 + ver2:0.57 + 0.0 + 0.0 + id:-2009231363 + true + id:-2009231356 + ver2:8.131 + 0.5 + 0.0 + ver2:17.405 + ver2:0.48 + true + 2.0 + 2.04 + id:-2009231354 + ver2:0 + ver2:58 + ver2:23 + true + ver2:18.98 + 0.314 + 0.358 + 0.187 + 0.293 + false + 1.00001 + ver2:0.15 + false + ver2:4.7 + 3.0 + + + 29.77 + false + id:-2009231365 + false + -0.16099999999999998 + ver2:0.082 + ver2:0 + ver2:0.14 + ver2:0 + ver2:0 + false + ver2:0.69 + ver2:40 + ver2:20.14 + 4.63 + false + false + version=2@_@amplitude envelope:0.0:0.0:0.0:1.0:0.30445859872611464:0.9866666666666667:0.6242038216560509:0.9533333333333334:0.8738853503184714:0.8866666666666667:0.9885350318471338:0.0:1.0:0.0@_@filter envelope:0.0:0.0:0.6229299363057325:1.0:0.778343949044586:0.013333333333333308:1.0:0.5@_@pitch bend envelope:0.0:1.0:0.25477707006369427:1.95:1.0:1.0 + ver2:1 + false + ver2:1 + /media/menno/datae/EigenWerk/verzameling_ideejen/samples/gilpiepMONO.wav + ver2:0 + ver2:0.58 + 1.0 + ver2:0.57 + 0.0 + 0.0 + id:-2009231363 + true + id:-2009231356 + ver2:10.6185 + 0.5 + 2.5 + ver2:12.995 + ver2:0.53 + false + 1.61 + 1.62 + id:-2009231354 + ver2:0 + ver2:58 + ver2:23 + true + ver2:1 + 0.0 + 0.392 + 0.574 + 0.289 + false + 1.00001 + ver2:0.15 + false + ver2:4.7 + 3.0 + + + 4.2 + false + id:-2009231365 + false + 0.008000000000000007 + ver2:0.082 + ver2:0 + ver2:0.33 + ver2:0.66 + ver2:0.49 + false + ver2:0.69 + ver2:40 + ver2:20.14 + 4.63 + false + false + version=2@_@amplitude envelope:0.0:0.0:0.30445859872611464:0.9866666666666667:0.6242038216560509:0.9533333333333334:0.9885350318471338:0.0:1.0:0.0@_@filter envelope:0.0:0.0:0.6229299363057325:1.0:0.778343949044586:0.013333333333333308:1.0:0.5@_@pitch bend envelope:0.0:1.0:0.25477707006369427:1.95:1.0:1.0 + ver2:1 + false + ver2:1 + /media/menno/datae/EigenWerk/verzameling_ideejen/samples/gilpiepMONO.wav + ver2:0.18 + ver2:0.58 + 1.0 + ver2:0.57 + 0.0 + 0.9 + id:-2009231363 + false + id:-2009231359 + ver2:10.519 + 0.0 + 2.5 + ver2:6.87 + ver2:1 + true + 1.61 + 1.62 + id:-2009231354 + ver2:0 + ver2:58 + ver2:23 + true + ver2:26.23 + 0.254 + 0.637 + 1.178 + 0.449 + false + 1.00001 + ver2:0.15 + false + ver2:4.7 + 3.0 + + + 12.59 + false + id:-2009231365 + false + -0.16099999999999998 + ver2:0.082 + ver2:0 + ver2:0.14 + ver2:0 + ver2:0 + false + ver2:0.69 + ver2:40 + ver2:20.14 + 5.0 + false + false + version=2@_@amplitude envelope:0.0:0.0:0.0:1.0:0.30445859872611464:0.9866666666666667:0.6242038216560509:0.9533333333333334:0.8738853503184714:0.8866666666666667:0.9885350318471338:0.0:1.0:0.0@_@filter envelope:0.0:0.0:0.6229299363057325:1.0:0.778343949044586:0.013333333333333308:1.0:0.5@_@pitch bend envelope:0.0:1.0:0.25477707006369427:1.95:1.0:1.0 + ver2:1 + false + ver2:1 + /media/menno/datae/EigenWerk/verzameling_ideejen/samples/reverse.wav + ver2:0 + ver2:0.58 + 1.0 + ver2:0.57 + 0.0 + 0.0 + id:-2009231363 + true + id:-2009231356 + ver2:10.6185 + 0.5 + 2.5 + ver2:12.995 + ver2:0.53 + false + 5.0 + 5.0 + id:-2009231354 + ver2:0 + ver2:58 + ver2:23 + true + ver2:1 + 0.0 + 0.445 + 1.423 + 0.0 + false + 1.00001 + ver2:0.15 + false + ver2:4.7 + 3.0 + + + 11.45 + true + id:-1084426526 + false + -0.07700000000000001 + ver2:0.1 + ver2:0 + ver2:0.1 + ver2:0 + ver2:0 + false + ver2:0.6 + ver2:40 + ver2:20.14 + 3.06 + true + false + version=2@_@amplitude envelope:0.0:0.0:0.0:1.0:0.8598726114649682:0.0:0.9885350318471338:0.0:1.0:0.0@_@filter envelope:0.0:0.0:0.6229299363057325:1.0:0.778343949044586:0.013333333333333308:1.0:0.5@_@pitch bend envelope:0.0:1.0:0.2585987261146497:1.01:1.0:1.0 + ver2:7.65 + true + ver2:1 + /media/menno/datae/EigenWerk/samples/plopjes3.wav + ver2:0 + ver2:0.58 + 1.0 + ver2:0.57 + 0.1 + 0.0 + id:-1084426524 + true + id:-1084426519 + ver2:5.6435 + 0.5 + 2.5 + ver2:8.83 + ver2:0.53 + false + 1.88 + 1.98 + id:-1084426529 + 0.494 + ver2:0.07 + ver2:58 + ver2:23 + true + ver2:1 + 0.321 + 0.505 + 1.187 + 0.361 + false + 1.00001 + ver2:0.15 + false + ver2:4.7 + 3.0 + + + ver2:0 + ver2:0.1 + 34.65 + ver2:0 + ver2:0 + true + id:-1084426526 + false + -0.07700000000000001 + ver2:0.1 + false + ver2:0.6 + ver2:40 + ver2:20.14 + 3.06 + true + false + version=2@_@amplitude envelope:0.0:0.0:0.0:1.0:0.8598726114649682:0.0:0.9885350318471338:0.0:1.0:0.0@_@filter envelope:0.0:0.0:0.6229299363057325:1.0:0.778343949044586:0.013333333333333308:1.0:0.5@_@pitch bend envelope:0.0:1.0:0.2585987261146497:1.01:1.0:1.0 + ver2:7.65 + true + ver2:1 + /media/menno/datae/EigenWerk/samples/plopjes3.wav + ver2:0 + ver2:0.58 + 1.0 + ver2:0.57 + 0.1 + 0.0 + id:-1084426524 + true + id:-1084426519 + ver2:5.6435 + 0.5 + 2.5 + ver2:8.83 + ver2:0.53 + false + 1.88 + 1.98 + id:-1084426529 + 0.494 + ver2:0.07 + ver2:58 + ver2:23 + true + ver2:1 + 0.841 + 0.953 + 1.187 + 1.0 + false + 1.00001 + ver2:0.15 + false + ver2:4.7 + 3.0 + + + + + adsr140_calc_coef + k + kk + + knum_samps, kratio xin + xout exp( -log((1.0 + kratio) / kratio) / knum_samps) + + + + + + adsr140 + a + aakkkk + agate, aretrig, kattack, kdecay, ksustain, krelease xin +kstate init 0 ; 0 = attack, 1 = decay, 2 = sustain +klasttrig init -1 +kval init 0.0 +asig init 0 +kindx = 0 +kattack_base init 0 +kdecay_base init 0 +krelease_base init 0 +kattack_samps init 0 +kdecay_samps init 0 +krelease_samps init 0 +kattack_coef init 0 +kdecay_coef init 0 +ksustain_coef init 0 +klast_attack init -1 +klast_decay init -1 +klast_release init -1 +if (klast_attack != kattack) then + klast_attack = kattack + if(kattack > 0) then + kattack_samps = kattack * sr + kattack_coef = adsr140_calc_coef(kattack_samps, 0.3) + kattack_base = (1.0 + 0.3) * (1 - kattack_coef) + else + kattack_samps = 0 + kattack_coef = 0 + kattack_base = 0 + endif +endif +if (klast_decay != kdecay) then + klast_decay = kdecay + kdecay_samps = kdecay * sr + kdecay_coef = adsr140_calc_coef(kdecay_samps, 0.0001) + kdecay_base = (ksustain - 0.0001) * (1.0 - kdecay_coef) +endif +if (klast_release != krelease) then + klast_release = krelease + krelease_samps = krelease * sr + krelease_coef = adsr140_calc_coef(krelease_samps, 0.0001) + krelease_base = -0.0001 * (1.0 - krelease_coef) +endif +while (kindx < ksmps) do + if (agate[kindx] > 0) then + kretrig = aretrig[kindx] + if (kretrig > 0 && klasttrig <= 0) then + kstate = 0 + endif + klasttrig = kretrig + if (kstate == 0) then + if(kattack <= 0) then + kval = 1.0 + kstate = 1 + else + kval = kattack_base + (kval * kattack_coef) + if(kval >= 1.0) then + kval = 1.0 + kstate = 1 + endif + asig[kindx] = kval + endif + elseif (kstate == 1) then + kval = kdecay_base + (kval * kdecay_coef) + if(kval <= ksustain) then + kval = ksustain + kstate = 2 + endif + asig[kindx] = kval + else + asig[kindx] = ksustain + endif + else ; in a release state + kstate = 0 + if (kval == 0.0) then + asig[kindx] = 0 + else + ; releasing + kval = krelease_base + (kval * krelease_coef) + if(kval <= 0.0) then + kval = 0.0 + endif + asig[kindx] = kval + endif + endif + kindx += 1 +od +xout asig + + + + + 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 + + + + + \ No newline at end of file