powoftwo — Performs a power-of-two calculation.
powoftwo() function returns 2x and allows positive and negatives numbers as argument. The range of values admitted in powoftwo() is -5 to +5 allowing a precision more fine than one cent in a range of ten octaves. If a greater range of values is required, use the slower opcode pow.
These functions are fast, because they read values stored in tables. Also they are very useful when working with tuning ratios. They work at i- and k-rate.
Here is an example of the powoftwo opcode. It uses the file powoftwo.csd.
Example 785. Example of the powoftwo opcode.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o poweroftwo.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; bit reduction for Lo-Fi sound iBits = p4 ;bit depth iQuantize = powoftwo(iBits) ;find number of discrete steps for this bit depth iQuantize = iQuantize*0.5 ;half the number of steps for each side of a bipolar signal print iQuantize asig soundin "fox.wav" asig = round(asig * iQuantize) / iQuantize ;quantize audio signal (bit reduce) outs asig, asig endin </CsInstruments> <CsScore> ; bits i1 0 3 16 i1 ^+3 . 12 i1 ^+3 . 8 i1 ^+3 . 4 i1 ^+3 . 2 i1 ^+3 . 1 e </CsScore> </CsoundSynthesizer>
Its output should include a line like this:
instr 1: iQuantize = 32768.000 instr 1: iQuantize = 2048.000 instr 1: iQuantize = 128.000 instr 1: iQuantize = 8.000 instr 1: iQuantize = 2.000 instr 1: iQuantize = 1.000