Unity 音乐可视化

首先感谢 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界面上。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值