Version: 5.5

MonoBehaviour.OnAudioFilterRead(float[], int)

Cambiar al Manual

Parámetros

data Un array of floats que comprende los datos del audio.
channels Un int que almacena la cantidad de canales de datos de audio pasados a este delegate (delegado).

Descripción

Si OnAudioFilterRead es implementado, Unity insertará un filtro personalizado a la cadena de audio DSP.

El filtro es insertado en el mismo orden que el script MonoBehaviour es mostrado en el inspector.

OnAudioFilterRead is called every time a chunk of audio is sent to the filter (this happens frequently, every ~20ms depending on the sample rate and platform). The audio data is an array of floats ranging from [-1.0f;1.0f] and contains audio from the previous filter in the chain or the AudioClip on the AudioSource. If this is the first filter in the chain and a clip isn't attached to the audio source, this filter will be played as the audio source. In this way you can use the filter as the audio clip, procedurally generating audio.

If there is more than one channel, the channel data is interleaved. This means each consecutive data sample in the array comes from a different channel until you run out of channels and loop back to the first. data.Length reports the total size of the data, so to find the number of samples per channel, divide data.Length by channels.

If OnAudioFilterRead is implemented a VU meter is shown in the inspector displaying the outgoing sample level. The process time of the filter is also measured and the spent milliseconds are shown next to the VU meter. The number turns red if the filter is taking up too much time, meaning the mixer will be starved of audio data.

Also note that OnAudioFilterRead is called on a different thread from the main thread (namely the audio thread) so calling into many Unity functions from this function is not allowed (if you try, a warning shows up at run time).

See Also: Audio Filters.

// This custom filter controls the gain by filtering the samples by multiplying each sample with a <i>gain</i> parameter.

public var gain : float;

function OnAudioFilterRead(var data:float[], var channels:int) { for (var i = 0; i < data.Length; ++i) data[i] = data[i] * gain; }