Unity Microphone.Start() 滞后,如何摆脱它?

     2023-03-14     86

关键词:

【中文标题】Unity Microphone.Start() 滞后,如何摆脱它?【英文标题】:Unity Microphone.Start() lag, how to get rid of it? 【发布时间】:2021-12-29 12:20:38 【问题描述】:

使用 unity 2020.3 和 XR 插件(目前只有 oculus,但我希望将迁移到 openxr)并在按下辅助按钮时尝试启动麦克风。它可以工作,但启动麦克风会导致延迟。协程无济于事,我尝试了线程来停止延迟,但随后无法对音频剪辑做任何事情。多年来,这个问题已经被问过几次,但还没有答案。代码如下:

 void Update()

    foreach(var d in devices)
        if (d.TryGetFeatureValue(CommonUsages.secondaryButton, out isPressed))
            if (isPressed && !wasTalking)
                 
                    wasTalking = true;
                    asource.PlayOneShot(walkietalkie);
                    //start_recording = new Thread(startRecording);
                    //start_recording.Start();
                    startRecording();  
                
            else if (wasTalking && !isPressed)
                finishRecording();
                wasTalking = false;
            
        

private void startRecording()
    
    recording = Microphone.Start(null, false, 30, freq);
    startRecordingTime = Time.time;
    yield return null;

编辑:我已经删除了无用的协程。为什么我的问题是 -1?

【问题讨论】:

仅供参考,您的协程实际上并没有做任何事情..它完全在一帧内执行;)..我也很确定你不能在线程中执行此异步/大多数 Unity API 只能在主线程上调用 我知道 :),只是我尝试过的一长串事情,因为我在 posibilites 中报废了桶底 【参考方案1】:

我认为缓解口吃的主要方法是将这项工作转移到另一个线程,这对于 Unity 来说是出了名的困难。

对此的解决方案可能是使用或调整另一种录制音频的方法,例如NAudio。

【讨论】:

我正在努力使这个项目尽可能精简。我正在考虑使用 30 秒循环开始录制。然后获取用户何时按下按钮以及何时松开。 30秒以内应该没问题 @jason 想一想你的问题,卡顿很可能来自大量垃圾收集,所以你认为你可以禁用自动垃圾收集并编写自己的脚本来管理它吗?跨度> hmm,我不认为这是垃圾收集,因为无论游戏运行多长时间,当我启动麦克风时都会导致卡顿。也许问题在于在内存中创建空间,而不是访问它。 我的意思是启动麦克风会导致产生大量垃圾。值得一试。

unity学习笔记:unity介绍

一、Unity是什么?1、Unity发音[ˈjuːnəti]2、俗称有U3D,Unity3D、unity3、Unity开发商是美国的Unity公司,成立于2004年,位于美国旧金山。4、unity是一款创作、开发工具,支持二维、三维、AR、VR、MR的开发。二、Unity... 查看详情

unity和unity3d的区别

nity就是unity3d,是一个游戏引擎,可以开发windowsMaclinux安卓和ios以及xbox下的游戏。Unity3.x代表从Unity3.0到Unity3.9所有的unity3D版本,由于Unity4.0有较大的更新,Unity3.x版本的内容都变化不大,所以此书作者才会专门出这本讲3.x版本的... 查看详情

unity学习路线

【第一阶段】01Unity3D基础操作02C#语言基础03PS图像简单处理04Unity3D界面UI(UGUI或NGUI)05Unity3D动画系统(Mecanim和DOtween)06Unity3D图形数学(点乘、欧拉角、四元数等)07Unity3D梳理代码(常见的类和方法,对象和结构API梳理)08Unity3D... 查看详情

在mac上打开多个unity实例

aliaskoa_unity="open-n/Applications/Unity5.2.2/Unity.app"aliasrob_unity="open-n/Applications/Unity2017.4.3/Unity.app"aliasngs_unity="open-n/Applications/Unity/Unity.app" 查看详情

unity3d资源文件③(unity资源包简介|导出unity资源包|导出资源包的包含依赖选项|导入unity资源包|unity资源商店)

文章目录一、Unity资源包简介二、导出Unity资源包1、正常导出Unity资源包2、导出资源包的包含依赖选项三、导入Unity资源包四、Unity资源商店一、Unity资源包简介将Project文件窗口中的Assets资源进行打包,就会得到一个资源包UnityPackag... 查看详情

unity平台的预处理

在开发中,特别是unity的跨平台中,我们常常会在各个平台游走,如安卓版,苹果版,PC版......。在此不同的平台上,有可能我们须要做不同的操作。然而我们就能够用unity的自带的平台宏定义方式来做平台的推断。Unity帮我们定... 查看详情

unity:vs没有unity的智能提示

参考技术A环境:Unity2019.4+VS2019问题:VS打开C#脚本不会智能提示Unity的成员解决方案: 查看详情

unity依赖注入

关于Ioc的框架有很多,比如astleWindsor、Unity、Spring.NET、StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引用Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll,下面我们就一步一步的学习... 查看详情

unity怎么保存unity保存的教程

参考技术A1、Ctrl+S进行保存,也可以点击Unity左上角的File中的SaveScenes进行保存,建议创建一个Scenes的目录,将场景放在此目录中方便进行管理。2、unity导入模型方法:unity支持直接拖放的,把需要导入的模型直接拖拽进去即可。U... 查看详情

unity和unity3d的区别

参考技术A额unity3d就是这个软件的名字比如windows系统unity3.x是指unity3d版本3系列内的所有的版本,比如windowsxpxp也分sp1sp3等等unity3d4.x就是说unity3d的第4版本.你买的这本书就是大概的可以进行unity3d版本3的教程包括3.03.13.33.5的unity3d... 查看详情

蓝鸥unity开发基础三课时5unity组件开发

【蓝鸥Unity开发基础三】课时5Unity组件开发推荐视频讲师博客:http://11165165.blog.51cto.com/Unity组件开发本节课我们来学习Unity组合,首先需要先了解一下Unity的工程和应用程序的关系:一、Unity的工程和应用程序Assets里面放的是项目... 查看详情

如何让 Unity 插件支持旧版本的 Unity?

】如何让Unity插件支持旧版本的Unity?【英文标题】:HowtomakeaUnitypluginsupportoldversionsofUnity?【发布时间】:2019-11-1509:33:45【问题描述】:我正在为Unity开发一个插件。比如说,在我的机器上我安装了最新版本的Unity(现在是2019.1.8)... 查看详情

unity各版本差异

Unity各版本差异version unity 5.x 4.x 2017 差异 特点 首先放出unity的下载地址,然后再慢慢分析各个版本。再者unity可以多个版本共存,只要不放在同一目录下。https://unity3d.com/cn/get-unity/download/archive之前unity... 查看详情

在 Unity 中,Unity 如何神奇地调用所有“接口”?

】在Unity中,Unity如何神奇地调用所有“接口”?【英文标题】:InUnity,howdoesUnitymagicallycallall"Interfaces"?【发布时间】:2016-03-2718:34:52【问题描述】:Unity有一个“接口”:IPointerDownHandler(doco)您只需实现OnPointerDown...publicclass... 查看详情

unity在线激活

在线激活在线激活是最简单和最快速的获得并运行Unity的方法。下面是一步一步怎么在线激活Unity的指南。下载并安装Unity编辑器,最新的版本可以在这里下载http://unity3d.com/unity/download/从OSX上的应用程序文件夹或Windows上的开始菜... 查看详情

unity与安卓⭐四unity报错答疑合集

文章目录 查看详情

[unity学习]unity入门学习及第一个游戏(代码片段)

[Unity学习]Unity入门学习及第一个游戏跟着教程做的一个小游戏,基本上说就算我这样的零基础,两个小时就能实现。主要就是熟悉一下C#和Unity,做一个能跑的东西。简单的Demo如下:Unity学习记录01-DeliveryDriverUnity... 查看详情

unity2018的注册机谁有?破解教程有吗?

unitypro2018mac版破解失败了怎么办Unity Pro 2018 for mac是游戏开发必备的软件之一,Unity mac 破解版主要用于创建2D和3D跨平台游戏,比如三维视频游戏、实时三维动画、建筑可视化等类型。Unity mac 破解教... 查看详情