游戏开发实验Unity音频效果可视化显示(GetSpectrumData接口)

Posted 林新发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏开发实验Unity音频效果可视化显示(GetSpectrumData接口)相关的知识,希望对你有一定的参考价值。

文章目录

一. 前言

我们可以在音频软件中可以看到音频一些特效效果,比如这样:

Unity中如何制作类似的这种效果呢。
我做了个简易的效果(虽然效果很简单,但我相信懂了原理之后,上面这种效果也可以做出来了),如下:

Demo工程我已上传到GitHub,大家可以下载下来学习:
https://github.com/linxinfa/Unity-AudioDance

二. GetSpectrumData接口

Audiosources有一个接口,用于采样声谱数据块:

public static void GetSpectrumData(float[] samples, int channel, FFTWindow window);

参数说明:
samples: 函数返回值。将音频样本数据传送至samples数组,数组大小必须为2的n次方,最小64,最大8192。
channel: 一般设置为0。
window: 转换信号所用的窗函数,算法越复杂,声音越柔和,但速度更慢。

用法 :
先声明一个浮点数组:

public float[] samples = new float[8192];

在Update方法里面使用方法:

audiosource.GetSpectrumData(samples, 0, FFTWindow.BlackmanHarris);

三. 具体制作

准备资源:
1 一个音频文件
2 一个材质球
3 一个Main脚本(脚本代码见文章下面)

材质球效果自己看着喜欢设置,我的材质球设置如下:

场景中,创建一个物体,命名为LienRenderer,挂上LienRenderer组件,并给设置材质球:

Main Camera挂上Main脚本,并赋值AudioclipLinerender

Main.cs脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Main : MonoBehaviour

    private AudioSource m_audiosource;
    public AudioClip audioclip;
    public float[] samples;
    public LineRenderer linerender;

    private readonly int LINERENDER_POINT_CNT = 32;


    void Start()
    
        m_audiosource = gameObject.GetComponent<AudioSource>();
        m_audiosource.clip = audioclip;
        m_audiosource.Play();
        samples = new float[1024];
        linerender.positionCount = LINERENDER_POINT_CNT;
        linerender.startWidth = 0.02f;
        linerender.endWidth = 0.02f;

    

    // Update is called once per frame
    void Update()
    
        m_audiosource.GetSpectrumData(samples, 0, FFTWindow.BlackmanHarris);
        for (int i = 0, cnt = LINERENDER_POINT_CNT; i < cnt; ++i)
        
            var v = samples[i];
            linerender.SetPosition(i, new Vector3((i - LINERENDER_POINT_CNT / 2) * 0.2f, v * 20, -5));

        
    

最后运行Unity即可看到效果。

以上是关于游戏开发实验Unity音频效果可视化显示(GetSpectrumData接口)的主要内容,如果未能解决你的问题,请参考以下文章

unity 3d手机游戏开发的工作流程是怎样的?

Unity 2D 中的视频播放器播放音频但在处于非活动状态后设置为活动时不显示视觉效果

游戏仿真实验使用Unity仿真电视机光学三原色显示画面,我是要成为海贼王的男人

Unity有啥特点

unity和ue4哪个适合个人开发

国内有啥好的live2d和unity3d公司吗?三维可视化 3D 开发