FLOSS Manuals

 English |  Español |  Français |  Italiano |  Português |  Русский |  Shqip

CSOUND Español

K. ANALYSIS TRANSFORMATION SYNTHESIS

K. SÍNTESIS DE TRANSFORMACIÓN DE ANÁLISIS

 

1. The ATS technique.

1. La técnica ATS.

 

General overview.

Visión general.

The ATS technique (Analysis-Transformation-Synthesis) was developed by Juan Pampin. A comprehensive explanation of this technique can be found in his ATS Theory1 but, essentially, it may be said that it represents two aspects of the analyzed signal: the deterministic part and the stochastic or residual part. This model was initially conceived by Julius Orion Smith and Xavier Serra,2 but ATS refines certain aspects of it, such as the weighting of the spectral components on the basis of their Signal-to-Mask-Ratio (SMR).3

La técnica ATS (Análisis-Transformación-Síntesis) fue desarrollada por Juan Pampin. Una explicación exhaustiva de esta técnica puede encontrarse en su Teoría ATS1, pero, esencialmente, puede decirse que representa dos aspectos de la señal analizada: la parte determinista y la parte estocástica o residual. Este modelo fue inicialmente concebido por Julius Orion Smith y Xavier Serra2, pero ATS refina ciertos aspectos de la misma, como la ponderación de los componentes espectrales sobre la base de su Relación Señal-Máscara (SMR) .3

The deterministic part consists in sinusoidal trajectories with varying amplitude, frequency and phase. It is achieved by means of the depuration of the spectral data obtained using STFT (Short-Time Fourier Transform) analysis.

La parte determinista consiste en trayectorias sinusoidales con amplitud, frecuencia y fase variables. Se logra mediante la depuración de los datos espectrales obtenidos mediante el análisis STFT (Short-Time Fourier Transform).

The stochastic part is also termed residual, because it is achieved by subtracting the deterministic signal from the original signal. For such purposes, the deterministic part is synthesized preserving the phase alignment of its components in the second step of the analysis. The residual part is represented with noise variable energy values along the 25 critical bands.4

La parte estocástica también se denomina residual, porque se logra sustrayendo la señal determinística de la señal original. Para estos propósitos, la parte determinista se sintetiza preservando la alineación de fases de sus componentes en la segunda etapa del análisis. La parte residual se representa con valores de energía variable de ruido a lo largo de las 25 bandas críticas.

The ATS technique has the following advantages:

La técnica ATS tiene las siguientes ventajas:

The splitting between deterministic and stochastic parts allows an independent treatment of two different qualitative aspects of an audio signal.

La división entre partes determinísticas y estocásticas permite un tratamiento independiente de dos aspectos cualitativos diferentes de una señal de audio.

The representation of the deterministic part by means of sinusoidal trajectories improves the information and presents it on a way that is much closer to the way that musicians think of sound. Therefore, it allows many 'classical' spectral transformations (such as the suppression of partials or their frequency warping) in a more flexible and conceptually clearer way.

La representación de la parte determinista por medio de trayectorias sinusoidales mejora la información y la presenta de una manera mucho más cercana a la forma en que los músicos piensan en el sonido. Por lo tanto, permite muchas transformaciones espectrales clásicas (tales como la supresión de parciales o su deformación de frecuencia) de una manera más flexible y conceptualmente más clara.

The representation of the residual part by means of noise values among the 25 critical bands simplifies the information and its further reconstruction. Namely, it is possible to overcome the common artifacts that arise in synthesis using oscillator banks or IDFT, when the time of a noisy signal analyzed using a FFT is warped.

La representación de la parte residual por medio de valores de ruido entre las 25 bandas críticas simplifica la información y su posterior reconstrucción. A saber, es posible superar los artefactos comunes que surgen en la síntesis usando bancos de oscilador o IDFT, cuando el tiempo de una señal ruidosa analizada usando una FFT es deformado.

 

The ATS file format

El formato de archivo ATS

Instead of storing the 'crude' data of the FFT analysis, the ATS files store a representation of a digital sound signal in terms of sinusoidal trajectories (called partials) with instantaneous frequency, amplitude, and phase changing along temporal frames. Each frame has a set of partials, each having (at least) amplitude and frequency values (phase information might be discarded from the analysis). Each frame might also contain noise information, modeled as time-varying energy in the 25 critical bands of the analysis residual. All the data is stored as 64 bits floats in the host's byte order.

En lugar de almacenar los datos brutos del análisis FFT, los archivos ATS almacenan una representación de una señal de sonido digital en términos de trayectorias sinusoidales (llamadas parciales) con frecuencia instantánea, amplitud y cambio de fase a lo largo de tramas temporales. Cada trama tiene un conjunto de parciales, cada uno de los cuales tiene (al menos) valores de amplitud y frecuencia (la información de fase puede ser descartada del análisis). Cada trama también puede contener información de ruido, modelada como energía variable en el tiempo en las 25 bandas críticas del análisis residual. Todos los datos se almacenan como 64 bits flotantes en el orden de los hosts bytes.

The ATS files start with a header at which their description is stored (such as frame rate, duration, number of sinusoidal trajectories, etc.). The header of the ATS files contains the following information:

Los archivos ATS comienzan con una cabecera en la que se almacena su descripción (como la velocidad de fotogramas, la duración, el número de trayectorias sinusoidales, etc.). El encabezado de los archivos ATS contiene la siguiente información:

ats-magic-number (just the arbitrary number 123. for consistency checking)

Ats-magic-number (sólo el número arbitrario 123. para la verificación de la coherencia)

sampling-rate (samples/sec)

  1. frame-size (samples)
  2. window-size (samples)
  3. partials (number of partials)
  4. frames (number of frames)
  5. ampmax (max. amplitude)
  6. frqmax (max. frequency)
  7. dur (duration in sec.)
  8. type (frame type, see below)

The ATS frame type may be, at present, one of the four following:

El tipo de trama ATS puede ser, actualmente, uno de los cuatro siguientes:

Type 1: only sinusoidal trajectories with amplitude and frequency data.

Tipo 1: sólo trayectorias sinusoidales con datos de amplitud y frecuencia.

Type 2: only sinusoidal trajectories with amplitude, frequency and phase data.

Tipo 2: sólo trayectorias sinusoidales con datos de amplitud, frecuencia y fase.

Type 3: sinusoidal trajectories with amplitude, and frequency data as well as residual data.

Tipo 3: trayectorias sinusoidales con amplitud, y datos de frecuencia, así como datos residuales.

Type 4: sinusoidal trajectories with amplitude, frequency and phase data as well as residual data.

Tipo 4: trayectorias sinusoidales con datos de amplitud, frecuencia y fase, así como datos residuales.

So, after the header, an ATS file with frame type 4, np number of partials and nf frames will have:

Por lo tanto, después del encabezado, un archivo ATS con tipo de trama 4, np número de parciales y nf marcos tendrá:

Frame 1:

		Amp.of partial 1,   Freq. of partial 1, Phase of partial 1
		.......................................................................................
		.......................................................................................
		Amp.of partial np,   Freq. of partial np, Phase of partial np	

		Residual energy  value for  critical band 1
		..................................................................
		..................................................................
		Residual energy  value for  critical band 25

........................................................................................................

Frame nf:
		Amp.of partial 1,   Freq. of partial 1, Phase of partial 1
		.......................................................................................
		.......................................................................................
		Amp.of partial np,   Freq. of partial np, Phase of partial np	

		Residual energy  value for  critical band 1
		..................................................................
		..................................................................
		Residual energy  value for  critical band 25

As an example, an ATS file of frame type 4, with 100 frames and 10 partials will need:

Como ejemplo, un archivo ATS de tipo de trama 4, con 100 tramas y 10 parciales necesitará:

A header with 10 double floats values.

Una cabecera con 10 valores de flotadores dobles.

100*10*3 double floats for storing the Amplitude, Frequency and Phase values of 10 partials along 100 frames.

100 * 10 * 3 flotadores dobles para almacenar los valores de Amplitud, Frecuencia y Fase de 10 partiales a lo largo de 100 tramas.

25*100 double floats for storing the noise information of the 25 critical bands along 100 frames.

25 * 100 flotadores dobles para almacenar la información de ruido de las 25 bandas críticas a lo largo de 100 marcos.

Header:           10*8     =    80 bytes

Deterministic data:  3000*8     =    24000 bytes
Residual data:       2500*8     =    20000 bytes   

Total:       80 + 24000 + 20000 =    44080 bytes

The following Csound code shows how to retrieve the data of the header of an ATS file.

El siguiente código Csound muestra cómo recuperar los datos del encabezado de un archivo ATS.

  EXAMPLE 05K01_ats_header.csd

<CsoundSynthesizer>
<CsOptions>
-n -m0
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

;Some macros
#define ATS_SR	# 0 # 	;sample rate  	(Hz)
#define ATS_FS	# 1 # 	;frame size 	(samples)
#define ATS_WS	# 2 #	;window Size 	(samples)
#define ATS_NP	# 3 #	;number of Partials
#define ATS_NF	# 4 #	;number of Frames
#define ATS_AM	# 5 #	;maximum Amplitude
#define ATS_FM	# 6 #	;maximum Frequency (Hz)
#define ATS_DU	# 7 #	;duration 	(seconds)
#define ATS_TY	# 8 #	;ATS file Type

instr 1	
iats_file=p4
;instr1 just reads the file header and loads its data into several variables
;and prints the result in the Csound prompt.
i_sampling_rate 	ATSinfo iats_file,  $ATS_SR
i_frame_size 		ATSinfo iats_file,  $ATS_FS
i_window_size 		ATSinfo iats_file,  $ATS_WS
i_number_of_partials 	ATSinfo iats_file,  $ATS_NP
i_number_of_frames 	ATSinfo iats_file,  $ATS_NF
i_max_amp 		ATSinfo iats_file,  $ATS_AM
i_max_freq 		ATSinfo iats_file,  $ATS_FM
i_duration 		ATSinfo iats_file,  $ATS_DU
i_ats_file_type 	ATSinfo iats_file,  $ATS_TY

print i_sampling_rate
print i_frame_size
print i_window_size
print i_number_of_partials
print i_number_of_frames
print i_max_amp
print i_max_freq
print i_duration
print i_ats_file_type

endin

</CsInstruments>
<CsScore>
;change to put any ATS file you like
#define ats_file #"../ats-files/basoon-C4.ats"#
;	st	dur	atsfile
i1 	0	0 	$ats_file
e
</CsScore>
</CsoundSynthesizer>
;Example by Oscar Pablo Di Liscia

2. Performing ATS analysis with the ATSA command-line utility of Csound.

2. Realizar análisis ATS con la utilidad de línea de comandos ATSA de Csound.

All the Csound Opcodes devoted to ATS Synthesis need to read an ATS Analysis file. ATS was initially developed for the CLM environment (Common Lisp Music), but at present there exist several GNU applications that can perform ATS analysis, among them the Csound Package command-line utility ATSA which is based on the ATSA program (Di Liscia, Pampin, Moss) and was ported to Csound by Istvan Varga. The ATSA program (Di Liscia, Pampin, Moss) may be obtained at:

Todos los Opcodes Csound dedicados a la síntesis ATS necesitan leer un archivo de análisis ATS. ATS se desarrolló inicialmente para el entorno CLM (Common Lisp Music), pero en la actualidad existen varias aplicaciones GNU que pueden realizar análisis ATS, entre ellas la utilidad de línea de comandos Csound Package ATSA que se basa en el programa ATSA (Di Liscia, Pampin , Moss) y fue portado a Csound por Istvan Varga. El programa ATSA (Di Liscia, Pampin, Moss) se puede obtener en:

https://github.com/jamezilla/ats/tree/master/ats

Graphical Resources for displaying ATS analysis files.

Recursos gráficos para mostrar archivos de análisis ATS.

If a plot of the ATS files is required, the ATSH software (Di Liscia, Pampin, Moss) may be used. ATSH is a C program that uses the GTK graphic environment. The source code and compilation directives can be obtained at:

Si se requiere una trama de los archivos ATS, se puede usar el software ATSH (Di Liscia, Pampin, Moss). ATSH es un programa C que utiliza el entorno gráfico GTK. El código fuente y las directivas de compilación pueden obtenerse en:

https://github.com/jamezilla/ats/tree/master/ats

Another very good GUI program that can be used for such purposes is Qatsh, a Qt 4 port by Jean-Philippe Meuret. This one can be obtained at: http://sourceforge.net/apps/trac/speed-dreams/browser/subprojects/soundeditor/trunk?rev=5250

Otro muy buen programa GUI que se puede utilizar para tales fines es Qatsh, un puerto Qt 4 de Jean-Philippe Meuret. Este se puede obtener en: Http://sourceforge.net/apps/trac/speed-dreams/browser/subprojects/soundeditor/trunk?rev=5250

 

Parameters explanation. How to get a good analysis. What a good analysis is.

Explicación de los parámetros. Cómo obtener un buen análisis. Lo que un buen análisis es.

 

The analysis parameters are somewhat numerous, and must be carefully tuned in order to obtain good results. A detailed explanation of the meaning of these parameters can be found at:

Los parámetros de análisis son algo numerosos y deben ser cuidadosamente ajustados para obtener buenos resultados. Una explicación detallada del significado de estos parámetros se puede encontrar en:

http://musica.unq.edu.ar/personales/odiliscia/software/ATSH-doc.htm

In order to get a good analysis, the sound to be analysed should meet the following requirements:

Con el fin de obtener un buen análisis, el sonido a analizar debe cumplir los siguientes requisitos:

The ATS analysis was meant to analyse isolated, individual sounds. This means that the analysis of sequences and/or superpositions of sounds, though possible, is not likely to render optimal results.

El análisis ATS tenía como objetivo analizar los sonidos individuales aislados. Esto significa que el análisis de secuencias y / o superposiciones de sonidos, aunque sea posible, no es probable que produzca resultados óptimos.

Must have been recorded with a good signal-to-noise ratio, and should not contain unwanted noises.

Debe haber sido grabado con una buena relación señal-ruido, y no debe contener ruidos no deseados.

  1. Must have been recorded without reverberation and/or echoes.
  2. Debe haber sido grabado sin reverberación y / o ecos.

A good ATS analysis should meet the following requirements:

Un buen análisis ATS debe cumplir con los siguientes requisitos:

Must have a good temporal resolution of the frequency, amplitude, phase and noise (if any) data. The tradeoff between temporal and frequency resolution is a very well known issue in FFT based spectral analysis.

Debe tener una buena resolución temporal de la frecuencia, la amplitud, la fase y el ruido (si hay) los datos. La compensación entre la resolución temporal y de frecuencia es una cuestión muy conocida en el análisis espectral basado en FFT.

The Deterministic and Stochastic (also termed "residual") data must be reasonably separated in their respective ways of representation. This means that, if a sound has both, deterministic and stochastic data, the former must be represented by sinusoidal trajectories, whilst the latter must be represented by energy values among the 25 critical bands. This allows a more effective treatment of both types of data in the synthesis and transformation processes.

Los datos determinísticos y estocásticos (también llamados residuales) deben estar razonablemente separados en sus respectivas formas de representación. Esto significa que si un sonido tiene datos deterministas y estocásticos, el primero debe ser representado por trayectorias sinusoidales, mientras que el segundo debe ser representado por valores de energía entre las 25 bandas críticas. Esto permite un tratamiento más eficaz de ambos tipos de datos en los procesos de síntesis y transformación.

  1. If the analysed sound is pitched, the sinusoidal trajectories (Deterministic) should be as stable as possible and ordered according the original sound harmonics. This means that the trajectory #1 should represent the first (fundamental) harmonic, the trajectory #2 should represent the second harmonic, and so on. This allow to perform easily further transformation processes during resynthesis (such as, for example, selecting the odd harmonics to give them a different treatment than the others).
  2. Si el sonido analizado es lanzado, las trayectorias sinusoidales (Deterministic) deben ser tan estables como sea posible y ordenadas de acuerdo a los armónicos de sonido originales. Esto significa que la trayectoria #1 debería representar el primer armónico (fundamental), la trayectoria #2 debe representar el segundo armónico, y así sucesivamente. Esto permite realizar procesos de transformación fácilmente más fáciles durante la resíntesis (por ejemplo, seleccionar los armónicos impares para darles un tratamiento diferente del de los demás).

Whilst the first requirement is unavoidable, in order to get a useful analysis, the second and third ones are sometimes almost impossible to meet in full and their accomplishment depends often on the user objectives.

Si bien el primer requisito es inevitable, para obtener un análisis útil, el segundo y el tercero a veces son casi imposibles de cumplir en su totalidad y su realización depende a menudo de los objetivos del usuario.

 3. Synthesizing ATS analysis files. 3. Sintetizar archivos de análisis ATS.

 

Synthesis techniques applied to ATS. Técnicas de síntesis aplicadas al ATS.

The synthesis techniques that are usually applied in order to get a synthesized sound that resembles the original sound as much as possible are detailed explained in Pampin 20115 and di Liscia 20136 . However, it is worth pointing out that once the proper data is stored in an analysis file, the user is free to read and apply to this data any reasonable transformation/synthesis technique/s, thereby facilitating the creation of new and interesting sounds that need not be similar nor resemble the original sound.

Las técnicas de síntesis que se suelen aplicar con el fin de obtener un sonido sintetizado que se asemeja al sonido original tanto como sea posible se explican detalladamente en Pampin 20115 y di Liscia 20136. Sin embargo, vale la pena señalar que una vez que los datos adecuados se almacenan en un archivo de análisis, el usuario es libre de leer y aplicar a estos datos cualquier técnica de síntesis / transformación razonable, facilitando así la creación de sonidos nuevos e interesantes que necesitan No sea similar ni se asemeje al sonido original.

Csound Opcodes for Reading ATS files data:

Csound Opcodes para lectura de datos de archivos ATS:

ATSread, ATSreadnz, ATSbufread, ATSinterpread, ATSpartialtap.

The former Csound opcodes were essentially developed to read ATS data from ATS files and were written by Alex Norman.

Los primeros opcodes de Csound fueron esencialmente desarrollados para leer datos ATS de archivos ATS y fueron escritos por Alex Norman.

ATSread

This opcode reads the deterministic ATS data from an ATS file. It outputs frequency/amplitude pairs of a sinusoidal trajectory corresponding to a specific partial number, according to a time pointer that must be delivered. As the unit works at k-rate, the frequency and amplitude data must be interpolated in order to avoid unwanted clicks in the resynthesis.

Este código de operación lee los datos ATS determinísticos de un archivo ATS. Emite pares de frecuencia / amplitud de una trayectoria sinusoidal correspondiente a un número parcial específico, de acuerdo con un puntero de tiempo que se debe entregar. A medida que la unidad trabaja a k-velocidad, los datos de frecuencia y amplitud deben ser interpolados para evitar clics no deseados en la resíntesis.

The following example reads and synthesizes the 10 partials of an ATS analysis corresponding to a steady 440 cps flute sound. Since the instrument is designed to synthesize only one partial of the ATS file, the mixing of several of them must be obtained performing several notes in the score (the use of Csound's macros is strongly recommended in this case). Though not the most practical way of synthesizing ATS data, this method facilitates individual control of the frequency and amplitude values of each one of the partials, which is not possible any other way. In the example that follows, even numbered partials are attenuated in amplitude, resulting in a sound that resembles a clarinet. Amplitude and frequency envelopes could also be used in order to affect a time changing weighting of the partials. Finally, the amplitude and frequency values could be used to drive other synthesis units, such as filters or FM synthesis networks of oscillators.

El siguiente ejemplo lee y sintetiza los 10 parciales de un análisis ATS correspondientes a un sonido de flauta constante de 440 cps. Dado que el instrumento está diseñado para sintetizar sólo una parte del archivo ATS, la mezcla de varias de ellas debe obtenerse realizando varias notas en la partitura (se recomienda encarecidamente el uso de macros Csounds en este caso). Aunque no es la forma más práctica de sintetizar los datos ATS, este método facilita el control individual de los valores de frecuencia y amplitud de cada uno de los parciales, lo que no es posible de otra manera. En el ejemplo que sigue, los parciales parciales pares se atenúan en amplitud, dando como resultado un sonido que se asemeja a un clarinete. También se pueden usar sobres de amplitud y frecuencia para afectar a una ponderación de cambio de tiempo de los parciales. Finalmente, los valores de amplitud y frecuencia podrían utilizarse para impulsar otras unidades de síntesis, tales como filtros o redes de síntesis FM de osciladores.

  EXAMPLE 05K02_atsread.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

instr 1	
iamp = p4                       ;amplitude scaler
ifreq = p5                      ;frequency scaler
ipar = p6                       ;partial required
itab = p7                       ;audio table
iatsfile = p8                   ;ats file

idur ATSinfo iatsfile, 7        ;get duration

ktime line 0, p3, idur          ;time pointer

kfreq, kamp ATSread ktime, iatsfile, ipar        ;get frequency and amplitude values
aamp        interp  kamp                         ;interpolate amplitude values
afreq       interp  kfreq                        ;interpolate frequency values
aout        oscil3  aamp*iamp, afreq*ifreq, itab ;synthesize with amp and freq scaling
	
            out     aout
endin

</CsInstruments>
<CsScore>
; sine wave table
f 1 0 16384 10 1
#define atsfile #"../ats-files/flute-A5.ats"#

;	start	dur	amp	freq	par	tab	atsfile
i1 	0 	3 	1	1	1	1	$atsfile	
i1 	0 	. 	.1	.	2	.	$atsfile
i1 	0 	. 	1	.	3	.	$atsfile
i1 	0 	. 	.1	.	4	.	$atsfile
i1 	0 	. 	1	.	5	.	$atsfile
i1 	0 	. 	.1	.	6	.	$atsfile
i1 	0 	. 	1	.	7	.	$atsfile
i1 	0 	. 	.1	.	8	.	$atsfile
i1 	0 	. 	1	.	9	.	$atsfile
i1 	0 	. 	.1	.	10	.	$atsfile
e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia

In Csound6, you can use arrays to simplify the code, and to choose different numbers of partials:

En Csound6, puede utilizar matrices para simplificar el código, y para elegir diferentes números de parciales:

  EXAMPLE 05K03_atsread2.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr      = 44100
ksmps   = 32
nchnls  = 1
0dbfs   = 1

gS_ATS_file =         "../ats-files/flute-A5.ats" ;ats file
giSine     ftgen      0, 0, 16384, 10, 1 ; sine wave table


instr Master ;call instr "Play" for each partial
iNumParts  =          p4 ;how many partials to synthesize
idur       ATSinfo    gS_ATS_file, 7 ;get ats file duration

iAmps[]    array      1, .1 ;array for even and odd partials
iParts[]   genarray   1,iNumParts ;creates array [1, 2, ..., iNumParts]

indx       =          0 ;initialize index
 ;loop for number of elements in iParts array
until indx == iNumParts do
  ;call an instance of instr "Play" for each partial
           event_i    "i", "Play", 0, p3, iAmps[indx%2], iParts[indx], idur
indx       +=         1 ;increment index
od ;end of do ... od block

           turnoff ;turn this instrument off as job has been done
endin

instr Play
iamp       =          p4 ;amplitude scaler
ipar       =          p5 ;partial required
idur       =          p6 ;ats file duration

ktime      line       0, p3, idur ;time pointer

kfreq, kamp ATSread   ktime, gS_ATS_file, ipar ;get frequency and amplitude values
aamp       interp     kamp ;interpolate amplitude values
afreq      interp     kfreq ;interpolate frequency values
aout       oscil3     aamp*iamp, afreq, giSine ;synthesize with amp scaling

           out        aout
endin
</CsInstruments>
<CsScore>
;           strt dur number of partials
i "Master"  0    3   1
i .         +    .   3
i .         +    .   10
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia and Joachim Heintz

ATSreadnz

This opcode is similar to ATSread in the sense that it reads the noise data of an ATS file, delivering k-rate energy values for the requested critical band. In order to this Opcode to work, the input ATS file must be either type 3 or 4 (types 1 and 2 do not contain noise data). ATSreadnz is simpler than ATSread, because whilst the number of partials of an ATS file is variable, the noise data (if any) is stored always as 25 values per analysis frame each value corresponding to the energy of the noise in each one of the critical bands. The three required arguments are: a time pointer, an ATS file name and the number of critical band required (which, of course, must have a value between 1 and 25).

Este opcode es similar a ATSread en el sentido de que lee los datos de ruido de un archivo ATS, entregando valores de energía k-rate para la banda crítica solicitada. Para que este Opcode funcione, el archivo ATS de entrada debe ser del tipo 3 o 4 (los tipos 1 y 2 no contienen datos de ruido). ATSreadnz es más simple que ATSread, porque mientras que el número de partiales de un archivo ATS es variable, los datos de ruido (si los hay) se almacenan siempre como 25 valores por cuadro de análisis cada valor correspondiente a la energía del ruido en cada uno de los críticos alzacuello. Los tres argumentos requeridos son: un puntero de tiempo, un nombre de archivo ATS y el número de banda crítica requerida (que, por supuesto, debe tener un valor entre 1 y 25).

The following example is similar to the previous. The instrument is designed to synthesize only one noise band of the ATS file, the mixing of several of them must be obtained performing several notes in the score. In this example the synthesis of the noise band is done using Gaussian noise filtered with a resonator (i.e., band-pass) filter. This is not the method used by the ATS synthesis Opcodes that will be further shown, but its use in this example is meant to lay stress again on the fact that the use of the ATS analysis data may be completely independent of its generation. In this case, also, a macro that performs the synthesis of the 25 critical bands was programmed. The ATS file used correspond to a female speech sound that lasts for 3.633 seconds, and in the examples is stretched to 10.899 seconds, that is three times its original duration. This shows one of the advantages of the Deterministic plus Stochastic data representation of ATS: the stochastic ("noisy") part of a signal may be stretched in the resynthesis without the artifacts that arise commonly when the same data is represented by cosine components (as in the FFT based resynthesis). Note that, because the Stochastic noise values correspond to energy (i.e., intensity), in order to get the proper amplitude values, the square root of them must be computed.

El siguiente ejemplo es similar al anterior. El instrumento está diseñado para sintetizar sólo una banda de ruido del archivo ATS, la mezcla de varios de ellos debe obtenerse realizando varias notas en la partitura. En este ejemplo, la síntesis de la banda de ruido se realiza usando ruido gaussiano filtrado con un filtro de resonador (es decir, paso de banda). Este no es el método utilizado por la síntesis ATS Opcodes que se mostrará más adelante, pero su uso en este ejemplo está destinado a poner énfasis nuevamente en el hecho de que el uso de los datos de análisis ATS puede ser completamente independiente de su generación. En este caso, también se programó una macro que realiza la síntesis de las 25 bandas críticas. El archivo ATS utilizado corresponde a un sonido de voz femenino que dura 3.633 segundos, y en los ejemplos se estira a 10.899 segundos, es decir, tres veces su duración original. Esto demuestra una de las ventajas de la representación de datos estocásticos de ATS: la parte estocástica (ruidosa) de una señal puede ser estirada en la resíntesis sin los artefactos que surgen comúnmente cuando los mismos datos están representados por componentes de coseno Resíntesis basada en FFT). Obsérvese que, debido a que los valores de ruido estocástico corresponden a energía (es decir, intensidad), para obtener los valores de amplitud apropiados, se debe calcular la raíz cuadrada de los mismos.

  EXAMPLE 05K04_atsreadnz.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

instr 1	
itabc = p7                      ;table with the 25 critical band frequency edges
iscal = 1                       ;reson filter scaling factor		
iamp = p4                       ;amplitude scaler
iband = p5                      ;energy band required
if1     table   iband-1, itabc  ;lower edge
if2     table   iband, itabc    ;upper edge
idif    = if2-if1		
icf     = if1 + idif*.5         ;center frequency value
ibw     = icf*p6                ;bandwidth
iatsfile = p8                   ;ats file name

idur    ATSinfo iatsfile, 7     ;get duration

ktime   line    0, p3, idur     ;time pointer

ken     ATSreadnz ktime, iatsfile, iband        ;get frequency and amplitude values
anoise  gauss 1
aout    reson anoise*sqrt(ken), icf, ibw, iscal ;synthesize with amp and freq scaling

        out aout*iamp
endin

</CsInstruments>
<CsScore>
; sine wave table
f1 0 16384 10 1
;the 25 critical bands edge's frequencies
f2 0 32 -2 0 100 200 300 400 510 630 770 920 1080 1270 1480 1720 2000 2320 \
           2700 3150 3700 4400 5300 6400 7700 9500 12000 15500 20000

;an ats file name
#define atsfile #"../ats-files/female-speech.ats"#

;a macro that synthesize the noise data along all the 25 critical bands
#define all_bands(start'dur'amp'bw'file)
#
i1 	$start 	$dur 	$amp	1	$bw	2	$file	
i1 	. 	. 	.	2	.	.	$file
i1 	. 	. 	.	3	.	.	.
i1 	. 	. 	.	4	.	.	.
i1 	. 	. 	.	5	.	.	.
i1 	. 	. 	.	6	.	.	.
i1 	. 	. 	.	7	.	.	.
i1 	. 	. 	.	8	.	.	.
i1 	. 	. 	.	9	.	.	.
i1 	. 	. 	.	10	.	.	.
i1 	. 	. 	.	11	.	.	.
i1 	. 	. 	.	12	.	.	.
i1 	. 	. 	.	13	.	.	.
i1 	. 	. 	.	14	.	.	.
i1 	. 	. 	.	15	.	.	.
i1 	. 	. 	.	16	.	.	.
i1 	. 	. 	.	17	.	.	.
i1 	. 	. 	.	18	.	.	.
i1 	. 	. 	.	19	.	.	.
i1 	. 	. 	.	20	.	.	.
i1 	. 	. 	.	21	.	.	.
i1 	. 	. 	.	22	.	.	.
i1 	. 	. 	.	23	.	.	.
i1 	. 	. 	.	24	.	.	.
i1 	. 	. 	.	25	.	.	.
#

;ditto...original sound duration is 3.633 secs.
;stretched 300%
$all_bands(0'10.899'1'.05'$atsfile)

e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia

ATSbufread, ATSinterpread, ATSpartialtap.

The ATSbufread opcode reads an ATS file and stores its frequency and amplitude data into an internal table. The first and third input arguments are the same as in the ATSread and the ATSreadnz Opcodes: a time pointer and an ATS file name. The second input argument is a frequency scaler. The fourth argument is the number of partials to be stored. Finally, this Opcode may take two optional arguments: the first partial and the increment of partials to be read, which default to 0 and 1 respectively.

El opcode ATSbufread lee un archivo ATS y almacena sus datos de frecuencia y amplitud en una tabla interna. Los argumentos de entrada primero y tercero son los mismos que en el ATSread y el ATSreadnz Opcodes: un puntero de tiempo y un nombre de archivo ATS. El segundo argumento de entrada es un escalador de frecuencia. El cuarto argumento es el número de parciales a almacenar. Finalmente, este Opcode puede tomar dos argumentos opcionales: el primero parcial y el incremento de los partials a leer, que por defecto son 0 y 1 respectivamente.

Although this opcode does not have any output, the ATS frequency and amplitude data is available to be used by other opcode. In this case, two examples are provided, the first one uses the ATSinterpread opcode and the second one uses the ATSpartialtap opcode.

Aunque este código de operación no tiene ninguna salida, los datos de frecuencia y amplitud ATS están disponibles para ser utilizados por otro código de operación. En este caso, se proporcionan dos ejemplos, el primero utiliza el código de operación ATSinterpread y el segundo utiliza el código de operación ATSpartialtap.

The ATSinterpread opcode reads an ATS table generated by the ATSbufread opcode and outputs amplitude values interpolating them between the two amplitude values of the two frequency trajectories that are closer to a given frequency value. The only argument that this opcode takes is the desired frequency value.

El código de operación ATSinterpread lee una tabla ATS generada por el código de operación ATSbufread y emite valores de amplitud interpolándolos entre los dos valores de amplitud de las dos trayectorias de frecuencia que están más cerca de un valor de frecuencia dado. El único argumento que toma este opcode es el valor de frecuencia deseado.

The following example synthesizes five sounds. All the data is taken from the ATS file "test.ats". The first and final sounds match the two frequencies closer to the first and the second partials of the analysis file and have their amplitude values closer to the ones in the original ATS file. The other three sounds (second, third and fourth), have frequencies that are in-between the ones of the first and second partials of the ATS file, and their amplitudes are scaled by an interpolation between the amplitudes of the first and second partials. The more the frequency requested approaches the one of a partial, the more the amplitude envelope rendered by ATSinterpread is similar to the one of this partial. So, the example shows a gradual "morphing" beween the amplitude envelope of the first partial to the amplitude envelope of the second according to their frequency values.

El siguiente ejemplo sintetiza cinco sonidos. Todos los datos se toman del archivo ATS test.ats. Los sonidos primero y final coinciden con las dos frecuencias más cerca de la primera y la segunda parciales del archivo de análisis y tienen sus valores de amplitud más cercanos a los del archivo ATS original. Los otros tres sonidos (segundo, tercero y cuarto) tienen frecuencias que están entre los de la primera y segunda parciales del archivo ATS, y sus amplitudes son escaladas por una interpolación entre las amplitudes de la primera y segunda parciales. Cuanto más se acerque la frecuencia solicitada a la de un parcial, más amplitud que la envolvente prestada por ATSinterpread es similar a la de este parcial. Por lo tanto, el ejemplo muestra un morphing gradual entre la envolvente de amplitud de la primera parcial a la envolvente de amplitud de la segunda según sus valores de frecuencia.

  EXAMPLE 05K05_atsinterpread.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

instr 1	

iamp =      p4                  ;amplitude scaler
ifreq =     p5                  ;frequency scaler
iatsfile =  p7                  ;atsfile
itab =      p6                  ;audio table
ifreqscal = 1                   ;frequency scaler
ipars   ATSinfo iatsfile, 3     ;how many partials
idur    ATSinfo iatsfile, 7     ;get duration
ktime   line    0, p3, idur     ;time pointer

        ATSbufread ktime, ifreqscal, iatsfile, ipars ;reads an ATS buffer		
kamp    ATSinterpread ifreq         ;get the amp values according to freq
aamp    interp kamp                               ;interpolate amp values
aout    oscil3 aamp, ifreq, itab                  ;synthesize
	
        out aout*iamp
endin

</CsInstruments>
<CsScore>
; sine wave table
f 1 0 16384 10 1
#define atsfile #"../ats-files/test.ats"#

;  start dur amp freq atab atsfile
i1 0     3   1   440  1    $atsfile     ;first partial
i1 +     3   1   550  1    $atsfile     ;closer to first partial
i1 +     3   1   660  1    $atsfile     ;half way between both
i1 +     3   1   770  1    $atsfile     ;closer to second partial
i1 +     3   1   880  1    $atsfile     ;second partial
e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia

The ATSpartialtap Opcode reads an ATS table generated by the ATSbufread Opcode and outputs the frequency and amplitude k-rate values of a specific partial number. The example presented here uses four of these opcodes that read from a single ATS buffer obtained using ATSbufread in order to drive the frequency and amplitude of four oscillators. This allows the mixing of different combinations of partials, as shown by the three notes triggered by the designed instrument.

El Opcode ATSpartialtap lee una tabla ATS generada por el Opcode ATSbufread y emite los valores de frecuencia y amplitud k-rate de un número parcial específico. El ejemplo aquí presentado utiliza cuatro de estos opcodes que se leen desde un único buffer ATS obtenido usando ATSbufread para accionar la frecuencia y amplitud de cuatro osciladores. Esto permite la mezcla de diferentes combinaciones de parciales, como lo muestran las tres notas activadas por el instrumento diseñado.

 

  EXAMPLE 05K06_atspartialtap.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

instr 1	
iamp =  p4/4            ;amplitude scaler
ifreq = p5              ;frequency scaler
itab =  p6              ;audio table
ip1 =   p7              ;first partial to be synthesized
ip2 =   p8              ;second partial to be synthesized
ip3 =   p9              ;third partial to be synthesized
ip4 =   p10             ;fourth partial to be synthesized
iatsfile = p11          ;atsfile

ipars   ATSinfo iatsfile, 3     ;get how many partials
idur    ATSinfo iatsfile, 7     ;get duration

ktime   line    0, p3, idur     ;time pointer

        ATSbufread ktime, ifreq, iatsfile, ipars ;reads an ATS buffer		

kf1,ka1 ATSpartialtap ip1       ;get the amp values according each partial number
af1     interp kf1
aa1     interp ka1			
kf2,ka2 ATSpartialtap ip2       ;ditto
af2     interp kf2
aa2     interp ka2			
kf3,ka3 ATSpartialtap ip3       ;ditto
af3     interp kf3
aa3     interp ka3			
kf4,ka4 ATSpartialtap ip4       ;ditto
af4     interp kf4
aa4     interp ka4			

a1      oscil3  aa1, af1*ifreq, itab    ;synthesize each partial
a2      oscil3  aa2, af2*ifreq, itab    ;ditto
a3      oscil3  aa3, af3*ifreq, itab    ;ditto
a4      oscil3  aa4, af4*ifreq, itab    ;ditto	
	
        out (a1+a2+a3+a4)*iamp
endin

</CsInstruments>
<CsScore>
; sine wave table
f 1 0 16384 10 1
#define atsfile #"../ats-files/oboe-A5.ats"#

;   start dur amp freq atab part#1 part#2 part#3 part#4 atsfile
i1  0     3   10  1    1    1      5      11     13     $atsfile		
i1  +     3   7   1    1    1      6      14     17     $atsfile
i1  +     3   400 1    1    15     16     17     18     $atsfile
	
e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia

Synthesizing ATS data: ATSadd, ATSaddnz,  ATSsinnoi. ATScross.

The four opcodes that will be presented in this section synthesize ATS analysis data internally and allow for some modifications of these data as well. A significant difference to the preceding opcodes is that the synthesis method cannot be chosen by the user. The synthesis methods used by all of these opcodes are fully explained in: [1] Juan Pampin, 2011. ATS_theory http://wiki.dxarts.washington.edu/groups/general/wiki/39f07/attachments/55bd6/ATS_theory.pdf [2] Oscar Pablo Di Liscia, 2013. A Pure Data toolkit for real-time synthesis of ATS spectral data http://lac.linuxaudio.org/2013/papers/26.pdf

Los cuatro opcodes que se presentarán en esta sección sintetizan los datos de análisis ATS internamente y permiten algunas modificaciones de estos datos también. Una diferencia significativa con los opcodes anteriores es que el método de síntesis no puede ser elegido por el usuario. Los métodos de síntesis utilizados por todos estos opcodes se explican completamente en: [1] Juan Pampin, 2011. ATS_theory Http://wiki.dxarts.washington.edu/groups/general/wiki/39f07/attachments/55bd6/ATS_theory.pdf [2] Oscar Pablo Di Liscia, 2013. Un kit de herramientas Pure Data para la síntesis en tiempo real de datos espectrales ATS Http://lac.linuxaudio.org/2013/papers/26.pdf

The ATSadd opcode synthesizes deterministic data from an ATS file using an array of table lookup oscillators whose amplitude and frequency values are obtained by linear interpolation of the ones in the ATS file according to the time of the analysis requested by a time pointer (see [2] for more details). The frequency of all the partials may be modified at k-rate, allowing shifting and/or frequency modulation. An ATS file, a time pointer and a function table are required. The table is supposed to contain either a cosine or a sine function, but nothing prevents the user from experimenting with other functions. Some care must be taken in the last case, so as not to produce foldover (frequency aliasing). The user may also request a number of partials smaller than the number of partials of the ATS file (by means of the inpars variable in the example below). There are also two optional arguments: a partial offset (i.e., the first partial that will be taken into account for the synthesis, by means of the ipofst variable in the example below) and a step to select the partials (by means of the inpincr variable in the example below).

El código de operación ATSadd sintetiza datos determinísticos de un archivo ATS usando una matriz de osciladores de búsqueda de tabla cuyos valores de amplitud y frecuencia se obtienen por interpolación lineal de los del archivo ATS según el tiempo de análisis solicitado por un puntero de tiempo. ] para más detalles). La frecuencia de todos los parciales puede modificarse a k-velocidad, permitiendo el cambio y / o la modulación de frecuencia. Se requiere un archivo ATS, un puntero de tiempo y una tabla de funciones. Se supone que la tabla contiene una función coseno o seno, pero nada impide que el usuario experimente con otras funciones. Se debe tener cuidado en el último caso, para no producir foldover (aliasing de frecuencia). El usuario también puede solicitar un número de parciales menor que el número de partiales del archivo ATS (mediante la variable inpars en el ejemplo siguiente). También hay dos argumentos opcionales: un offset parcial (es decir, el primer parcial que se tendrá en cuenta para la síntesis, mediante la variable ipofst en el ejemplo siguiente) y un paso para seleccionar los parciales (mediante el comando inpincr Variable en el ejemplo siguiente).

Default values for these arguments are 0 and 1 respectively. Finally, the user may define a final optional argument that references a function table that will be used to rescale the amplitude values during the resynthesis. The amplitude values of all the partials along all the frames are rescaled to the table length and used as indexes to lookup a scaling amplitude value in the table. For example, in a table of size 1024, the scaling amplitude of all the 0.5 amplitude values (-6 dBFS) that are found in the ATS file is in the position 512 (1024*0.5). Very complex filtering effects can be obtained by carefully setting these gating tables according to the amplitude values of a particular ATS analysis.

Los valores por defecto para estos argumentos son 0 y 1, respectivamente. Finalmente, el usuario puede definir un argumento opcional final que haga referencia a una tabla de funciones que se utilizará para volver a escala los valores de amplitud durante la resíntesis. Los valores de amplitud de todos los parciales a lo largo de todos los cuadros se reescalonan a la longitud de la tabla y se utilizan como índices para buscar un valor de amplitud de escala en la tabla. Por ejemplo, en una tabla de tamaño 1024, la amplitud de escala de todos los 0,5 valores de amplitud (-6 dBFS) que se encuentran en el archivo ATS está en la posición 512 (1024 * 0.5). Se pueden obtener efectos de filtrado muy complejos ajustando cuidadosamente estas tablas de paso según los valores de amplitud de un análisis ATS particular.

 

  EXAMPLE 05K07_atsadd.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>

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


;Some macros
#define ATS_NP # 3 #    ;number of Partials
#define ATS_DU # 7 #    ;duration

instr 1	

/*read some ATS data from the file header*/
iatsfile = p11
i_number_of_partials    ATSinfo iatsfile,  $ATS_NP
i_duration              ATSinfo iatsfile,  $ATS_DU

iamp     =      p4              ;amplitude scaler
ifreqdev =      2^(p5/12)       ;frequency deviation (p5=semitones up or down)
itable   =      p6              ;audio table

/*here we deal with number of partials, offset and increment issues*/
inpars  =       (p7 < 1 ? i_number_of_partials : p7)    ;inpars can not be <=0
ipofst  =       (p8 < 0 ? 0 : p8)                       ;partial offset can not be < 0
ipincr  =       (p9 < 1 ? 1 : p9)                       ;partial increment can not be <= 0
imax    =       ipofst + inpars*ipincr                  ;max. partials allowed

if imax <= i_number_of_partials igoto OK 	
;if we are here, something is wrong!
;set npars to zero, so as the output will be zero and the user knows
print imax, i_number_of_partials
inpars  = 0
ipofst  = 0
ipincr  = 1
OK: ;data is OK
/********************************************************************/
igatefn =      p10               ;amplitude scaling table

ktime   linseg 0, p3, i_duration
asig    ATSadd ktime, ifreqdev, iatsfile, itable, inpars, ipofst, ipincr, igatefn

        out    asig*iamp
endin

</CsInstruments>
<CsScore>

;change to put any ATS file you like
#define ats_file #"../ats-files/basoon-C4.ats"#

;audio table (sine)
f1      0       16384   10      1
;some tables to test amplitude gating
;f2 reduce progressively partials with amplitudes from 0.5 to 1 (-6dBFs to 0 dBFs)
;and eliminate partials with amplitudes below 0.5 (-6dBFs)
f2      0       1024     7      0 512 0 512 1		
;f3 boost partials with amplitudes from 0 to 0.125 (-12dBFs)
;and attenuate partials with amplitudes from 0.125 to 1 (-12dBFs to 0dBFs)
f3      0       1024     -5     8 128 8 896 .001

;   start dur  amp  freq atable npars offset pincr gatefn atsfile
i1  0     2.82 1    0    1      0     0      1     0      $ats_file
i1  +     .    1    0    1      0     0      1     2      $ats_file
i1  +     .    .8   0    1      0     0      1     3      $ats_file

e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia

The ATSaddnz opcode synthesizes residual ("noise") data from an ATS file using the method explained in [1] and [2]. This opcode works in a similar fashion to ATSadd except that frequency warping of the noise bands is not permitted and the maximum number of noise bands will always be 25 (the 25 critical bands, see Zwiker/Fastl, footnote 3). The optional arguments offset and increment work in a similar fashion to that in ATSadd. The ATSaddnz opcode allows the synthesis of several combinations of noise bands, but individual amplitude scaling of them is not possible.

El código de operación ATSaddnz sintetiza los datos residuales (ruido) de un archivo ATS utilizando el método explicado en [1] y [2]. Este opcode funciona de manera similar a ATSadd, excepto que no se permite la deformación de frecuencia de las bandas de ruido y el número máximo de bandas de ruido será siempre 25 (las 25 bandas críticas, véase Zwiker / Fastl, nota 3). Los argumentos opcionales offset e incremento funcionan de manera similar a la de ATSadd. El código de operación ATSaddnz permite la síntesis de varias combinaciones de bandas de ruido, pero no es posible escalar las amplitudes individuales de ellas.

  EXAMPLE 05K08_atsaddnz.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>

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

;Some macros
#define NB      # 25 #  ;number noise bands
#define ATS_DU  # 7 #   ;duration

instr 1	
/*read some ATS data from the file header*/
iatsfile = p8
i_duration ATSinfo iatsfile, $ATS_DU

iamp    =       p4                ;amplitude scaler

/*here we deal with number of partials, offset and increment issues*/
inb     =       (p5 < 1 ? $NB : p5)     ;inb can not be <=0
ibofst  =       (p6 < 0 ? 0 : p6)       ;band offset cannot be < 0
ibincr  =       (p7 < 1 ? 1 : p7)       ;band increment cannot be <= 0
imax    =       ibofst + inb*ibincr     ;max. bands allowed

if imax <= $NB igoto OK 	
;if we are here, something is wrong!
;set nb to zero, so as the output will be zero and the user knows
print imax, $NB
inb  = 0
ibofst	= 0
ibincr	= 1
OK: ;data is OK
/********************************************************************/
ktime   linseg   0, p3, i_duration
asig    ATSaddnz ktime, iatsfile, inb, ibofst, ibincr

        out      asig*iamp
endin

</CsInstruments>
<CsScore>

;change to put any ATS file you like
#define ats_file #"../ats-files/female-speech.ats"#

;   start dur  amp nbands bands_offset bands_incr atsfile	
i1  0     7.32 1   25     0            1          $ats_file     ;all bands
i1  +     .    .   15     10           1          $ats_file     ;from 10 to 25 step 1
i1  +     .    .   8      1            3          $ats_file     ;from 1 to 24 step 3
i1  +     .    .   5      15           1          $ats_file     ;from 15 to 20 step 1
	
e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia

The ATSsinnoi opcode synthesizes both deterministic and residual ("noise") data from an ATS file using the method explained in [1] and [2]. This opcode may be regarded as a combination of the two previous opcodes but with the allowance of individual amplitude scaling of the mixes of deterministic and residual parts. All the arguments of ATSsinnoi are the same as those for the two previous opcodes, except for the two k-rate variables ksinlev and knoislev that allow individual, and possibly time-changing, scaling of the deterministic and residual parts of the synthesis.

El código de operación ATSsinnoi sintetiza los datos determinísticos y residuales (ruido) de un archivo ATS utilizando el método explicado en [1] y [2]. Este opcode puede considerarse como una combinación de los dos opcodes anteriores, pero con la posibilidad de escalamiento de amplitud individual de las mezclas de partes determinísticas y residuales. Todos los argumentos de ATSsinnoi son los mismos que para los dos opcodes anteriores, excepto para las dos variables de k-ksinlev y knoislev que permiten el escalamiento individual, y posiblemente cambiante, de las partes deterministas y residuales de la síntesis.

  EXAMPLE 05K09_atssinnoi.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>

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

;Some macros
#define ATS_NP  # 3 #   ;number of Partials
#define ATS_DU  # 7 #   ;duration

instr 1	
iatsfile = p11
/*read some ATS data from the file header*/
i_number_of_partials    ATSinfo iatsfile, $ATS_NP
i_duration              ATSinfo iatsfile, $ATS_DU
print i_number_of_partials

iamp     =      p4              ;amplitude scaler
ifreqdev =      2^(p5/12)       ;frequency deviation (p5=semitones up or down)
isinlev  =      p6              ;deterministic part gain
inoislev =      p7              ;residual part gain

/*here we deal with number of partials, offset and increment issues*/
inpars   =      (p8 < 1 ? i_number_of_partials : p8) ;inpars can not be <=0
ipofst   =      (p9 < 0 ? 0 : p9)                    ;partial offset can not be < 0
ipincr   =      (p10 < 1 ? 1 : p10)                  ;partial increment can not be <= 0
imax     =      ipofst + inpars*ipincr               ;max. partials allowed

if imax <= i_number_of_partials igoto OK 	
;if we are here, something is wrong!
;set npars to zero, so as the output will be zero and the user knows
prints "wrong number of partials requested", imax, i_number_of_partials
inpars  = 0
ipofst	= 0
ipincr	= 1
OK: ;data is OK
/********************************************************************/

ktime   linseg     0, p3, i_duration
asig    ATSsinnoi  ktime, isinlev, inoislev, ifreqdev, iatsfile, inpars, ipofst, ipincr

        out        asig*iamp
endin

</CsInstruments>
<CsScore>
;change to put any ATS file you like
#define ats_file #"../ats-files/female-speech.ats"#

;       start   dur     amp     freqdev sinlev  noislev npars   offset  pincr   atsfile	
i1      0       3.66    .79     0       1       0       0       0       1       $ats_file
;deterministic only
i1      +       3.66    .79     0       0       1       0       0       1       $ats_file	
;residual only
i1      +       3.66    .79     0       1       1       0       0       1       $ats_file	
;deterministic and residual
;       start   dur     amp     freqdev sinlev  noislev npars   offset  pincr   atsfile	
i1      +       3.66    2.5     0       1       0       80      60      1       $ats_file
;from partial 60 to partial 140, deterministic only
i1      +       3.66    2.5     0       0       1       80      60      1       $ats_file
;from partial 60 to partial 140, residual only
i1      +       3.66    2.5     0       1       1       80      60      1       $ats_file
;from partial 60 to partial 140, deterministic and residual
e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia 

ATScross is an opcode that performs some kind of "interpolation" of the amplitude data between two ATS analyses. One of these two ATS analyses must be obtained using the ATSbufread opcode (see above) and the other is to be loaded by an ATScross instance. Only the deterministic data of both analyses is used. The ATS file, time pointer, frequency scaling, number of partials, partial offset and partial increment arguments work the same way as usages in previously described opcodes. Using the arguments kmylev and kbuflev the user may define how much of the amplitude values of the file read by ATSbufread is to be used to scale the amplitude values corresponding to the frequency values of the analysis read by ATScross. So, a value of 0 for kbuflev and 1 for kmylev will retain the original ATS analysis read by ATScross unchanged whilst the converse (kbuflev =1 and kmylev=0) will retain the frequency values of the ATScross analysis but scaled by the amplitude values of the ATSbufread analysis. As the time pointers of both units need not be the same, and frequency warping and number of partials may also be changed, very complex cross synthesis and sound hybridation can be obtained using this opcode.

ATScross es un opcode que realiza algún tipo de interpolación de los datos de amplitud entre dos análisis ATS. Uno de estos dos análisis ATS se debe obtener usando el opcode ATSbufread (véase arriba) y el otro debe ser cargado por una instancia ATScross. Sólo se utilizan los datos determinísticos de ambos análisis. El archivo ATS, el puntero de tiempo, la escala de frecuencia, el número de partiales, el desplazamiento parcial y los argumentos de incremento parcial funcionan de la misma manera que los usos en los códigos de operación descritos anteriormente. Utilizando los argumentos kmylev y kbuflev, el usuario puede definir cuánto de los valores de amplitud del archivo leído por ATSbufread se va a utilizar para escalar los valores de amplitud correspondientes a los valores de frecuencia del análisis leído por ATScross. Por lo tanto, un valor de 0 para kbuflev y 1 para kmylev mantendrá el análisis ATS original leído por ATScross sin cambios, mientras que el inverso (kbuflev = 1 y kmylev = 0) conservará los valores de frecuencia del análisis ATScross pero escalado por los valores de amplitud de El análisis ATSbufread. Como los indicadores de tiempo de ambas unidades no necesitan ser iguales, y la deformación de frecuencia y el número de partiales también pueden cambiarse, síntesis cruzada muy compleja y hibridación de sonido pueden obtenerse usando este código de operación.

 

  EXAMPLE 05K10_atscross.csd

 

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>

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

;ATS files
#define ats1 #"../ats-files/flute-A5.ats"#
#define ats2 #"../ats-files/oboe-A5.ats"#


instr 1	
iamp    = p4            ;general amplitude scaler

ilev1   = p5            ;level of iats1 partials
ifd1    = 2^(p6/12)     ;frequency deviation for iats1 partials

ilev2   = p7            ;level of ats2 partials
ifd2    = 2^(p8/12)     ;frequency deviation for iats2 partials	

itau    = p9            ;audio table

/*get ats file data*/
inp1  ATSinfo $ats1, 3
inp2  ATSinfo $ats2, 3
idur1 ATSinfo $ats1, 7
idur2 ATSinfo $ats2, 7

ktime   line    0, p3, idur1
ktime2  line    0, p3, idur2

        ATSbufread ktime,  ifd1, $ats1, inp1
aout    ATScross   ktime2, ifd2, $ats2, itau, ilev2, ilev1, inp2

        out        aout*iamp

endin

</CsInstruments>
<CsScore>

; sine wave for the audio table
f1 	0 	16384 	10 	1

;  start dur amp lev1 f1  lev2 f2 table
i1 0     2.3 .75 0    0   1    0  1     ;original oboe	
i1 +     .   .   0.25 .   .75  .  .     ;oboe 75%, flute 25%
i1 +     .   .   0.5  .   0.5  .  .     ;oboe 50%, flute 50%
i1 +     .   .   .75  .   .25  .  .     ;oboe 25%, flute 75%
i1 +     .   .   1    .   0    .  .     ;oboe partials with flute's amplitudes

e
</CsScore>
</CsoundSynthesizer>
;example by Oscar Pablo Di Liscia  

 

  1. Juan Pampin. 2011. ATS_theory, http://wiki.dxarts.washington.edu/groups/general/wiki/39f07/attachments/55bd6/ATS_theory.pdf^
  2. Xavier Serra and Julius O. Smith III. 1990. A Sound Analysis/Synthesis System Based on a Deterministic plus Stochastic Decomposition, Computer Music Journal, Vol.14 #4, MIT Press, USA.^
  3. Ernst Zwiker and Hugo Fastl. 1990. Psychoacoustics Facts and Models. Springer, Berlin, Heidelberg.^
  4. Cf. Zwiker/Fastl (above footnote).^
  5. Juan Pampin. 2011. ATS_theory, http://wiki.dxarts.washington.edu/groups/general/wiki/39f07/attachments/55bd6/ATS_theory.pdf^
  6. Oscar Pablo Di Liscia, 2013. A Pure Data toolkit for real-time synthesis of ATS spectral data http://lac.linuxaudio.org/2013/papers/26.pdf^

There has been error in communication with Booktype server. Not sure right now where is the problem.

You should refresh this page.