ATSreadnz — reads data from an ATS file.


ATSreadnz returns the energy (kenergy) of a user specified noise band (1-25 bands) at the time indicated by the time pointer ktimepnt.


kenergy ATSreadnz ktimepnt, iatsfile, iband


iatsfile – the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATSA.

iband – the number of the noise band to return the energy data.


kenergy outputs the linearly interpolated energy of the noise band indicated in iband. The output is dependent on the data in the analysis file and the ktimepnt.

ktimepnt – The time pointer in seconds used to index the ATS file. Used for ATSreadnz exactly the same as for pvoc and ATSadd.

ATSaddnz reads from an ATS file and resynthesizes the noise from noise energy data contained in the ATS file. It uses a modified randi function to create band limited noise and modulates that with a user supplied wave table (one period of a cosine wave), to synthesize a user specified selection of frequency bands. Modulating the noise is required to put the band limited noise in the correct place in the frequency spectrum.

An ATS analysis differs from a pvanal in that ATS tracks the partials and computes the noise energy of the sound being analyzed. For more info about ATS analysis read Juan Pampin's description on the the ATS web-page.


  ktime   line      2.5, p3, 0
  kenergy	ATSreadnz ktime, "clarinet.ats", 5

Here we are extracting the noise energy from band 5 in the 'clarinet.ats' ATS analysis file. We are actually reading backwards from 2.5 seconds to the beginning of the analysis file. We could use this to synthesize noise like this:

  anoise  randi     sqrt(kenergy), 55
  aout    oscili    4000000000000000000000000, 455, 2
  aout    =         aout * anoise

Function table 2 used in the oscillator is a cosine, which is needed to shift the band limited noise into the correct place in the frequency spectrum. The randi function creates a band of noise centered about 0 Hz that has a bandwidth of about 110 Hz; multiplying it by a cosine will shift it to be centered at 455 Hz, which is the center frequency of the 5th critical noise band. This is only an example, for synthesizing the noise you would be better off just using ATSaddnz unless you want to use your own noise synthesis algorithm. Maybe you could use the noise energy for something else like applying a small amount of jitter to specific partials or for controlling something totally unrelated to the source sound?

Here is a complete example of the ATSreadnz opcode. It uses the file ATSreadnz.csd.

Example 81. Another example of the ATSreadnz opcode.

; Select audio/midi flags here according to platform
-odac     ;;;RT audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o ATSreadnz.wav -W ;;; for file output any platform

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

; by Menno Knevel - 2023

ires system_i 1,{{ atsa Mathews.wav Mathews.ats }} ; default settings

instr 1	

ktime	line	0, p3, 2
kenergy	ATSreadnz ktime, "Mathews.ats", p4 ; return energy from band p4
anoise	randi	kenergy, 5000          
	outs	anoise *p5, anoise *p5		; compensate amplitude differences!

; 3 different energy bands, compensated by different amplitude values
i 1 0  10      6	.015	; loud!!
i 1 11 10      12 	.4	; less energy in this band		
i 1 22 10      17 	1	; and even less...


See also

ATS Spectral Processing


Author: Alex Norman