midichn returns the MIDI channel number (1 - 16) from which the note was activated. In the case of score notes, it returns 0.
ichn -- channel number. If the current note was activated from score, it is set to zero.
Here is an example of the midichn opcode. It uses the files midichn.orc and midichn.sco.
Example 1. Example of the midichn opcode.
/* midichn.orc */
/* Written by Kevin Conder */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Instrument #1.
instr 1
i1 midichn
print i1
endin
/* midichn.orc */
/* midichn.sco */
/* Written by Kevin Conder */
; Play Instrument #1 for 12 seconds.
i 1 0 12
e
/* midichn.sco */
Here is an advanced example of the midichn opcode. It uses the files midichn_advanced.mid, midichn_advanced.orc, and midichn_advanced.sco.
Don't forget that you must include the -F flag when using an external MIDI file like "midichn_advanced.mid".
Example 2. An advanced example of the midichn opcode.
/* midichn_advanced.orc - written by Istvan Varga */
sr = 44100
ksmps = 10
nchnls = 1
massign 1, 1 ; all channels use instr 1
massign 2, 1
massign 3, 1
massign 4, 1
massign 5, 1
massign 6, 1
massign 7, 1
massign 8, 1
massign 9, 1
massign 10, 1
massign 11, 1
massign 12, 1
massign 13, 1
massign 14, 1
massign 15, 1
massign 16, 1
gicnt = 0 ; note counter
instr 1
gicnt = gicnt + 1 ; update note counter
kcnt init gicnt ; copy to local variable
ichn midichn ; get channel number
istime times ; note-on time
if (ichn > 0.5) goto l2 ; MIDI note
printks "note %.0f (time = %.2f) was activated from the score\\n", \
3600, kcnt, istime
goto l1
l2:
printks "note %.0f (time = %.2f) was activated from channel %.0f\\n", \
3600, kcnt, istime, ichn
l1:
endin
/* midichn_advanced.orc - written by Istvan Varga */
/* midichn_advanced.sco - written by Istvan Varga */
t 0 60
f 0 6 2 -2 0
i 1 1 0.5
i 1 4 0.5
e
/* midichn_advanced.sco - written by Istvan Varga */
note 7 (time = 0.00) was activated from channel 4 note 8 (time = 0.00) was activated from channel 2