美文网首页
Unity - 获取麦克风输入的音量大小

Unity - 获取麦克风输入的音量大小

作者: null_8295 | 来源:发表于2017-11-19 14:28 被阅读0次

实现思路

在Unity当中,是没有直接获取麦克风的音量大小的方法的,但是,它提供了一种录制音频的方法,那么我们就可以从录制的音频当中去获取音量的大小了。

实现细节

在Unity的API当中,存在着录制的方法

Microphone.Start(string deviceName,bool loop,int lengthSrc,int frequency);

第一个自然是马克风设备的名称,第二个是指要不要重复录制,第三个是指录制时长,第四个指的是录制时候的码率(一般是44100)

在利用这个方法实现了录制音频之后,我们就可以对音频进行分析了。

    /// <summary>
    /// 获取一段时间内的最大的音量
    /// </summary>
    /// 
    /// <returns>
    /// 音量大小
    /// </returns>    
    private float GetMaxVolume()
    {
        float maxVolum = 0f;
        //用于储存一段时间内的音频信息
        float[] volumeData = new float[VOLUME_DATA_LENGTH];
        int offset;
        //获取录制的音频的开头位置
        offset = Microphone.GetPosition(mDeviceName) - VOLUME_DATA_LENGTH + 1;

        if(offset < 0)
        {
            return 0f;
        }

        //获取数据
        mMicrophoneRecode.GetData(volumeData, offset);
        //解析数据
        for(int i = 0;i < VOLUME_DATA_LENGTH; i++)
        {
            float tempVolume = volumeData[i];
            if(tempVolume > maxVolume)
            {
                maxVolume = tempVolume;
            }
        }

        return maxVolume;
    }

在这里Microphone.GetPosition(string deviceName);
方法是获取当前录制到的位置的方法,减去我用于储存声音的数组的大小(VOLUME_DATA_LENGTH)则是刚好是我用于储存数组的开头所需要的坐标

然后利用音频(AudioClip)当中的GetData(float[] data,int offsetSample)方法,获取了一段时间内的音频数据,然后再根据数据进行分析,获取当前时间段内的最大音频即可

具体实现代码

using UnityEngine;

public class MicrophoneInput : MonoBehaviour {

    private static int VOLUME_DATA_LENGTH = 128;    //录制的声音长度

    public float volume;        //音量

    private AudioClip mMicrophoneRecode;  //录制的音频
    private string mDeviceName;           //设备名称

    private const int frequency = 44100; //码率
    private const int lengthSec = 999;   //录制时长

    // Use this for initialization
    void Start () {
        //获取设备名称
        mDeviceName = Microphone.devices[0];

        //录制一段音频
        mMicrophoneRecode = Microphone.Start(mDeviceName, true, lengthSec, frequency);
    }
    
    // Update is called once per frame
    void Update () {
        volume = GetMaxVolume();
    }



    /// <summary>
    /// 获取最大的音量
    /// </summary>
    /// 
    /// <returns>
    /// 音量大小
    /// </returns>
    private float GetMaxVolume()
    {
        float maxVolume = 0f;

        //用于储存一段时间内的音频信息
        float[] volumeData = new float[VOLUME_DATA_LENGTH];

        int offset;
        //获取录制的音频的开头位置
        offset = Microphone.GetPosition(mDeviceName) - VOLUME_DATA_LENGTH + 1;

        if(offset < 0)
        {
            return 0f;
        }

        //获取数据
        mMicrophoneRecode.GetData(volumeData, offset);

        //解析数据
        for(int i = 0;i < VOLUME_DATA_LENGTH; i++)
        {
            float tempVolume = volumeData[i];
            if(tempVolume > maxVolume)
            {
                maxVolume = tempVolume;
            }
        }

        return maxVolume;
    }
}

相关文章

  • Unity - 获取麦克风输入的音量大小

    实现思路 在Unity当中,是没有直接获取麦克风的音量大小的方法的,但是,它提供了一种录制音频的方法,那么我们就可...

  • iOS 获取麦克风音量

    项目需求要获取麦克风音量,然后界面做出反馈。注意:录音之前需要先调用以下方法,因为播放和录制的模式是不同的 1、使...

  • java.lang.RuntimeException: getM

    异常场景:在消息聊天中用户不断的进行发送语音的操作,频率短且快。而在这个过程中,为了获取到麦克风所接收到的音量大小...

  • Unity获取Android平台音量

    https://www.cnblogs.com/Jason-c/p/7766021.html http://blo...

  • adb:获取手机音量并设置音量大小

    adb:获取手机音量并设置音量大小 在自动化测试过程中,有时可能会需要调节Android设备的各类音量的场景时时,...

  • iOS AudioQueue 音量大小

    1、AudioQueue代理回调获取音频数据: 2、传入data数据获取音量大小 // .h文件 // Audio...

  • iOS获取及设置设备音量

    设置音量相关 1. 获取MPVolumeView 2.获取MPVolumeView上面的滑条 3.设置大小:参数值...

  • iOS系统音量&屏幕亮度调节

    一,系统音量获取 系统框架 获取系统音量slider 监听系统物理按键调节音量 获取系统当前音量 二,屏幕亮度 很...

  • 视频播放整理

    视频播放 功能点梳理 1.视频资源可以正常获取 视频封面图 页面UI 2.音量 音量大小 静音模式下,播放时无声音...

  • Unity 获取物体Size大小

    有下面3种方式可以获取: 打印结果如下: 由此可见:通过< MeshFilter >获取的是物体的实际大小;通过<...

网友评论

      本文标题:Unity - 获取麦克风输入的音量大小

      本文链接:https://www.haomeiwen.com/subject/sgouvxtx.html