ptrack — Tracks the pitch of a signal.
ptrack takes an input signal, splits it into ihopsize blocks and using a STFT method, extracts an estimated pitch for its fundamental frequency as well as estimating the total amplitude of the signal in dB, relative to full-scale (0dB). The method implies an analysis window size of 2*ihopsize samples (overlaping by 1/2 window), which has to be a power-of-two, between 128 and 8192 (hopsizes between 64 and 4096). Smaller windows will give better time precision, but worse frequency accuracy (esp. in low fundamentals).This opcode is based on an original algorithm by M. Puckette.
ihopsize -- size of the analysis 'hop', in samples, required to be power-of-two (min 64, max 4096). This is the period between measurements.
ipeaks, ihi -- number of spectral peaks to use in the analysis, defaults to 20 (optional)
kcps -- estimated pitch in Hz.
kamp -- estimated amplitude in dB relative to full-scale (0dB) (ie. always <= 0).
ptrack analyzes the input signal, asig, to give a pitch/amplitude pair of outputs, for the fundamental of a monophonic signal. The output is updated every sr/ihopsize seconds.
Here is an example of the ptrack opcode. This example uses the files ptrack.csd.
Example 663. Example of the ptrack opcode.
<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 ptrack.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 0dbfs = 1 nchnls = 2 instr 1 ihop = p4 aout diskin2 "fox.wav",1, 0, 1 kf,ka ptrack aout, ihop ; pitch track with different hopsizes kcps port kf, 0.01 ; smooth freq kamp port ka, 0.01 ; smooth amp ; drive an oscillator asig poscil ampdb(kamp)*0dbfs, kcps, 1 outs asig, asig endin </CsInstruments> <CsScore> ; simple sine wave f 1 0 4096 10 1 i 1 0 5 128 i 1 6 5 512 i 1 12 5 1024 e </CsScore> </CsoundSynthesizer>