FLOSS Manuals

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

CSOUND Español

CONVOLUTION CIRCUNVOLUCIÓN

 

Convolution is a mathematical procedure whereby one function is modified by another. Applied to audio, one of these functions might be a sound file or a stream of live audio whilst the other will be, what is referred to as, an impulse response file; this could actually just be another shorter sound file. The longer sound file or live audio stream will be modified by the impulse response so that the sound file will be imbued with certain qualities of the impulse response. It is important to be aware that convolution is a far from trivial process and that realtime performance may be a frequent consideration. Effectively every sample in the sound file to be processed will be multiplied in turn by every sample contained within the impulse response file. Therefore, for a 1 second impulse response at a sampling frequency of 44100 hertz, each and every sample of the input sound file or sound stream will undergo 44100 multiplication operations. Expanding upon this even further, for 1 second's worth of a convolution procedure this will result in 44100 x 44100 (or 1,944,810,000) multiplications. This should provide some insight into the processing demands of a convolution procedure and also draw attention to the efficiency cost of using longer impulse response files.

La convolución es un procedimiento matemático mediante el cual una función es modificada por otra. Aplicado al audio, una de estas funciones puede ser un archivo de sonido o un flujo de audio en vivo mientras que el otro será, lo que se conoce como un archivo de respuesta de impulso; Esto podría ser simplemente otro archivo de sonido más corto. El archivo de sonido más largo o flujo de audio en vivo será modificado por la respuesta de impulso para que el archivo de sonido se imbuye con ciertas cualidades de la respuesta de impulso. Es importante tener en cuenta que convolución es un proceso lejos de trivial y que el rendimiento en tiempo real puede ser una consideración frecuente. Efectivamente cada muestra en el archivo de sonido a procesar se multiplicará a su vez por cada muestra contenida en el archivo de respuesta de impulso. Por lo tanto, para una respuesta de impulso de 1 segundo a una frecuencia de muestreo de 44100 hertzios, cada una de las muestras del archivo de sonido de entrada o flujo de sonido sufrirán 44100 operaciones de multiplicación. Ampliando aún más esto, por 1 segundo de valor de un procedimiento de convolución esto resultará en 44100 x 44100 (o 1,944,810,000) multiplicaciones. Esto debería proporcionar una idea de las demandas de procesamiento de un procedimiento de convolución y también llamar la atención sobre el costo de eficiencia del uso de archivos de respuesta de impulso más largos.

The most common application of convolution in audio processing is reverberation but convolution is equally adept at, for example, imitating the filtering and time smearing characteristics of vintage microphones, valve amplifiers and speakers. It is also used sometimes to create more unusual special effects. The strength of convolution based reverbs is that they implement acoustic imitations of actual spaces based upon 'recordings' of those spaces. All the quirks and nuances of the original space will be retained. Reverberation algorithms based upon networks of comb and allpass filters create only idealised reverb responses imitating spaces that don't actually exist. The impulse response is a little like a 'fingerprint' of the space. It is perhaps easier to manipulate characteristics such as reverb time and high frequency diffusion (i.e. lowpass filtering) of the reverb effect when using a Schroeder derived algorithm using comb and allpass filters but most of these modification are still possible, if not immediately apparent, when implementing reverb using convolution.

La aplicación más común de la convolución en el procesamiento de audio es la reverberación, pero convolución es igualmente capaz de, por ejemplo, imitar las características de filtrado y tiempo de manchas de micrófonos vintage, amplificadores de válvulas y altavoces. También se utiliza a veces para crear efectos especiales más inusuales. La fuerza de las reverberaciones basadas en convolución es que implementan imitaciones acústicas de espacios reales basados en grabaciones de esos espacios. Se conservarán todas las peculiaridades y matices del espacio original. Los algoritmos de reverberación basados en redes de peine y filtros de paso único crean sólo respuestas de reverberación idealizadas que imitan espacios que realmente no existen. La respuesta al impulso es un poco como una huella digital del espacio. Es quizá más fácil manipular características como el tiempo de reverberación y la difusión de alta frecuencia (es decir, el filtro de paso bajo) del efecto de reverberación cuando se utiliza un algoritmo derivado de Schroeder usando filtros de peine y de paso, pero la mayoría de estas modificaciones son todavía posibles si no son inmediatamente evidentes cuando Implementando la reverberación usando convolución.

The quality of a convolution reverb is largely dependent upon the quality of the impulse response used. An impulse response recording is typically achieved by recording the reverberant tail that follows a burst of white noise. People often employ techniques such as bursting balloons to achieve something approaching a short burst of noise. Crucially the impulse sound should not excessively favour any particular frequency or exhibit any sort of resonance. More modern techniques employ a sine wave sweep through all the audible frequencies when recording an impulse response. Recorded results using this technique will normally require further processing in order to provide a usable impulse response file and this approach will normally be beyond the means of a beginner.

La calidad de una reverb de convolución depende en gran medida de la calidad de la respuesta de impulso utilizada. Una grabación de respuesta de impulso se logra típicamente registrando la cola reverberante que sigue a una ráfaga de ruido blanco. La gente emplea a menudo técnicas tales como estallar los globos para alcanzar algo que se acerca a un estallido corto del ruido. Crucialmente el sonido de impulso no debe favorecer excesivamente ninguna frecuencia particular o exhibir cualquier tipo de resonancia. Las técnicas más modernas emplean un barrido de onda sinusoidal a través de todas las frecuencias audibles al registrar una respuesta de impulso. Los resultados grabados usando esta técnica normalmente requerirán procesamiento adicional para proporcionar un archivo de respuesta de impulso utilizable y este enfoque normalmente estará más allá de los medios de un principiante.

Many commercial, often expensive, implementations of convolution exist both in the form of software and hardware but fortunately Csound provides easy access to convolution for free. Csound currently lists six different opcodes for convolution, convolve (convle), cross2, dconv, ftconv, ftmorf and pconvolve. convolve (convle) and dconv are earlier implementations and are less suited to realtime operation, cross2 relates to FFT-based cross synthesis and ftmorf is used to morph between similar sized function table and is less related to what has been discussed so far, therefore in this chapter we shall focus upon just two opcodes, pconvolve and ftconv.

Muchas aplicaciones comerciales, a menudo costosas, de convolución existen tanto en forma de software como de hardware, pero afortunadamente Csound proporciona un fácil acceso a la convolución de forma gratuita. Csound actualmente enumera seis opcodes diferentes para la convolución, convolve (convle), cross2, dconv, ftconv, ftmorf y pconvolve. Convolve (convle) y dconv son implementaciones anteriores y son menos adecuadas para el funcionamiento en tiempo real, cross2 se refiere a la síntesis cruzada basada en FFT y ftmorf se utiliza para morph entre tabla de funciones de tamaño similar y está menos relacionado con lo que se ha discutido hasta ahora, Este capítulo nos centraremos sólo en dos opcodes, pconvolve y ftconv.

pconvolve

pconvolve is perhaps the easiest of Csound's convolution opcodes to use and the most useful in a realtime application. It uses the uniformly partitioned (hence the 'p') overlap-save algorithm which permits convolution with very little delay (latency) in the output signal. The impulse response file that it uses is referenced directly, i.e. it does not have to be previously loaded into a function table, and multichannel files are permitted. The impulse response file can be any standard sound file acceptable to Csound and does not need to be pre-analysed as is required by convolve. Convolution procedures through their very nature introduce a delay in the output signal but pconvolve minimises this using the algorithm mentioned above. It will still introduce some delay but we can control this using the opcode's 'ipartitionsize' input argument.

Pconvolve es quizás el más fácil de los opcodes de convolución Csounds para usar y el más útil en una aplicación en tiempo real. Utiliza el algoritmo de superposición-ahorro uniformemente dividido (de ahí el p) que permite la convolución con muy poco retardo (latencia) en la señal de salida. El archivo de respuesta de impulso que utiliza se hace referencia directamente, es decir, no tiene que ser cargado previamente en una tabla de funciones, y los archivos multicanal están permitidos. El archivo de respuesta de impulso puede ser cualquier archivo de sonido estándar aceptable para Csound y no necesita ser pre-analizado como es requerido por convolve. Procedimientos de convolución a través de su propia naturaleza introducir un retraso en la señal de salida, pero pconvolve minimiza esto utilizando el algoritmo mencionado anteriormente. Todavía introducirá algún retraso, pero podemos controlar esto usando el argumento de entrada opcodes ipartitionsize.

What value we give this will require some consideration and perhaps some experimentation as choosing a high partition size will result in excessively long delays (only an issue in realtime work) whereas very low partition sizes demand more from the CPU and too low a size may result in buffer under-runs and interrupted realtime audio. Bear in mind still that realtime CPU performance will depend heavily on the length of the impulse file. The partition size argument is actually an optional argument and if omitted it will default to whatever the software buffer size is as defined by the -b command line flag. If we specify the partition size explicitly however, we can use this information to delay the input audio (after it has been used by pconvolve) so that it can be realigned in time with the latency affected audio output from pconvolve - this will be essential in creating a 'wet/dry' mix in a reverb effect. Partition size is defined in sample frames therefore if we specify a partition size of 512, the delay resulting from the convolution procedure will be 512/sr (sample rate).

¿Qué valor daremos esto requerirá cierta consideración y quizás alguna experimentación como la elección de un tamaño de partición alto dará lugar a retrasos excesivamente largos (sólo un problema en el trabajo en tiempo real) mientras que los tamaños de partición muy baja exigen más de la CPU y un tamaño demasiado bajo puede resultar En subintervalos de buffer y audio en tiempo real interrumpido. Tenga en cuenta que el rendimiento en tiempo real de la CPU dependerá en gran medida de la longitud del archivo de impulsos. El argumento de tamaño de partición es en realidad un argumento opcional y si se omite, el valor predeterminado será el que sea el tamaño del búfer de software definido por el indicador de línea de comandos -b. Si especificamos explícitamente el tamaño de la partición, podemos usar esta información para retrasar el audio de entrada (después de haber sido utilizado por pconvolve) para que pueda ser realineado en el tiempo con la salida de audio afectada por latencia de pconvolve - esto será esencial en Creando una mezcla húmeda / seca en un efecto de reverberación. El tamaño de partición se define en los cuadros de muestra, por lo tanto, si especificamos un tamaño de partición de 512, el retardo resultante del procedimiento de convolución será 512 / sr (tasa de muestreo).

 

In the following example a monophonic drum loop sample undergoes processing through a convolution reverb implemented using pconvolve which in turn uses two different impulse files. The first file is a more conventional reverb impulse file taken in a stairwell whereas the second is a recording of the resonance created by striking a terracota bowl sharply. If you wish to use the three sound files I have used in creating this example, the mono input sound file is here and the two stereo sound files used as impulse responses are here and here. You can, of course, replace them with ones of your own but remain mindful of mono/stereo/multichannel integrity.

En el ejemplo siguiente una muestra de bucle de tambor monofónica se somete a procesamiento a través de una reverberación de convolución implementada usando pconvolve que a su vez utiliza dos archivos de impulso diferentes. El primer archivo es un archivo de impulso de reverberación más convencional tomado en una escalera, mientras que el segundo es una grabación de la resonancia creada golpeando bruscamente un tazón de terracota. Si desea utilizar los tres archivos de sonido que he utilizado para crear este ejemplo, el archivo de sonido de entrada mono está aquí y los dos archivos de sonido estéreo utilizados como respuestas de impulso están aquí y aquí. Usted puede, por supuesto, reemplazarlas por otras de su propiedad, pero mantenga la integridad mono / estéreo / multicanal.

 

EXAMPLE 05H01_pconvolve.csd

<CsoundSynthesizer>
<CsOptions>
-odac
</CsOptions>
<CsInstruments>

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

gasig init 0

 instr 1 ; sound file player
gasig           diskin2   p4,1,0,1
 endin

 instr 2 ; convolution reverb
; Define partion size.
; Larger values require less CPU but result in more latency.
; Smaller values produce lower latency but may cause -
; - realtime performance issues
ipartitionsize	=	  256
ar1,ar2	        pconvolve gasig, p4,ipartitionsize
; create a delayed version of the input signal that will sync -
; - with convolution output
adel            delay     gasig,ipartitionsize/sr
; create a dry/wet mix
aMixL           ntrpol    adel,ar1*0.1,p5
aMixR           ntrpol    adel,ar2*0.1,p5
                outs      aMixL,aMixR
gasig	        =         0
 endin

</CsInstruments>
<CsScore>
; instr 1. sound file player
;    p4=input soundfile
; instr 2. convolution reverb
;    p4=impulse response file
;    p5=dry/wet mix (0 - 1)

i 1 0 8.6 "loop.wav"
i 2 0 10 "Stairwell.wav" 0.3

i 1 10 8.6 "loop.wav"
i 2 10 10 "Dish.wav" 0.8
e
</CsScore>
</CsoundSynthesizer>

ftconv

ftconv (abbreviated from 'function table convolution) is perhaps slightly more complicated to use than pconvolve but offers additional options. The fact that ftconv utilises an impulse response that we must first store in a function table rather than directly referencing a sound file stored on disk means that we have the option of performing transformations upon the audio stored in the function table before it is employed by ftconv for convolution. This example begins just as the previous example: a mono drum loop sample is convolved first with a typical reverb impulse response and then with an impulse response derived from a terracotta bowl. After twenty seconds the contents of the function tables containing the two impulse responses are reversed by calling a UDO (instrument 3) and the convolution procedure is repeated, this time with a 'backwards reverb' effect. When the reversed version is performed the dry signal is delayed further before being sent to the speakers so that it appears that the reverb impulse sound occurs at the culmination of the reverb build-up.

Ftconv (abreviado de la convolución de la tabla de funciones) es quizás un poco más complicado de usar que pconvolve, pero ofrece opciones adicionales. El hecho de que ftconv utilice una respuesta de impulso que debemos primero almacenar en una tabla de funciones en lugar de referenciar directamente un archivo de sonido almacenado en disco significa que tenemos la opción de realizar transformaciones sobre el audio almacenado en la tabla de funciones antes de que sea empleado por ftconv Para la convolución. Este ejemplo comienza exactamente igual que en el ejemplo anterior: una muestra de bucle de mono tambor se convolve primero con una respuesta de impulso de reverberación típica y luego con una respuesta de impulso derivada de un recipiente de terracota. Después de veinte segundos el contenido de las tablas de funciones que contienen las dos respuestas de impulso se invierte llamando a un UDO (instrumento 3) y se repite el procedimiento de convolución, esta vez con un efecto de reverberación hacia atrás. Cuando se realiza la versión inversa, la señal seca se retrasa más antes de ser enviada a los altavoces de modo que parece que el sonido de impulso de reverberación se produce en la culminación de la acumulación de la reverberación.

This additional delay is switched on or off via p6 from the score. As with pconvolve, ftconv performs the convolution process in overlapping partitions to minimise latency. Again we can minimise the size of these partitions and therefore the latency but at the cost of CPU efficiency. ftconv's documentation refers to this partition size as 'iplen' (partition length). ftconv offers further facilities to work with multichannel files beyond stereo. When doing this it is suggested that you use GEN52 which is designed for this purpose. GEN01 seems to work fine, at least up to stereo, provided that you do not defer the table size definition (size=0). With ftconv we can specify the actual length of the impulse response - it will probably be shorter than the power-of-2 sized function table used to store it - and this action will improve realtime efficiency. This optional argument is defined in sample frames and defaults to the size of the impulse response function table.

Este retardo adicional se activa o desactiva a través de p6 de la partitura. Como con pconvolve, ftconv realiza el proceso de convolución en superposición de particiones para minimizar la latencia. Una vez más podemos minimizar el tamaño de estas particiones y por lo tanto la latencia, pero a costa de la eficiencia de la CPU. La documentación de ftconvs hace referencia a este tamaño de partición como iplen (longitud de partición). Ftconv ofrece más facilidades para trabajar con archivos multicanal más allá del estéreo. Al hacer esto se sugiere que utilice GEN52 que está diseñado para este propósito. GEN01 parece funcionar bien, al menos hasta estéreo, siempre que no aplazar la definición de tamaño de tabla (tamaño = 0). Con ftconv podemos especificar la longitud real de la respuesta de impulso - probablemente será más corta que la tabla de funciones de tamaño de 2 para almacenarla - y esta acción mejorará la eficiencia en tiempo real. Este argumento opcional se define en marcos de ejemplo y por defecto en el tamaño de la tabla de función de respuesta de impulso.

EXAMPLE 05H02_ftconv.csd

<CsoundSynthesizer>
<CsOptions>
-odac
</CsOptions>

<CsInstruments>

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

; impulse responses stored as stereo GEN01 function tables
giStairwell	ftgen	1,0,131072,1,"Stairwell.wav",0,0,0
giDish		ftgen	2,0,131072,1,"Dish.wav",0,0,0

gasig init 0

; reverse function table UDO
 opcode	tab_reverse,0,i
ifn             xin
iTabLen         =               ftlen(ifn)
iTableBuffer    ftgentmp        0,0,-iTabLen,-2, 0
icount          =               0
loop:
ival            table           iTabLen-icount-1, ifn
                tableiw         ival,icount,iTableBuffer
                loop_lt         icount,1,iTabLen,loop
icount          =               0
loop2:
ival            table           icount,iTableBuffer
                tableiw		ival,icount,ifn
                loop_lt         icount,1,iTabLen,loop2
 endop

 instr 3 ; reverse the contents of a function table
          tab_reverse p4
 endin

 instr 1 ; sound file player
gasig           diskin2   p4,1,0,1
 endin

 instr 2 ; convolution reverb
; buffer length
iplen	=	1024
; derive the length of the impulse response
iirlen	=	nsamp(p4)
ar1,ar2	ftconv	gasig, p4, iplen,0, iirlen
; delay compensation. Add extra delay if reverse reverb is used.
adel            delay     gasig,(iplen/sr) + ((iirlen/sr)*p6)
; create a dry/wet mix
aMixL   ntrpol    adel,ar1*0.1,p5
aMixR   ntrpol    adel,ar2*0.1,p5
        outs      aMixL,aMixR
gasig	        =         0
 endin

</CsInstruments>

<CsScore>
; instr 1. sound file player
;    p4=input soundfile
; instr 2. convolution reverb
;    p4=impulse response file
;    p5=dry/wet mix (0 - 1)
;    p6=reverse reverb switch (0=off,1=on)
; instr 3. reverse table contents
;    p4=function table number

; 'stairwell' impulse response
i 1 0 8.5 "loop.wav"
i 2 0 10 1 0.3 0

; 'dish' impulse response
i 1 10 8.5 "loop.wav"
i 2 10 10 2 0.8 0

; reverse the impulse responses
i 3 20 0 1
i 3 20 0 2

; 'stairwell' impulse response (reversed)
i 1 21 8.5 "loop.wav"
i 2 21 10 1 0.5 1

; 'dish' impulse response (reversed)
i 1 31 8.5 "loop.wav"
i 2 31 10 2 0.5 1

e
</CsScore>
</CsoundSynthesizer

Suggested avenues for further exploration with ftconv could be applying envelopes to, filtering and time stretching and compressing the function table stored impulse files before use in convolution.

Sugeridas vías para una mayor exploración con ftconv podría ser la aplicación de sobres a, el filtrado y el tiempo de estiramiento y la compresión de la función de la tabla de archivos de impulsos almacenados antes de su uso en convolución.

The impulse responses I have used here are admittedly of rather low quality and whilst it is always recommended to maintain as high standards of sound quality as possible the user should not feel restricted from exploring the sound transformation possibilities possible form whatever source material they may have lying around. Many commercial convolution algorithms demand a proprietary impulse response format inevitably limiting the user to using the impulse responses provided by the software manufacturers but with Csound we have the freedom to use any sound we like.

Las respuestas de impulso que he utilizado aquí son, sin duda, de calidad bastante baja y aunque siempre se recomienda mantener los niveles más altos de calidad de sonido como sea posible, el usuario no debe sentirse limitado a explorar las posibilidades de transformación de sonido posible de cualquier fuente material que puedan tener alrededor. Muchos algoritmos de convolución comerciales requieren un formato de respuesta de impulso propietario que limita inevitablemente al usuario a usar las respuestas de impulso proporcionadas por los fabricantes de software, pero con Csound tenemos la libertad de usar cualquier sonido que nos guste.

 

 

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

You should refresh this page.