AudioListener.GetSpectrumData
Declaration
public static void GetSpectrumData(float[] samples, int channel, FFTWindow window);Параметры
| Параметр | Описание |
|---|---|
| образцы | Массив, который будет заполнен аудио семплами. Его длина должна быть в степени 2. |
| канал | Канал для выборки. |
| окно | Тип FFTWindow, используемый при выборке. |
Описание
Предоставляет блок данных спектра слушателя (мастера).
Массив, указанный в параметре samples, будет заполнен запрошенными данными.
Количество значений (длина массива проб) должно быть в степени 2. (то есть 128/256/512 и т.д.). Min = 64. Max = 8192. Используйте window для уменьшения утечки между частотными полосами/диапазонами. Обратите внимание, что чем сложнее тип окна, тем лучше качество, но снижается скорость.
Эта функция будет использовать частоту дискретизации, указанную в AudioSettings.outputSampleRate, и NOT частоту дискретизации, указанную для аудиоклипа.
Примечание: GetSpectrumData обеспечивает доступ к аудиоданным из короткого окна истории (например, последние несколько миллисекунд) для целей анализа. Unity не выделяет автоматически буферы, необходимые для хранения этой истории, потому что это было бы дорого и требовало бы много памяти. Вместо этого Unity только выделяет буферы и начинает записывать при первом вызове этой функции, на объектной основе. В результате, выходные данные будут изначально пустыми, пока движок не обработает достаточное количество аудио, чтобы заполнить буфер. Обратите внимание, что эта функция не подходит для критического или хронологического анализа или обработки данных в реальном времени, а также для сценариев, требующих низкой задержки.
Дополнительные ресурсы: 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); } } }
Declaration
Obsolete public static float[] GetSpectrumData(int numSamples, int channel, FFTWindow window);Параметры
| Параметр | Описание |
|---|---|
| numSamples | Количество значений (длина массива выборок). Должно быть в степени 2. Min = 64. Max = 8192. |
| канал | Канал для выборки. |
| окно | Тип FFTWindow, используемый при выборке. |
Описание
Устаревшая версия. Возвращает блок данных спектра слушателя (мастера).
Этот вариант функции выделяет новый массив каждый раз, когда она вызвана. Используйте версию Non-alloc для лучшей производительности.