【Unity实战100例】Unity调取移动端的麦克风进行录音并播放传输字节

本文主要是介绍【Unity实战100例】Unity调取移动端的麦克风进行录音并播放传输字节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


源工程地址:https://download.csdn.net/download/qq_37310110/11869058

1.对MicroPhone类的理解

  对麦克风的调用在Unity里主要是用到了MicroPhone这个类,此类里面有几个方法可以方便我们实现功能

2.获取麦克风设备

  devices = Microphone.devices;if (devices.Length != 0){ShowTimeHint.text = "设备有麦克风:" + devices[0];}else{ShowTimeHint.text = "设备没有麦克风";}

3.开始录音

   AddTriggersListener(voiceBtn.gameObject, EventTriggerType.PointerDown, (t) =>{Debug.Log("开始说话");StartCoroutine("KeepTime");//参数一:设备名字,null为默认设备;参数二:是否循环录制;参数三:录制时间(秒);参数四:音频率aud.clip = Microphone.Start(devices[0], false, 15, 6000);});

 4.结束录音

  AddTriggersListener(voiceBtn.gameObject, EventTriggerType.PointerUp, (t) =>{Debug.Log("结束说话");StopCoroutine("KeepTime");Microphone.End(devices[0]);//直接播放aud.Play();string byteStr = AudioToByte(aud);//传输给服务器//GameManager.GetInstance.tcpClient.SendMeToServer(ProtoType.T_S_Voice, byteStr);});

5. 音频字节相互转换

 //把录好的音段转化为base64的string。测试过不转base64直接用byte[]也是可以的public string AudioToByte(AudioSource audio){float[] floatData = new float[audio.clip.samples * audio.clip.channels];audio.clip.GetData(floatData, 0);byte[] outData = new byte[floatData.Length];Buffer.BlockCopy(floatData, 0, outData, 0, outData.Length);return Convert.ToBase64String(outData);}//把base64的string转化为audioSourcepublic void ByteToAudio(AudioSource audioSource, string str){byte[] bytes = Convert.FromBase64String(str);float[] samples = new float[bytes.Length];Buffer.BlockCopy(bytes, 0, samples, 0, bytes.Length);audioSource.clip = AudioClip.Create("RecordClip", samples.Length, 1, 6000, false);audioSource.clip.SetData(samples, 0);audioSource.Play();}

6.添加按钮监听类型事件

  //添加按钮监听类型private void AddTriggersListener(GameObject obj, EventTriggerType eventID, UnityAction<BaseEventData> action){EventTrigger trigger = obj.GetComponent<EventTrigger>();if (trigger == null){trigger = obj.AddComponent<EventTrigger>();}if (trigger.triggers.Count == 0){trigger.triggers = new List<EventTrigger.Entry>();}UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);EventTrigger.Entry entry = new EventTrigger.Entry();entry.eventID = eventID;entry.callback.AddListener(callback);trigger.triggers.Add(entry);}

对应的ui组件挂靠一下直接运行工程就好了

3.运行结果

具体接下来想实现什么功能就可以自己更改自定义

这篇关于【Unity实战100例】Unity调取移动端的麦克风进行录音并播放传输字节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478696

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结