79 lines
2.2 KiB
C#
79 lines
2.2 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Copyright 2012-2021 RenderHeads Ltd. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
namespace RenderHeads.Media.AVProMovieCapture.Demos
|
|
{
|
|
public class AmbisonicAudioDemo : MonoBehaviour
|
|
{
|
|
[SerializeField] Transform[] _audioObjects = null;
|
|
[SerializeField] AudioSource[] _audioSources = null;
|
|
|
|
struct Instance
|
|
{
|
|
float x, y, z;
|
|
float radius;
|
|
}
|
|
|
|
private int index;
|
|
//private List<Instance> _instances = new List<Instance>(4);
|
|
|
|
/*void Start()
|
|
{
|
|
foreach (Transform t in _audioObjects)
|
|
{
|
|
Instance instance = new Instance();
|
|
instance.radius = Random.Range(0.5f, 2f);
|
|
instance.x = Random.Range(0f, 100f);
|
|
instance.y = Random.Range(0f, 100f);
|
|
instance.z = Random.Range(0f, 100f);
|
|
_instances.Add(instance);
|
|
}
|
|
}*/
|
|
|
|
void Update()
|
|
{
|
|
float[] samples = new float[4];
|
|
foreach (AudioSource audio in _audioSources)
|
|
{
|
|
audio.GetOutputData(samples, 0);
|
|
float sample = Mathf.Abs(samples[2]);
|
|
sample = Mathf.Sqrt(sample);
|
|
float scale = audio.gameObject.transform.localScale.x;
|
|
//audio.GetSpectrumData(samples, 0, FFTWindow.Hanning);
|
|
|
|
scale = 0.15f + Mathf.Lerp(scale, sample, Time.deltaTime * 20f) * 0.85f;
|
|
audio.gameObject.transform.localScale = Vector3.one * scale;
|
|
}
|
|
|
|
int index = 0;
|
|
foreach (Transform t in _audioObjects)
|
|
{
|
|
//Vector3 v = axes[index % axes.Length];
|
|
//t.RotateAround(Vector3.zero, Vector3.up, 40 * Time.deltaTime);
|
|
//Quaternion q = Quaternion.Euler(0f, Time.timeSinceLevelLoad * 50f, 0f);
|
|
//Matrix4x4.TRS(Vector3)
|
|
|
|
float time = Time.timeSinceLevelLoad + index * 1.321f;
|
|
float tt = Mathf.PingPong(Mathf.Sin(time * 2.23f) + 1f, 2f) / 2f;
|
|
float r = Mathf.Lerp(0.5f, 3f, tt);
|
|
float x = Mathf.Sin(time * 1f) * r;
|
|
float z = Mathf.Cos(time * 1.13f) * r;
|
|
float y = Mathf.Sin(time * 1.23f) * 1f;
|
|
|
|
|
|
//Vector3 v = t.position.normalized * r;
|
|
|
|
t.position = new Vector3(x, y, z);
|
|
|
|
//t.position = new Vector3(t.position.x, y, t.position.z);
|
|
index++;
|
|
}
|
|
|
|
}
|
|
}
|
|
} |