Unity 6.3
0 онлайн 70 гостей 3 в системе
Вход

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); } }