Unity——炫酷的音频可视化

Unity 音频可视化-GetSpectrumData 2——创建脚本,把可视化物体填入。1——创建可视化方块。 阅读详情

在这里插入图片描述

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

这是AudioSoucre类型的方法,获取频谱数据;

  • samples:采样率,就是说采集多长一段的频谱,必须为2^n,但是最小64,最大8192。

  • channel:信道,默认0

  • window:采样方式(Enum),有下列几种

    Rectangular W[n] = 1.0.
    Triangle W[n] = TRI(2n/N).
    Hamming W[n] = 0.54 - (0.46 * COS(n/N) ).
    Hanning W[n] = 0.5 * (1.0 - COS(n/N) ).
    Blackman W[n] = 0.42 - (0.5 * COS(n/N) ) + (0.08 * COS(2.0 * n/N) ).
    BlackmanHarris W[n] = 0.35875 - (0.48829 * COS(1.0 * n/N)) + (0.14128 * COS(2.0 * n/N)) - (0.01168 * COS(3.0 * n/N)).


22050HZ的频率分在几个范围:(从小到大声音越来越尖锐)
20~60:
60~250:
250~500:
500~2000:
2000~4000:
4000~6000:
6000~20000:

22050采样512个数据,一个sample 43hz;

分成8段:

0: 2      86hz
1: 4      172hz
2: 8      344hz
3: 16    688hz
4: 32    1376hz
5: 64    2752hz
6: 128  5504hz
7: 256  11008hz

Unity中新建一个类,AudioVisable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(AudioSource))]
public class AudioVisable : MonoBehaviour {
    AudioSource audioSource;
    public  float[] samples = new float[512];
      float[] freqBand = new float[8];
      float[] bandBuffer = new float[8];
    float[] bufferDecrease = new float[8];

    float[] _freqBandHighest = new float[8];
    public static float[] _audioBand = new float[8];
    public static float[] _audioBandBuffer = new float[8];

    public static float _Amplitude, _AmplitudeBuffer;
    float _AmplitudeHighest;
	void Start () {
        audioSource = GetComponent<AudioSource>();
	}
	
    void CreateAudioBands()
    {
        for (int i = 0; i < 8; i++)
        {
            if (freqBand[i] > _freqBandHighest[i])
            {
                _freqBandHighest[i] = freqBand[i];
            }
            _audioBand[i] = (freqBand[i]/_freqBandHighest[i]);
            _audioBandBuffer[i] = (bandBuffer[i]/_freqBandHighest[i]);
        }
    }

	void Update () {
        GetSpectrumAduioSource();
        MakeFrequencyBands();
        BandBuffer();
        CreateAudioBands();
        GetAmplitude();
    }
    void GetAmplitude()
    {
        float _CurrentAmplitude = 0;
        float _CurrentAmplitudeBuffer = 0;
        for (int i = 0; i < 8; i++)
        {
            _CurrentAmplitude += _audioBand[i];
            _CurrentAmplitudeBuffer += _audioBandBuffer[i];
        }
        if (_CurrentAmplitude > _AmplitudeHighest)
            _AmplitudeHighest = _CurrentAmplitude;
        _Amplitude = _CurrentAmplitude / _AmplitudeHighest;
        _AmplitudeBuffer = _CurrentAmplitudeBuffer / _AmplitudeHighest;
    }
    void GetSpectrumAduioSource()
    {
        audioSource.GetSpectrumData(samples, 0, FFTWindow.Blackman);
    }
    void MakeFrequencyBands()
    {
        int count = 0;
        for (int i = 0; i < 8; i++)
        {
            float average = 0;
            int sampleCount = (int)Mathf.Pow(2,i+1);
            if (i == 7)
            {
                sampleCount += 2;
            }
            for (int j = 0; j < sampleCount; j++)
            {
                average += samples[count]*(count+1);
                count++;
            }
            average /= count;
            freqBand[i] = average * 10;
        }
    }

    void BandBuffer()
    {
        for (int i = 0; i < 8; i++)
        {
            if (freqBand[i] > bandBuffer[i])
            {
                bandBuffer[i] = freqBand[i];
                bufferDecrease[i] = 0.005f;
            }
            if (freqBand[i] < bandBuffer[i])
            {
                bandBuffer[i] -= bufferDecrease[i];
                bufferDecrease[i] *= 1.2f;
            }
        }
    }
}

这个脚本挂在Camera上,可以看到采样的数据的变化;
在这里插入图片描述


Unity中,新建一个cube预制体开启,使用standard材质,打开hdr的外发光emission;

再新建一个脚本ParamCube,挂在cube预制体上;

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

public class ParamCube : MonoBehaviour {

    public int band;
    public float startScale, scaleMultiplier;

    Material material;
	void Start () {
        material = GetComponent<MeshRenderer>().materials[0];
	}
	
	// Update is called once per frame
	void Update () {
    
            transform.localScale = new Vector3(transform.localScale.x, (AudioVisable._audioBandBuffer[band]) * scaleMultiplier + startScale, transform.localScale.z);
            Color color = new Color(AudioVisable._audioBandBuffer[band], AudioVisable._audioBandBuffer[band], AudioVisable._audioBandBuffer[band]);
            material.SetColor("_EmissionColor",color);      
    }
}

然后在Scene中放8个cube预制体,把脚本中StartScale和scaleMultiplier调为1和10,band为0~7;
在这里插入图片描述


最后,在Camera的AudioSource组件上添加音频,运行~

在这里插入图片描述

参考:
国外Youtube上的大神,链接如下:
https://www.youtube.com/playlist?list=PL3POsQzaCw53p2tA6AWf7_AWgplskR0Vo

Unity实时获取麦克风音频,处理成可视化 由于我们的项目需要,领到要我做一个音频可视化 可是查了好多资料都是将导进去的音乐变成可视化的 我就开始自己做了一个实时获取外界声音处理成可视化的音频波。 下面上代码 using System.Collections; using System.Collections.Generic; using UnityEngine; public class AudioVisuali 阅读详情

相关推荐

Unity 中的音乐可视化

Unity 中的音乐可视化 本帖最后由 204有个大坑 于 2017-5-31 17:33 编辑 1738music-visulization-in-unity.jpg (32.33 KB, 下载次数: 0)下载附件 保存到相册2017-5-24 16:10 上传 目标:本文的主要目标是让你知道在Unity中怎么样使用音乐可视化。最终输出是这样的: capture-1.gif (256.9

u010707274的博客 1万+

unity实时音频可视化

最近需要实现unity将实时接受的音频可视化,在网上找了半天,基本实现的都是将已有的音频文件可视化的,唯一找到的一个的做法还是取点画拖尾,得让unity的镜头随着它移动,不太适合,所以只能自己缝缝补补,结合了一下他们的做法。基本的想法就是用xchart在unity中画一个柱状图,然后每帧去获取录取的音频的散点数值,从中取n个点赋值给柱子的高度,就能让柱状图随着接受的音频改变而不停跳动了。大家做的时候记得要把脚本里获取的音频数值数量改成和自己柱状图柱体的数量一致。

sxj676的博客 1047

Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克风)

Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克风) 目录 Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克风) 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、实现步骤 六、关键脚本 一、简单介绍 Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。 本节介绍,获取音频或者麦克风的数据,进行简单的可视化显示封装,如果你有更好的方法,欢迎留言交流。 二、实现原理 1、关键是获取 音频数据的...

仙魁XAN 4408

【可视化编程一】关于Unity可视化编程(Visual Scripting)

文章为笔者对Unity官网上关于Visual Scripting用户手册的个人翻译,供参考查阅,如有侵权请告知。 这个系列文章计划持续更新,实际情况看是否有读者需求而定。

weixin_37537723的博客 1万+

Unity AudioVisualizer音频可视化插件演示与实战

Unity AudioVisualizer 插件是一种在游戏和实时应用中创造音频可视化效果的强大工具。它能将音频信号转换成视觉元素,如波形、频谱图和粒子效果,以增强用户的交互体验。这一章节旨在对Unity AudioVisualizer插件进行基础性介绍,从而为后续章节中对实时音频处理、视觉效果渲染、自定义模板开发以及性能优化等内容的深入探讨打下坚实的基础。高级自定义效果是用户根据个人喜好或特定需求所设计的可视化效果。

weixin_31776191的博客 1559

Unity_DataVisualization:这是用于数据可视化的Unity Particle System的集合

核子 数学模型 Unity官方教程: : Taras Leskiv: ://unity3d-shader-programming.zeef.com/taras.leskiv 敬二郎: : 以及更多: :

unity 音频可视化

using System.Collections; using System.Collections.Generic; using UnityEngine; public class AudioVisualization : MonoBehaviour { public static float volume; private AudioClip mi...

weixin_37744986的博客 1467

unity音频可视化系统源码Audio+Visualizer

unity音频可视化系统源码Audio+Visualizer unity 音频 特效插件

Unity音频可视化

直接上效果图(初版): 参考资料:https://blog.youkuaiyun.com/liu_if_else/article/details/51233799 https://blog.youkuaiyun.com/noEnoughChief/article/details/82984635 新建个空物体"UI" 按照自己的需求设置UI的中心点(主要是设置中心...

小小小小羽的博客 4736

Unity音频可视化.zip

Unity音频可视化.zip

LaTeX小白必看:TeX Live+TeXstudio保姆级安装教程(附清华镜像加速)

本文为LaTeX新手提供了一份详尽的TeX Live和TeXstudio安装指南。通过清华大学镜像站实现高速下载,并详细讲解了从下载、定制化安装到配置优化的每一步,帮助用户快速搭建稳定高效的本地LaTeX写作环境,轻松处理学术文档排版。

weixin_29214559的博客 413

unity:如何实现音频可视化

今天有个项目需要接入音乐,所以整理了一下相关资料 MP3或者WAV等音频文件里面储存的时数字信号,我们需要读取这些数据 据转化成频谱数据,这样就可以比较直观地使用了。unity为我们提供了AudioListener.GetSpectrumData来直接获取音频的频谱,为我们节省了转码的时间。 语法:public static void GetSpectrumData(float[] samples...

Wmayy_123的博客 1916

ESP32接入扣子(Coze) API使用自定义智能体

本示例将使用ESP32开发板通过WiFi接入 **Coze API**,实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题,ESP32将通过Coze API与智能体进行通信,并返回对应的回复。本文将详细介绍了如何通过HTTP请求和JSON解析来与API进行交互,并给出完整的代码示例。

宁子希的博客 1万+

Unity 音频可视化(麦克风输入)

有的时候制作一个科幻风格的项目的时候,加入一个语音输入可视化的界面。或许能够更高大上一些,所以在空余时间研究了一下音频的可视化。其实原因还是非常简单的

7971

Curve+ 5.0.2:新一代色彩校准工具如何革新印刷行业标准

Curve+ 5.0.2作为新一代色彩校准工具,通过G7+校准算法和SCTV技术革新了印刷行业的色彩管理标准。该工具显著提升色彩精准度,减少打样时间和材料浪费,支持专色处理,实现跨材质色彩一致性,为印刷企业带来效率与质量的全面提升。

weixin_29228781的博客 529

量化交易中的烂板策略:短线高频交易实战解析

量化交易通过算法模型实现自动化投资决策,其中短线高频交易是典型应用场景。从市场微观结构看,涨停板现象反映了资金博弈的动态平衡,而烂板策略正是捕捉涨停板短暂打开时的交易机会。该策略结合L2行情数据和Python量化框架,通过参数化规则识别特定形态的烂板股票,在风险可控前提下追求超额收益。实战中需严格遵循动态仓位管理和止损纪律,适用于A股市场短线交易。高频交易与量化分析技术的结合,为投资者提供了新的alpha挖掘工具。

weixin_30432579的博客 364

Unity 语音识别以及音频可视化

代码很简单没有难度,自己看一下应该就能明白。 OK 老规矩,直接上代码: 语音识别以及音频可视化 怎么说呢,就是这个语音识别的模块现在Unity只能识别关键字,并不能完整的识别语句以及语气,只能做一些简单的操作,不过如果需要更加复杂的语音识别以及牵扯到AI问答的逻辑,可以去桥接讯飞或则百度的SDK 进行语音训练或则更多的操作。 总体来说基础的应用也够用了,按需应用吧。 using System; using System.Collections; using System.Collections.Gener

Maddie_Mo的博客 5211

Chrome更新出现错误代码3: 0X80070422 -- system level的解决方案

本文主要介绍了Chrome更新出现错误代码3: 0X80070422 – system level的解决方案,希望能对使用Chrome的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

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

文章目录一. 前言二. GetSpectrumData接口三. 具体制作 一. 前言 我们可以在音频软件中可以看到音频一些特效效果,比如这样: 在Unity中如何制作类似的这种效果呢。 我做了个简易的效果(虽然效果很简单,但我相信懂了原理之后,上面这种效果也可以做出来了),如下: 二. GetSpectrumData接口 AudioSources有一个接口,用于采样声谱数据块: public ...

linxinfa的专栏 6688

新手秒变高手:使用一键脚本快速安装OpenClaw并完成初始化配置

一键脚本是一种自动化工具,可以帮助用户快速完成软件的安装和配置过程,无需手动执行繁琐的命令。OpenClaw提供了官方的一键安装脚本,让新手用户也能轻松部署OpenClaw。

一键难忘的博客 358

c++中,部署Ethercat IGH + PREEMPT_RT 环境,跑DC模式,如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1356

学习笔记---Unity画线插件Vectrosity实现音频可视化的一个方法

Vcetrosity插件的使用Vectrosity插件的介绍Unity音频可视化的一个方法实现的代码***实现的效果插件和demo下载地址:*** Vectrosity插件的介绍 在Unity中使用这款插件可以绘制2d/3d/贝塞尔/圆/椭圆等线条图案。 使用步骤: 1.导入插件包,引入命名空间using Vectrosity 2.声明一个画线对象VectorLine line 3.在开始方法里实例化VectorLine对象: 4.设置位置坐标点到链表里去 5.调用line.Drwa()方法即可绘制所需线

他在试图用代码书写这个世界,字里行间温柔尽显。勿忘初心,努力做有价值的技术文章。 2614

SAP 固定资产采购简介

SAP 固定资产采购是指企业通过采购流程获取长期使用并记录为固定资产的物品。固定资产是企业为长期使用而购置的资产,如机器设备、办公设备、建筑物、车辆等,通常这些资产的使用期限较长,并且在资产负债表上记录。在SAP系统中,固定资产采购流程通常与物料管理(MM)模块和固定资产管理(FI-AA)模块相结合。这个过程涉及从需求的提出、采购订单的创建,到货物接收、发票校验和资产激活的多个步骤。

我小时候很黑的博客 1730

Unity音频可视化神器LaspVfx:让你的游戏特效随音乐律动

LaspVfx是一款专为Unity打造的音频响应视觉效果插件,能够让游戏中的视觉特效与音乐完美同步,创造出极具沉浸感的动态体验。无论是粒子爆炸、光影变化还是场景转换,都能根据音频的节奏和强度实时变化,为玩家带来耳目一新的视听享受。 ## 核心功能:四大音频绑定器让特效“闻声起舞” LaspVfx提供了四种关键的音频属性绑定器,覆盖了从基础音量到复杂频谱分析的全方位音频响应需求: ### 1.

gitblog_01414的博客 586

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Unity音频可视化资源文件:让音频数据“触手可及”

Unity音频可视化资源文件:让音频数据“触手可及” 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在游戏和交互式媒体领域,音频可视化是一种将音频数据转化为视觉元素的技术。Unity音频可视化资源文件,这是一套为Unity开发者提供的音频可视化工具和示例集合,可以帮助您轻松实现音频数据的动态展现。无论是游戏音效的视觉反馈,还是音乐节奏的同步显示,这个资源文件都能为您提...

gitblog_06752的博客 497

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: C#——数据结构(二)栈、队列、二叉树
下一篇: Lua——认识一下Lua的面向对象和继承
ALey_Z
博客等级 码龄9年 31粉丝 35原创
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值