您的位置:首页 > 移动开发 > Unity3D

Unity将麦克风获取的音频实时的处理成可视化的音波

2017-09-26 11:11 525 查看
由于项目需要

领导需要我做一个用过麦克风获取音频 ,并将音频可视化

翻了不少论坛都是将导入进去的音频进行可视化,并没有将麦克风获取的音频实时的可视化,

下面就是我自己弄出来的,  上代码

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

public class AudioVisualization : MonoBehaviour
{
public static float volume;
private AudioClip micRecord;
string device;
/// <summary>
/// 拖尾的移动速度   要和摄像机的移动速度一致
/// </summary>
private int speed;
private float x;
void Start()
{
//初始化速度的值
speed = 5;
device = Microphone.devices[0];//获取设备麦克风
micRecord = Microphone.Start(device, true, 999, 44100);//44100音频采样率   固定格式
}
void Update()
{
volume = GetMaxVolume();
if (Input.GetKey(KeyCode.Escape))
{
Application.Quit();
}

//要加粒子特效  产生拖尾
transform.Translate(Vector3.right * speed * Time.deltaTime);
x = gameObject.transform.position.x;
//print(volume);
//处理峰值
if (volume > 0.9f)
{
volume = volume * speed * Time.deltaTime;
gameObject.transform.position = new Vector3(x, volume * 10, 0);
}
else
{
gameObject.transform.position = new Vector3(x, volume * 10, 0);
}
}
//每一振处理那一帧接收的音频文件
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;
}
}
效果图如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 可视化 音频 C#