声控游戏、语音输入控制,八分音符酱

看了B站UP玩的 八分音符酱 
声控游戏、语音输入控制,八分音符酱_第1张图片 
声控游戏哈哈哈,这种画风肯定是unity的啦于是就开始冲动了,没试过语音识别什么的,语音录制也没有做过啊,很想知道怎么做呢,要不要试试呢。。。。
目前项目也比较闲所以就在第二天就测试了各种想法,找资料。。。
经过一段搜索。。。我在B站找到大佬的教程/笑哭
https://www.bilibili.com/video/a ... 683285037706#page=2  
然后自己整理了下,通过这样的方式还有很多扩展玩法呢,看完记得设计一款自己的小游戏

附上最重要的代码:
/*
 *语音录入类
 *获取到当前语音录入的音量
 */
publicclassMicInput : MonoBehaviour
{
 
//用于观察麦克风输入的音量大小
public float volume;
//在公司偷偷测试,不敢大声,所以把输入的音量翻倍了
public float difference = 3f;
//不同的设备、麦克风的声音大小是不同的,用来在游戏时调整合适的输入值
public Slider slider;

//存放录制的语音
AudioClip micRecord;
//麦克风的设备名称
string device;
 
private void Start()
{
    //读取麦克风设备名,一台手机或者电脑可以接入多个麦克风,下标为0读取第一个麦克风
    device = Microphone.devices[0];
    //开始录音,device麦克风名称;loop循环录制;lengthSec录制长度;frequency频率啥的,这里的44100是默认值
    micRecord = Microphone.Start(device, true, 999, 44100);
}

private void Update()
{
    //取得当前输入的最大音量值
    volume = (float)Math.Round(GetMaxVolume(), 4) * difference * slider.value;
}

///
///获取当前输入的音量最大值
///
///返回最大音量
float GetMaxVolume()
{
    float maxVolume = 0f;

    //定义一个float类型的数组用于存储这段录音的音量数组
    float[] volumeData = new float[128];
    //偏移样本,从当前麦克风所在位置开始读取
    intoffset = Microphone.GetPosition(device) - 128 + 1;
    if (offset < 0)//麦克风的开始位置通常是负数,规范偏移值
    {
        return 0;
    }

    //从offset位置开始,获取一段录音的数据并存放到volumeData数组中
    micRecord.GetData(volumeData, offset);
    //从取得的数组中找出最大值
    for (int i = 0; i < volumeData.Length; i++)
    {
        float tempMax = volumeData[i];
        if (tempMax > maxVolume)
        {
            maxVolume = tempMax;
        }
    }
    returnmaxVolume;
}
 
}


?


你可能感兴趣的:(Unity)