Converts a pitch-class value into cycles-per-second (Hz) for equal divisions of any interval. There is a restriction of no more than 100 equal divisions.
ipch -- Input number of the form 8ve.pc, indicating an 'octave' and which note in the octave.
iequal -- if positive, the number of equal intervals into which the 'octave' is divided. Must be less than or equal to 100. If negative, is the number of a table of frequency multipliers.
irepeat -- Number indicating the interval which is the 'octave.' The integer 2 corresponds to octave divisions, 3 to a twelfth, 4 is two octaves, and so on. This need not be an integer, but must be positive.
ibase -- The frequency which corresponds to pitch 0.0
Note:
The following are essentially the same
ia = cpspch(8.02)
ib cps2pch 8.02, 12
ic cpsxpch 8.02, 12, 2, 1.02197503906
These are opcodes not functions
Negative values of ipch are allowed, but not negative irepeat, iequal or ibase.
Here is an example of the cpsxpch opcode. It uses the files cpsxpch.orc and cpsxpch.sco.
Example 15-1. Example of the cpsxpch opcode.
/* cpsxpch.orc */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Instrument #1.
instr 1
; Use a normal twelve-tone scale.
ipch = 8.02
iequal = 12
irepeat = 2
ibase = 1.02197503906
icps cpsxpch ipch, iequal, irepeat, ibase
print icps
endin
/* cpsxpch.orc */
/* cpsxpch.sco */
; Play Instrument #1 for one second.
i 1 0 1
e
/* cpsxpch.sco */
instr 1: icps = 293.666
Here is an example of the cpsxpch opcode using a 10.5 ET scale. It uses the files cpsxpch_105et.orc and cpsxpch_105et.sco.
Example 15-2. Example of the cpsxpch opcode using a 10.5 ET scale.
/* cpsxpch_105et.orc */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Instrument #1.
instr 1
; Use a 10.5ET scale.
ipch = 4.02
iequal = 21
irepeat = 4
ibase = 16.35160062496
icps cpsxpch ipch, iequal, irepeat, ibase
print icps
endin
/* cpsxpch_105et.orc */
/* cpsxpch_105et.sco */
; Play Instrument #1 for one second.
i 1 0 1
e
/* cpsxpch_105et.sco */
instr 1: icps = 4776.824
Here is an example of the cpsxpch opcode using a Pierce scale centered on middle A. It uses the files cpsxpch_pierce.orc and cpsxpch_pierce.sco.
Example 15-3. Example of the cpsxpch opcode using a Pierce scale centered on middle A.
/* cpsxpch_pierce.orc */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Instrument #1.
instr 1
; Use a Pierce scale centered on middle A.
ipch = 2.02
iequal = 12
irepeat = 3
ibase = 261.62561
icps cpsxpch ipch, iequal, irepeat, ibase
print icps
endin
/* cpsxpch_pierce.orc */
/* cpsxpch_pierce.sco */
; Play Instrument #1 for one second.
i 1 0 1
e
/* cpsxpch_pierce.sco */
instr 1: icps = 2827.762