是否可以使用NAudio从用户音频设备获取音频数据以传递到Unity3D进行可视化

时间:2012-04-03 02:41:41

标签: unity3d naudio

我要做的是从用户音频输出中获取原始音频,获取该数据并获得类似于unity3d的音频频谱和输出数组,并将该数据传递给我的可视化工具。

所以我需要知道一些事情:

  1. 我可以从用户设备中获取原始音频吗?到目前为止我发现的是使用waveinstream,默认情况下从所有设备获取音频数据。
  2. 与Unity3D GetOutputData()和GetSpectrumData()类似,我可以从该数据中获取音频频谱和输出吗? NAudio演示提供了类似的功能,但不完全是我想要的。
  3. 我是编码naudio的新手,而Unity的API和极其全面的文档使它更容易,naudio似乎有一些教程和示例,没有我需要的东西,也没有API定义。我最终会弄清楚,但我需要知道的是,如果我尝试的是可能的,除了任何帮助之外,我都会感激。

    我提供了我对问题1的尝试,它提供了看似随机的数据,我试图理解使用WaveFileReader但崩溃


    using UnityEngine;
    using System.Collections;
    using System;
    using NAudio.Wave;
    using NAudio.CoreAudioApi;
    using NAudio.Utils;
    
    public class myNAudio : MonoBehaviour {
    
    private WaveIn waveInStream;
    private WaveFileReader reader;
    private WaveStream readerStream;
    
    void waveInStream_DataAvailable(object sender, WaveInEventArgs e){
        //reader.Read(e.Buffer,0,e.BytesRecorded);
        //Debug.Log(e.Buffer);
    
        float tempDB = 0;
        for(int i = 0; i < e.Buffer.Length; i++){
            //Debug.Log(i + " = " +e.Buffer[i]);
            tempDB += (float)e.Buffer[i]/255;
        }
        Debug.Log(e.Buffer.Length + ", " +tempDB);  
    }
    
    void OnApplicationQuit(){
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
    }
    
    void OnDisable(){
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null; 
    }
    
    // Use this for initialization
    void Start () {
    
        waveInStream = new WaveIn();
        waveInStream.DeviceNumber = 0;
    
        waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
        waveInStream.StartRecording();
    }
    
    // Update is called once per frame
    void Update () {
    }
    }
    

0 个答案:

没有答案