Unity實時獲取麥克風音訊,處理成視覺化
阿新 • • 發佈:2019-02-07
由於我們的專案需要,領導要我做一個音訊視覺化
可是查了好多資料都是將導進去的音樂變成視覺化的
我就開始自己做了一個實時獲取外界聲音處理成視覺化的音訊波。
下面上程式碼
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; } }
下面就是效果圖了,,,,程式大佬可以讓美術大佬給你弄漂亮點的、科幻點的。