【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

相关文章

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语