找回密码
 注册帐号

扫一扫,访问微社区

Unity 音频的图谱展示

9
回复
437
查看
[ 复制链接 ]
6蛮牛粉丝
1352/1500
排名
4168
昨日变化

12

主题

383

帖子

1352

积分

Rank: 6Rank: 6Rank: 6

UID
18541
好友
7
蛮牛币
277
威望
0
注册时间
2014-3-22
在线时间
600 小时
最后登录
2019-12-3
2019-11-21 11:06:05 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
[AppleScript] 纯文本查看 复制代码
using UnityEngine;
using UnityEngine.UI;


[RequireComponent(typeof(AudioSource))]
public class AudioVisualizer : MonoBehaviour
{
    public RectTransform[] rectts;
    Image[] barsSprites;

    [Range(0, 10)]
    public float colorMultiplyer = 1;
    [Range(0.001f, 0.999f)]
    public float s = 1;
    [Range(0.001f, 0.999f)]
    public float v = 1;
    public float musicLength;

    public AudioSource _audio;

    public int length;
    public GameObject item;
    private void Start()
    {
        rectts = new RectTransform[length];
        barsSprites = new Image[length];
        for (int i = 0; i < length; i++)
        {
            GameObject game = Instantiate(item, item.transform.parent, false);
            game.transform.localPosition = new Vector3(i * 0.1f, 0, 0);
            game.SetActive(true);
            rectts[i] = game.GetComponent<RectTransform>();
            barsSprites[i] = game.GetComponent<Image>();
        }
    }

    void Update()
    {
        Visulization();

        musicLength = _audio.time;
    }
    private float[] musicData = new float[256];
    int i = 0;
    void Visulization()
    {
        _audio.GetSpectrumData(musicData, 0, FFTWindow.Triangle);
        for (i = 0; i < length; i++)
        {
            rectts[i].sizeDelta = new Vector2(850f / length, musicData[i] * 1000);
            barsSprites[i].color = HSVtoRGB(musicData[i] * colorMultiplyer, s, v);
        }
    }
    #region Static
    public static Color HSVtoRGB(float hue, float saturation, float value)
    {
        while (hue > 1f)
        {
            hue -= 1f;
        }
        while (hue < 0f)
        {
            hue += 1f;
        }

        if (hue > 0.999f) hue = 0.999f;
        if (hue < 0.001f) hue = 0.001f;

        float h6 = hue * 6f;
        if (h6 == 6f) h6 = 0f;

        int ihue = (int)(h6);
        float p = value * (1f - saturation);
        float q = value * (1f - (saturation * (h6 - ihue)));
        float t = value * (1f - (saturation * (1f - (h6 - ihue))));
        switch (ihue)
        {
            case 0:
                return new Color(value, t, p, 1);
            case 1:
                return new Color(q, value, p, 1);
            case 2:
                return new Color(p, value, t, 1);
            case 3:
                return new Color(p, q, value, 1);
            case 4:
                return new Color(t, p, value, 1);
            default:
                return new Color(value, p, q, 1);
        }
    }
    #endregion
}


bandicam 2019-11-21 11-03-34-362[00_00_02--00_00_22].gif
回复

使用道具 举报

6蛮牛粉丝
1352/1500
排名
4168
昨日变化

12

主题

383

帖子

1352

积分

Rank: 6Rank: 6Rank: 6

UID
18541
好友
7
蛮牛币
277
威望
0
注册时间
2014-3-22
在线时间
600 小时
最后登录
2019-12-3
楼主 2019-11-21 11:09:55 显示全部楼层
本帖最后由 光亮 于 2019-11-21 11:12 编辑

使用起来超级简单, MusicLength是当前音乐的播放进度, 如果需要进度条展示的话自行处理, length是当前图谱的横向个数, musicData是当前音频的图谱信息, 注意:长度要大于length, 而且必须是64和8192之间的2的幂, 然后Item随便绑定个image就可以了, 我这里Item的父对象绑定了HorizontalLayoutGroup且宽度为850,所以才有sizeDelta = new Vector2(850f / length, musicData * 1000);  请根据实际情况操作, 最好设置成死值,避免计算.
回复 支持 反对

使用道具 举报

5熟悉之中
768/1000
排名
8748
昨日变化

0

主题

151

帖子

768

积分

Rank: 5Rank: 5

UID
236487
好友
0
蛮牛币
5423
威望
0
注册时间
2017-8-8
在线时间
481 小时
最后登录
2019-12-6
2019-11-21 15:23:00 显示全部楼层
unity自制可视化音频//
回复 支持 反对

使用道具 举报

3偶尔光临
258/300
排名
64938
昨日变化

0

主题

51

帖子

258

积分

Rank: 3Rank: 3Rank: 3

UID
312630
好友
0
蛮牛币
349
威望
0
注册时间
2019-1-23
在线时间
205 小时
最后登录
2019-12-6
2019-11-21 16:12:15 显示全部楼层
非常好,要是webgl就好了
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1169/1500
排名
2236
昨日变化

1

主题

195

帖子

1169

积分

Rank: 6Rank: 6Rank: 6

UID
232255
好友
1
蛮牛币
1869
威望
0
注册时间
2017-7-15
在线时间
345 小时
最后登录
2019-12-6
2019-11-22 08:57:14 显示全部楼层
多谢分享
回复

使用道具 举报

7日久生情
2223/5000
排名
1896
昨日变化

61

主题

809

帖子

2223

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
214924
好友
8
蛮牛币
25133
威望
0
注册时间
2017-3-28
在线时间
637 小时
最后登录
2019-12-6
2019-11-22 09:25:03 显示全部楼层
6666666666666
回复

使用道具 举报

7日久生情
2223/5000
排名
1896
昨日变化

61

主题

809

帖子

2223

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
214924
好友
8
蛮牛币
25133
威望
0
注册时间
2017-3-28
在线时间
637 小时
最后登录
2019-12-6
2019-11-22 10:02:35 显示全部楼层
是我不会用?搞成这个效果了~~~~
微信截图_20191122100115.png
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1043/1500
排名
10708
昨日变化

0

主题

750

帖子

1043

积分

Rank: 6Rank: 6Rank: 6

UID
301976
好友
1
蛮牛币
1573
威望
0
注册时间
2018-10-31
在线时间
195 小时
最后登录
2019-12-6
2019-11-22 11:49:43 显示全部楼层
欧呦  
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1352/1500
排名
4168
昨日变化

12

主题

383

帖子

1352

积分

Rank: 6Rank: 6Rank: 6

UID
18541
好友
7
蛮牛币
277
威望
0
注册时间
2014-3-22
在线时间
600 小时
最后登录
2019-12-3
楼主 5 天前 显示全部楼层
fengxs420 发表于 2019-11-22 10:02
是我不会用?搞成这个效果了~~~~

亲, 你这里明显是叠在一起了, 试试在父物体上加一个横向的layout
回复 支持 反对

使用道具 举报

7日久生情
2223/5000
排名
1896
昨日变化

61

主题

809

帖子

2223

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
214924
好友
8
蛮牛币
25133
威望
0
注册时间
2017-3-28
在线时间
637 小时
最后登录
2019-12-6
4 天前 显示全部楼层
光亮 发表于 2019-12-1 12:39
亲, 你这里明显是叠在一起了, 试试在父物体上加一个横向的layout

好,我试试~~~谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则