วันเสาร์ที่ 31 มกราคม พ.ศ. 2558

แชร์โค้ด Unity : แสดงผลกราฟคลื่นเสียง (Sound Wave Visualizer) - AudioSource.GetOutputData()



พอดีช่วงนี้กำลังทำโปรเจคโครงงานวิชาฟิสิกส์เกี่ยวกับคลื่นเสียงอยู่
ผมเลยเขียนโปรแกรมด้วย Unity เพื่อใช้ประโยชน์ในการนำเสนองาน
ซึ่งผมจะเอาส่วนนึงมาแชร์ เป็นการนำข้อมูลของกระแสเสียงที่ออกผ่านลำโพง
( ดึงค่าจาก audio.GetOutputData() ) มาแสดงผลเป็นกราฟของเสียง
ด้วย Component LineRenderer

การใช้งาน เดี๋ยวจะทำคลิปตามทีหลังนะครับ
ที่จริงลองไปเล่นดูก่อนได้ครับ มีตัวแปรให้ปรับสองสามตัว
จะเป็นพวกขนาด visualizer และก็ความละเอียดของกราฟครับ

ส่วนหน้าตาของโค้ดก็ประมาณนี้ครับ
รายละเอียดติดตามภายในคลิปนะครับ(เสร็จแล้วจะลงเพจอีกที)


รายละเอียดเพิ่มเติมในคลิปครับ


โค้ดดิบสำหรับก้อบ

using UnityEngine;
using System.Collections;

public class soundWave : MonoBehaviour
{
    public LineRenderer lineRend;
    public int quality = 50;
    public float len = 25;
    public float amplitude = 20;
    
    void Update () 
    {
        float[] soundBit = new float[quality];
        lineRend.SetVertexCount(quality);
        
        if (audio.isPlaying)
        {
            for (int i = -quality / 2i < quality / 2i++)
            {
                audio.GetOutputData(soundBit0);
                lineRend.SetPosition(i + quality / 2new Vector3(i * (float)((float)len / (float)quality), soundBit[i + quality / 2] * amplitude0));
            }
        }
    }
}