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

本文介绍了一个Unity中的语音录入类,该类能够获取实时的麦克风输入音量,并提供了一种方法来放大输入音量,适用于不同设备的麦克风。文章还包含了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过一段搜索。。。我在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;
}

///<summary>
///获取当前输入的音量最大值
///</summary>
///<returns>返回最大音量</returns>
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;
}
 
}

 
?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值