AudioClip.SetData
Declaration
public bool SetData(ReadOnlySpan<float> data, int offsetSamples);public bool SetData(float[] data, int offsetSamples);Параметры
| Параметр | Описание |
|---|---|
| данные | Линейный буфер семплов для записи в буфер аудиоклипа. |
| offsetSamples | Смещение от начала аудиоклипа, в котором начнется запись образцовых данных. offsetSamples не учитывает аудиоканалы, а вместо этого использует кадры. Не умножайте количество аудиоканалов на индекс. |
Возвращаемое значение
логическое Возвращает, были ли все семплы успешно записаны в аудиоклип. Это может возвращать false, если offsetSamples не является действительным смещением в существующем AudioClip, или если данные пустые.
Описание
Заполняет аудиоклип образцами данных из массива или Span. Перезаписывает существующие данные, если это необходимо.
Это полезно, если вы хотите использовать процедурное аудио и изменять аудио данные во время выполнения. Используйте только образцы с плавающими значениями в диапазоне от -1.0f до 1.0f. Не превышайте эти ограничения, так как это может привести к артефактам и неопределенному поведению.
Длина ReadOnlySpan или матрица с плавающей точкой определяет число выборок.
Используйте offsetSamples параметр для записи в определенную позицию в клипе. Если длина от смещения больше, чем длина клипа, запись будет обворачиваться и записывать оставшиеся семплы с начала клипа.
Для сжатых аудио файлов, вы можете установить образцы данных только если вы установите Тип нагрузки до Декомпрессия при нагрузке в 2000 году Аудиоклип импортер.
Для наилучшей производительности используйте версию 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); } }