Unity实时接收麦克风音频将音频可视化类卡拉OK效果展示

昨天写了一篇关于将麦克风的音频变成可视化的音波       今天我就来把那个音波变成柱状的   -----------类卡拉OK的效果

本文将详细的介绍这一功能的实现,并对上一篇文档进行解析。

点击打开链接

首先:在Start的时候开始录音,

开始之前要记录使用的设备的麦克风,     音频采样率自行百度

Microphone.Start
的使用可以去Unity官网查询有关API文档

public AudioClip micRecord;
    string device;//记录设备的麦克风名称
 void Start()
    {
        device = Microphone.devices[0];
        micRecord = Microphone.Start(device, true, 999, 44100);//999 录音时长      44100音频采样率
    }

下面要处理在每一帧麦克风所录制的声音,并保存到一个baty数组内

 void Update()
    {
        volume = GetMaxVolume();
    }
音频处理:

float GetMaxVolume()
    {
        float maxVolume = 0f;
        float[] volumeData = new float[120];
        int offset = Microphone.GetPosition(device) - 120 + 1;
        if (offset < 0)
        {
            return 0;
        }
        micRecord.GetData(volumeData, offset);

        for (int i = 0; i < 120; i++)
        {
            float tempMax = volumeData[i] * volumeData[i];//修改麦克风对声音的敏感度可以自行调整,,,想不敏感就乘volumeData[i]就行了,反之就去掉
            //这个if是用来取记录的音频的一部分   和你所加的物体有关  下面有效果图展示
            if (i % 4 == 0)
            {
                f = i / 4;
                ButtonAudio.instance.obj[f].gameObject.transform.localScale = new Vector3(1, volumeData[i] * 30 + 0.5f, 1);//将可视化的物体和音波相关联
            }
        }
        return maxVolume;
    }
到此,,音频处理结束


下面是处理物块的代码;

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

public class ButtonAudio : MonoBehaviour
{
    public GameObject[] obj;
    public static ButtonAudio instance;
    public float Role;//旋转角度
    public float r;//半径
    public int d;//物块个数
    private void Awake()
    {
        //print(Mathf.Sqrt(9));
        instance = this;
    }
    // Use this for initialization
    void Start()
    {
        Role = 360.0f / d;
        print(Role.ToString());
        obj = new GameObject[d];
        for (int i = 0; i < d; i++)
        {

            Object gameObject = Resources.Load("Audio", typeof(GameObject));
            GameObject Audio = Instantiate(gameObject) as GameObject;
            Audio.transform.parent = transform;
            Audio.gameObject.transform.position = Vector3.zero;
            Audio.gameObject.transform.localRotation = Quaternion.identity;
            Audio.gameObject.transform.localScale = Vector3.one;
            Audio.gameObject.transform.Rotate(new Vector3(0, Role * i, 0));
            Audio.gameObject.transform.Translate(Vector3.forward * r);
            Audio.name = i.ToString();
            obj[i] = Audio;
        }
    }
}
总之呢,,就是将音频的值和物块的放大缩小相关连  效果就出来了   随后可以将文件分享出来

上几张效果图给大家看看      由于没有美术   毕竟我们看的是功能对吧。

为了让它比较真实。。。。加了一个水面的特效

物块要改成自发光的



为了让它比较真实。。。。加了一个水面的特效
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值