Unity 音乐可视化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/n_moling/article/details/82804686

首先感谢 FransicZhang的博客,链接:https://blog.csdn.net/fransiczhang/article/details/78093131

下面获取输入音频及处理代码主要根据FransicZhang的博客所写:

/************************************************************
  FileName: AudioVisualization.cs
  Author:末零       Version :1.0          Date: 2018-9-21
  Description:音频可视化
************************************************************/

using UnityEngine;

public class AudioVisualization : MonoBehaviour
{
    public float speed = 20f;//速度
    public float peak = 10;//峰值控制

    public float volume;
    private AudioClip micRecord;
    private string device;
    private float x;
    private void Start()
    {
        device = Microphone.devices[0];//获取设备麦克风
        micRecord = Microphone.Start(device, true, 999, 44100);
    }
    private void Update()
    {
        volume = GetMaxVolume();

        transform.Translate(Vector3.right * speed * Time.deltaTime);
        x = gameObject.transform.localPosition.x;
        //处理峰值
        if (volume > 0.9f)
        {
            volume = volume * speed * Time.deltaTime;
            gameObject.transform.localPosition = new Vector3(x, volume * peak, 0);
        }
        else
        {
            gameObject.transform.localPosition = new Vector3(x, volume * peak, 0);
        }
    }
    //每一振处理那一帧接收的音频文件
    private float GetMaxVolume()
    {
        float maxVolume = 0f;
        //剪切音频
        float[] volumeData = new float[128];
        int offset = Microphone.GetPosition(device) - 128 + 1;
        if (offset < 0)
        {
            return 0;
        }
        micRecord.GetData(volumeData, offset);

        for (int i = 0; i < 128; i++)
        {
            float tempMax = volumeData[i];//修改音量的敏感值
            if (maxVolume < tempMax)
            {
                maxVolume = tempMax;
            }
        }
        return maxVolume;
    }
}

可以把这部分代码挂到一个GameObject上,并加上拖尾组件,便可实现音频曲线,前提是获取的麦克风权限,前面博客已有涉及。处理好音频部分,接下来的任务就是把它显示在界面上。

首先,写一个摄像机跟随脚本:

/************************************************************
  FileName: CameraFollow.cs
  Author:末零       Version :1.0          Date: 2018--
  Description:摄像机跟随
************************************************************/

using UnityEngine;

public class CameraFollow: MonoBehaviour {

    public Transform target;
    private float distance = 59;

    private void OnEnable()
    {
        distance = transform.position.x - target.position.x;
    }

    private void Update () 
	{
        transform.position = new Vector3(target.position.x + distance, transform.position.y, transform.position.z);
	}
}

然后通过RenderTexture显示在UI界面上。

猜你喜欢

转载自blog.csdn.net/n_moling/article/details/82804686