GetData
Fills an array with sample data from the audio clip.
Read time 5 minutesLast updated 5 days ago
Definition
- Type: Method
- Namespace: UnityEngine
- Assembly: UnityEngine.AudioModule
GetData(Span<float>, int)
Fills an array with sample data from the audio clip.
public bool GetData(Span<float> data, int offsetSamples)
Parameters
The array you want to fill with raw data from the audio clip.
The index of where to start data extraction from the array of raw data. doesn't take audio channels into account, and uses frames instead. Don't multiply the audio channel count into the index.
offsetSamplesReturns
Type | Description |
|---|---|
| bool | Returns 'true' if AudioClip retrieves the data successfully. Returns 'false' if the operation was unsuccessful. |
Remarks
The sample data contains float values within the range -1.0f to 1.0f. The sample count is the length of the Span or float array. Use the parameter to start the read from a specific position in the clip. If the read length from the offset is longer than the clip length, the read wraps around and reads the remaining samples from the start of the clip.
offsetSamplesFor multi-channel audio clips, the data is interleaved, which means the samples in the returned float array alternate between channels. For example, in a stereo audio clip:
- Index 0 corresponds to channel 1 (left).
- Index 1 corresponds to channel 2 (right).
- Index 2 corresponds to the next sample for channel 1, and so on.
With compressed audio files, you can only retrieve the sample data if you set the Load Type to Decompress on Load in the AudioClip importer. doesn't work with streamed audio clips, including if you stream clips from the disk or use AudioClip.Create and set its parameter to .
GetDatastreamtrueNote: Once an AudioClip has been used as a generator via AudioClip.CreateInstance, is permanently blocked for that clip instance. Calling it returns and logs a warning.
GetDatafalseIf can't read the audio clip, the parameter will contain zeroes for all sample values, the console will log an error, and will return false.
GetDatadataGetDataFor the best performance, use the Span version because you don't need to allocate managed memory.
using UnityEngine;using Unity.Collections;public class Example : MonoBehaviour{ // Read all the samples from the clip and halve the gain void Start() { AudioSource audioSource = GetComponent<AudioSource>(); var numSamples = audioSource.clip.samples * audioSource.clip.channels; var samples = new NativeArray<float>(numSamples, Allocator.Temp); audioSource.clip.GetData(samples, 0); for (int i = 0; i < samples.Length; ++i) { samples[i] = samples[i] * 0.5f; } audioSource.clip.SetData(samples, 0); }}
WebGL: The sample data of audio clips is loaded asynchronously in the WebGL platform. This makes it necessary to check the loadState of an AudioClip before reading the sample data.
using UnityEngine;using Unity.Collections;using System.Collections;public class ExampleGetDataCoroutine : MonoBehaviour{ void Start() { StartCoroutine(GetAudioData()); } IEnumerator GetAudioData() { AudioSource audioSource = GetComponent<AudioSource>(); // Wait for sample data to be loaded while (audioSource.clip.loadState != AudioDataLoadState.Loaded) { yield return null; } // Read all the samples from the clip and halve the gain var numSamples = audioSource.clip.samples * audioSource.clip.channels; var samples = new NativeArray<float>(numSamples, Allocator.Temp); audioSource.clip.GetData(samples, 0); for (int i = 0; i < samples.Length; ++i) { samples[i] = samples[i] * 0.5f; } audioSource.clip.SetData(samples, 0); }}
GetData(float[], int)
Fills an array with sample data from the audio clip.
public bool GetData(float[] data, int offsetSamples)
Parameters
Returns
Type | Description |
|---|---|
| bool | Returns 'true' if AudioClip retrieves the data successfully. Returns 'false' if the operation was unsuccessful. |
Remarks
The sample data contains float values within the range -1.0f to 1.0f. The sample count is the length of the Span or float array. Use the parameter to start the read from a specific position in the clip. If the read length from the offset is longer than the clip length, the read wraps around and reads the remaining samples from the start of the clip.
offsetSamplesFor multi-channel audio clips, the data is interleaved, which means the samples in the returned float array alternate between channels. For example, in a stereo audio clip:
- Index 0 corresponds to channel 1 (left).
- Index 1 corresponds to channel 2 (right).
- Index 2 corresponds to the next sample for channel 1, and so on.
With compressed audio files, you can only retrieve the sample data if you set the Load Type to Decompress on Load in the AudioClip importer. doesn't work with streamed audio clips, including if you stream clips from the disk or use AudioClip.Create and set its parameter to .
GetDatastreamtrueNote: Once an AudioClip has been used as a generator via AudioClip.CreateInstance, is permanently blocked for that clip instance. Calling it returns and logs a warning.
GetDatafalseIf can't read the audio clip, the parameter will contain zeroes for all sample values, the console will log an error, and will return false.
GetDatadataGetDataFor the best performance, use the Span version because you don't need to allocate managed memory.
using UnityEngine;using Unity.Collections;public class Example : MonoBehaviour{ // Read all the samples from the clip and halve the gain void Start() { AudioSource audioSource = GetComponent<AudioSource>(); var numSamples = audioSource.clip.samples * audioSource.clip.channels; var samples = new NativeArray<float>(numSamples, Allocator.Temp); audioSource.clip.GetData(samples, 0); for (int i = 0; i < samples.Length; ++i) { samples[i] = samples[i] * 0.5f; } audioSource.clip.SetData(samples, 0); }}
WebGL: The sample data of audio clips is loaded asynchronously in the WebGL platform. This makes it necessary to check the loadState of an AudioClip before reading the sample data.
using UnityEngine;using Unity.Collections;using System.Collections;public class ExampleGetDataCoroutine : MonoBehaviour{ void Start() { StartCoroutine(GetAudioData()); } IEnumerator GetAudioData() { AudioSource audioSource = GetComponent<AudioSource>(); // Wait for sample data to be loaded while (audioSource.clip.loadState != AudioDataLoadState.Loaded) { yield return null; } // Read all the samples from the clip and halve the gain var numSamples = audioSource.clip.samples * audioSource.clip.channels; var samples = new NativeArray<float>(numSamples, Allocator.Temp); audioSource.clip.GetData(samples, 0); for (int i = 0; i < samples.Length; ++i) { samples[i] = samples[i] * 0.5f; } audioSource.clip.SetData(samples, 0); }}