35.Microphone麦克风

35.核心系统-音效系统-麦克风


35.1 知识点

Unity提供了Microphone类

获取设备麦克风信息

devices静态变量 返回使用麦克风设备string数组

//可用麦克风设备(用名称标识)的列表。
string[] strs = Microphone.devices;
for (int i = 0; i < strs.Length; i++)
{
    print(strs[i]);
}

Start方法 麦克风开始录制

//按下空格键开始录制
if (Input.GetKeyDown(KeyCode.Space))
{
    //Start静态方法 麦克风开始录制 返回一个AudioClip音频文件 可以用来存储
    //开始使用设备进行录制。
    //参数一:设备名 传空使用默认设备
    //参数二:超过录制长度后 是否重头录制
    //参数三:录制时长
    //参数四:采样率
    audioClip = Microphone.Start(null, false, 10, 44100);
}

End方法 麦克风结束录制

//抬起空格键结束录制
if (Input.GetKeyUp(KeyCode.Space))
{
    //End静态方法 麦克风结束录制
    //停止录制。
    Microphone.End(null);
    
    //第一次去获取AudioSource 没有AudioSource才添加新的AudioSource
    AudioSource audioSource = this.GetComponent<AudioSource>();
    if (audioSource == null)
    {
        audioSource = this.gameObject.AddComponent<AudioSource>();
    }
    
    //设置AudioSource的音频文件并播放
    audioSource.clip = audioClip;
    audioSource.Play();

    //抬起空格键结束录制逻辑内
}

获取音频数据用于存储或者传输

//抬起空格键结束录制逻辑内

//AudioClip类的channels变量和samples变量
//channels变量 音频剪辑中的声道数。(只读)
//samples变量 样本中音频剪辑的长度。(只读)
//规则 用于存储数组数据的长度 是用 声道数 * 剪辑长度
float[] f = new float[audioClip.channels * audioClip.samples];

//AudioClip类的GetData方法 把音频数据存储到浮点数数组当中
//使用剪辑中的样本数据填充数组。
audioClip.GetData(f, 0);

print(f.Length); //441000

35.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson35_音效系统_麦克风输入相关 : MonoBehaviour
{
    private AudioClip audioClip;

    void Start()
    {
        #region 知识点一 获取设备麦克风信息

        //Unity提供了 Microphone类

        //devices静态变量 返回使用麦克风设备string数组
        //可用麦克风设备(用名称标识)的列表。
        string[] strs = Microphone.devices;
        for (int i = 0; i < strs.Length; i++)
        {
            print(strs[i]);
        }

        #endregion


    }

    void Update()
    {
        #region 知识点二 麦克风开始录制

        //按下空格键开始录制
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //Start静态方法 麦克风开始录制 返回一个AudioClip音频文件 可以用来存储
            //开始使用设备进行录制。
            //参数一:设备名 传空使用默认设备
            //参数二:超过录制长度后 是否重头录制
            //参数三:录制时长
            //参数四:采样率
            audioClip = Microphone.Start(null, false, 10, 44100);
        }

        #endregion

        #region 知识点三 麦克风结束录制

        //抬起空格键结束录制
        if (Input.GetKeyUp(KeyCode.Space))
        {
            //End静态方法 麦克风结束录制
            //停止录制。
            Microphone.End(null);

            //第一次去获取AudioSource 没有AudioSource才添加新的AudioSource
            AudioSource audioSource = this.GetComponent<AudioSource>();
            if (audioSource == null)
            {
                audioSource = this.gameObject.AddComponent<AudioSource>();
            }

            //设置AudioSource的音频文件并播放
            audioSource.clip = audioClip;
            audioSource.Play();

            #region 知识点四 获取音频数据用于存储或者传输

            //抬起空格键结束录制逻辑内

            //AudioClip类的channels变量和samples变量
            //channels变量 音频剪辑中的声道数。(只读)
            //samples变量 样本中音频剪辑的长度。(只读)
            //规则 用于存储数组数据的长度 是用 声道数 * 剪辑长度
            float[] f = new float[audioClip.channels * audioClip.samples];

            //AudioClip类的GetData方法 把音频数据存储到浮点数数组当中
            //使用剪辑中的样本数据填充数组。
            audioClip.GetData(f, 0);

            print(f.Length); //441000

            #endregion
        }

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏