AudioClip.GetData
Declaration
public bool GetData(Span<float> data, int offsetSamples);public bool GetData(float[] data, int offsetSamples);Параметры
| Параметр | Описание |
|---|---|
| данные | Массив, который вы хотите заполнить необработанными данными из аудиоклипа. |
| offsetSamples | Индекс места, где начать извлечение данных из массива необработанных данных. offsetSamples не учитывает аудиоканалы, а использует вместо этого кадры. Не умножайте количество аудиоканалов в индекс. |
Возвращаемое значение
логическое Возвращает 'true', если AudioClip успешно получает данные. Возвращает 'false', если операция не удалась.
Описание
Заполняет массив образцовыми данными из аудиоклипа.
Данные образца содержат значения с плавающей запятой в диапазоне от -1.0f до 1.0f. Число образцов — это длина массива Span или float. Используйте параметр offsetSamples, чтобы начать чтение с определенной позиции в клипе. Если длина чтения от смещения больше, чем длина клипа, чтение переворачивается и читает оставшиеся образцы с начала клипа.
Для многоканальных аудиоклипов данные переплетаются, что означает, что образцы в возвращаемом массиве с плавающей запятой чередуются между каналами. Например, в стерео аудиоклипе:
- Индекс 0 соответствует каналу 1 (слева).
- Индекс 1 соответствует каналу 2 (справа).
- Индекс 2 соответствует следующей выборке для канала 1 и так далее.
С сжатыми аудио файлами, вы можете только извлечь образцы данных, если вы установите Тип нагрузки до Декомпрессия при нагрузке в 2000 году AudioClip импортер. GetData не работает с потоковыми аудиоклипами, в том числе если вы потоковые клипы с диска или используете AudioClip.Create и установить его stream параметр к true.
Если GetData не может прочитать аудиоклип, data параметр будет содержать нули для всех выборочных значений, консоль запишет ошибку, и GetData вернёт false.
Для наилучшей производительности используйте версию Span, поскольку не требуется выделять управляемую память.
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: Данные образцов аудиоклипов загружаются асинхронно в платформу WebGL. Это делает необходимым проверить loadState AudioClip перед чтением данных образцов.
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); } }