Параметры
samples | Массив для заполнения аудиосэмплами. Его длина должна быть степенью числа 2. |
channel | Канал для выборки. |
window | Тип FFTWindow для использования при выборке. |
Описание
Предоставляет блок данных спектра слушателя (мастера).
Массив, указанный в параметре Samples, будет заполнен запрошенными данными.
Количество значений (длина массива образцов) должно быть степенью числа 2 (например, 128/256/512 и т. д.). Мин. = 64. Макс. = 8192. Используйте окно, чтобы уменьшить утечку между частотными элементами/диапазонами. Обратите внимание: чем сложнее тип окна, тем выше качество, но ниже скорость.
Эта функция будет использовать частоту дискретизации, указанную в AudioSettings.outputSampleRate, а НЕ частоту дискретизации, указанную для аудиоклипа.
Смотрите так же: AudioListener.GetOutputData, AudioSource.GetSpectrumData, AudioSource.GetOutputData.
using UnityEngine;
[RequireComponent(typeof(AudioListener))]
public class GetSpectrumDataExample : MonoBehaviour
{
void Update()
{
float[] spectrum = new float[256];
AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular);
for (int i = 1; i < spectrum.Length - 1; i++)
{
Debug.DrawLine(new Vector3(i - 1, spectrum[i] + 10, 0), new Vector3(i, spectrum[i + 1] + 10, 0), Color.red);
Debug.DrawLine(new Vector3(i - 1, Mathf.Log(spectrum[i - 1]) + 10, 2), new Vector3(i, Mathf.Log(spectrum[i]) + 10, 2), Color.cyan);
Debug.DrawLine(new Vector3(Mathf.Log(i - 1), spectrum[i - 1] - 10, 1), new Vector3(Mathf.Log(i), spectrum[i] - 10, 1), Color.green);
Debug.DrawLine(new Vector3(Mathf.Log(i - 1), Mathf.Log(spectrum[i - 1]), 3), new Vector3(Mathf.Log(i), Mathf.Log(spectrum[i]), 3), Color.blue);
}
}
}
Объявление
public static float[] GetSpectrumData(int numSamples, int channel, FFTWindow window);Параметры
numSamples | Количество значений (длина массива образцов). Должно быть степенью 2. Мин. = 64. Макс. = 8192.. |
channel | Канал для выборки. |
window | Тип FFTWindow для использования при выборке. |
Описание
Устаревшая версия. Возвращает блок данных спектра слушателя (мастера).
Этот вариант функции выделяет новый массив при каждом вызове. Вместо этого используйте версию без распределения для повышения производительности.