第五十六章 Unity 音频播放

news2024/10/7 12:28:24

Unity可以导入大多数标准音频文件格式,精通于在3D 空间中播放声音,还可根据需要提供其他效果。虽然播放声音是一件非常简单的事情,但是为了模拟现实直接中的各种声音效果,Unity会提供各种各样的组件来实现。

首先,我们需要了解“多普勒效应”。他是一名奥地物理学家多普勒发现的一种声音现象。当火车从远而近时汽笛声变大,但波长变短,而火车从近而远时汽笛声变小,但波长变长。这是由于发声源(波源)与收听者之间存在着相对运动。在现实中,声源和收听者的位置移动是非常普遍的。

Unity为了模拟“多普勒效应”,就需要模拟“声源”和“收听者”这两个能够移动的角色。很明显,这两个角色在场景中都应该是游戏对象,因为只有游戏对象才可以进行位置移动变化。但是,最终这个效果还是需要通过控件来实现的。Unity要求“声源” 来自附加到游戏对象的音频源 (Audio Source)组件,发出的声音由附加到另一个游戏对象(通常是主摄像机)上的音频监听器 (Audio Listener)组件获取。然后就可以利用两个游戏对象之间的距离和位置的影响,播放声音给最终用户听。此外还使用音频源对象和音频监听器对象的相对速度来模拟多普勒效应以增加真实感。注意,音频源对象可以是多个,但音频监听器只有一个。

此外,周围环境也会影响声音的反射方式,因此洞穴内的声音会产生回声,但相同的声音在露天环境中却不会产生回声。Unity 无法仅根据场景几何体来计算回声,但您可以通过向对象添加音频回声滤波器 (Audio Echo Filter)组件来模拟回声。Unity提供了很多音频滤波器来实现各种各样的效果。如下所示:

1.音频低通滤波器 (Audio Low Pass Filter)

2.音频高通滤波器 (Audio High Pass Filter)

3.音频回声滤波器 (Audio Echo Filter)

4.音频失真滤波器 (Audio Distortion Filter)

5.音频混响滤波器 (Audio Reverb Filter)

6.音频合声滤波器 (Audio Chorus Filter)

接下来,我们使用案例来介绍如何播放声音。unity支持的音乐文件格式有很多,一般背景音乐建议使用.mp3与.ogg,而音效则可以使用.aiff。Unity官方推荐,对于较短的音乐可以使用未经压缩的wav,aiff格式。对于较长的音乐,建议使用压缩的ogg voris, mp3格式。播放声音涉及到的音频源 (Audio Source)组件和音频监听器 (Audio Listener)组件。

我们首先创建一个新的“SampleScene2.unity”场景。接下来,我们就创建一个空游戏对象,菜单栏点击“GameObject”->“Create Empty”来创建。空对象在Scene场景中是看不到的。

一个空游戏对象只有“Transform”组件,我们给这个空物体添加Audio Source组件。

添加Audio Source组件后,我们就可以在Scene场景中看到一个小喇叭的物体。我们再来查看它的Inspector检视面板,如下所示

音频源 (Audio Source) 组件在场景中播放音频剪辑。剪辑的音源可通过音频监听器或者混音器播放。音频源可播放任何类型的音频剪辑,可设置以 2D、3D 或混合模式播放。音频可在扬声器之间扩散,并在 3D 和 2D 之间变换。可通衰减曲线控制传播距离。此外,如果监听器位于一个或多个混响区内,则会将混响应用于音频源。可对每个音频源应用单独的滤波器,以获得更丰富的音频体验。接下来,我们就来介绍这个组件的常用属性。

Audio Clip 参考将要播放的声音剪辑文件。我们可以直接将音频文件拖拽到该选项。

Output默认情况下,剪辑将直接输出到场景中的音频监听器 (Audio Listener)。使用此属性可以更改为将剪辑输出到混音器 (Audio Mixer)。

Mute如果启用此选项,则为静音。默认不开启此项。

Bypass Effects 启用/停用音频源的滤波器效果。默认启用。

Bypass Listener Effects  启用/停用所有监听器。默认启用。

Bypass Reverb Zones 启用/停用所有混响区。默认启用。

Play On Awake 如果启用此选项,声音将在场景启动时开始播放。如果禁用此选项,需要通过脚本使用 Play() 命令启用播放。

Loop 是否循环播放。默认不循环播放,也就是只播放一次。

Priority  从场景中存在的所有音频源中确定此音频源的优先级。(Priority值为0 表示优先级最高。值为256, 表示优先级最低。默认值为 128)。

Volume 声音的大小与音频监听器的距离成正比,以米为世界单位。

Pitch 由于音频剪辑的减速/加速导致的音高变化量。值 1 表示正常播放速度。

Stereo Pan 设置 2D 声音的立体声位置。

Spatial Blend 设置 3D 引擎对音频源的影响程度。

Reverb Zone Mix 设置路由到混响区的输出信号量。

3D Sound Settings 3D声音的设置

Doppler Level 确定将对此音频源应用多普勒效果的程度,0表示不使用。

Spread 在发声空间中将扩散角度设置为 3D 立体声或多声道。

Volume Rolloff 声音衰减的方式。Logarithmic Rolloff    靠近音频源时,声音很大,但离开对象时,声音降低得非常快。

Min Distance  在 MinDistance 内,声音将保持可能的最大响度。在 MinDistance 之外,声音将开始减弱。

Max Distance  声音停止衰减的距离。超过此距离之后,声音将保持与监听器之间距离 MaxDistance 单位时的音量,不再衰减。

接下来,我们将一个音频文件“night.mp3”放入到Asset目录下,音频记录夜晚虫鸣的背景声音。当然,我们还提供了其他的一些声音文件。

然后,我们需要将这个“night.mp3”文件拖拽到Audio Source组件的Audio Clip选项上。

接下来,我们就需要添加音频监听器 (Audio Listener)组件。默认情况下,我们的“Main Camera”主相机游戏对象上面自动会添加该组件。

音频监听器 (Audio Listener) 充当类似于麦克风的设备。它接收来自场景中任何给定音频源的输入,并通过计算机扬声器播放声音。对于大多数应用程序,最有意义的是将监听器附加到主摄像机。音频监听器没有属性。但必须添加音频监听器才能工作。默认情况下,音频监听器将被添加到主摄像机。请注意,每个场景只能有 1 个音频监听器才能正常工作。接下来,我们运行整个工程,查看是否有声音。由于截图无法展示声音,所以我们就不展示了。

备注:AudioSource和 Audio Listener都可以使用play方法播放声音。AudioSource控制的是场景中一个声音文件的播放,而Audio Listener则可以控制场景中所有声音的播放。毕竟在一个场景中,可以存在多个AudioSource组件,但是只有一个Audio Listener组件。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创意无限,场景惊喜:让你的描述变成现实(Skybox Labs)

你是否曾经想象过能够用文字来创造出一个全新的世界?你是否曾经想过能够用一句话来生成一个令人惊叹的360天空盒?如果你的答案是肯定的,那么你一定要试试Skybox Labs,这是一个由Blockade Labs开发的AI-powered解决方案&#xff0c…

最全的免费SSL证书申请方式

在SSL广泛普及的今天,申请一张免费的SSL证书是一件非常容易的事情。这里为大家总结当前阶段(2023年)拥有一张免费SSL证书的方式。首推的方式为来此加密网站,文章后面会有详细的介绍。 下面介绍几种获取免费SSL证书的方式,大家可以根据自己的…

【运维知识进阶篇】集群架构-Nginx常用模块(目录索引+状态监控+访问控制+访问限制)

这篇文章给大家介绍Nginx常用模块,包括Nginx目录索引,Nginx状态监控,Nginx访问控制,Nginx访问限制。熟悉使用模块,才能给Nginx增加色彩。 目录索引模块 Nginx不允许列出整个目录浏览下载,可以用模块自己做…

QT窗体之间值的传递,多种方法实现

QT窗体之间值的传递,多种方法实现 前言[1] QT窗体之间值的传递,多种方法实现1、新建工程2、全局变量extern3、公共成员函数public4、信号与槽singnals5、总结与工程分享主窗口.cpp文件主窗口头文件子窗口.cpp文件子窗口头文件 [2] Qt在子窗口接收父窗口的…

Node.js版本管理工具,我选择n

文件收录: 个人网址:https://linglan01.cn/ Github: https://github.com/CatsAndMice/blog/issues 为什么要管理Node.js版本?这是我们要先明白的点。 假设我电脑Node.js版本为v14.x,日常工作中可能会遇到以下场景&…

c#入门教程(有一定计算机基础的人看)

废话不说,有一定基础的人看,如java等程序员 c#是什么? 开发语言,为什么要学?主流游戏是用这个开发 c#怎么运行? c#微软做的,微软做了个.net framework,c#运行在这个之上。windows自带.net …

8. 100ASK_V853-PRO开发板支持MPP媒体处理平台

0.前言 ​ MPP 系统控制模块,根据芯片特性,完成硬件各个部件的复位、基本初始化工作,同时负责完成 MPP(Media Process Platform 媒体处理平台)系统各个业务模块的初始化、去初始化以及管理 MPP 系统各个业务模块的工作…

python基于LBP+SVM开发构建基于fer2013数据集的人脸表情识别模型是种什么体验,让结果告诉你...

本身LBPSVM是比较经典的技术路线用来做图像识别、目标检测,没有什么特殊的地方 fer2013数据集在我之前的博文中也有详细的实践过,如下: 《fer2013人脸表情数据实践》 系统地基于CNN开发实现 《Python实现将人脸表情数据集fer2013转化为图像…

IP网络电话呼叫转移设置

这里的网络电话呼叫转移设置,我们以IP电话系统用方位的网络电话机为例说明 通话转移 当用户正在与对方通话时,并希望将呼叫转移到其他号码,这里有两种方法来转移呼叫,出席移转和非出席移转。 出席移转 出席移转也被称为“礼貌…

条形码阅读器 CnetSDK Barcode Scanner SDK Crack

条形码阅读器组件SDK CnetSDK Barcode Scanner SDK 为.NET程序员提供了一个免费测试的条形码阅读器软件,称为.NET Barcode Scanner SDK。它在从许多图像文件中读取条形码和识别条形码方面非常有效。这个.NET条形码库支持最流行的线性和2D条形码,如QR码&a…

膨胀阀的结构和工作原理(详细篇)

膨胀阀的工作原理 编辑搜图 膨胀阀也称节流阀,是组成汽车空调制冷系统的主要部件,安装在蒸发器入口处,如图 所示,是汽车空调制冷系统的高压与低压的分界点。其功用是:把来自贮液干燥器的高压液态制冷剂节流减压&#…

第五十七章 Unity 混音器

本章节我们介绍Unity 混音器 (Audio Mixer),它允许我们混合各种音频源,并对音频源进行统一控制或应用各种效果。在Unity中混音器是一种资源文件,可以右键Create创建AudioMixer文件。虽然它是一个文件,但是Unity提供了图形化界面来…

人大李崇轩:我的生成模型修炼之路丨智源大会嘉宾风采

导读 AIGC的飞速发展离不开生成模型、深度学习以及多模态学习等领域研究的不断累积,其中生成模型的原理与算法发展是不可或缺的一部分,如:生成对抗网络 GAN 及其一系列变体、变分自编码器 VAE 及其一系列变体、自回归模型 AR、流模型 FLOW &a…

考虑多能负荷不确定性的区域综合能源系统鲁棒规划(MatlabPython代码)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Interiorai: 室内设计工具平台

【产品介绍】 Interiorai是一个可以让用户从自己的房间照片中生成不同风格的室内设计的在线平台。用户只需上传一张房间的照片,选择想要的设计风格和模式,就可以看到AI生成的室内设计效果,并且可以下载或分享。帮助用户快速找到装修或改造房间…

即时聊天app开发-即时通讯app开发方案分析

如今,即时聊天APP层出不穷,它已经成为人们日常生活中密不可分的社交工具。如今,即时聊天APP不仅是聊天工具,也是企业营销的利器。我们经常可以在聊天主页上看到一些广告。如有必要,用户可以直接点击广告了解详情。即时…

五、云对象存储以及课程分类管理模块

本项目的存储图片和音频文件都存储在腾讯云的服务器中,本章先介绍存储图片的方式。 存储桶文件创建: 存储桶项目存储内容: APPID和密钥管理: APPID和密钥是整个云存储最为重要的验证依据,在配置文件中应用。 现在简要…

超大规模数据库集群保稳系列之一:高可用系统

总第560篇 2023年 第012篇 基于过去多年在大规模数据集群保稳方面的实践经验,我们希望能够跟业界进行一些技术交流,美团技术团队举办了第75期技术沙龙。我们邀请到了美团研究员赵应钢担任出品人,同时请邀请到张洪、王占全、蔺瑞超、沈裕锋等4…

【Linux】进程信号(上)

文章目录 1.信号概念理解信号产生信号保存信号处理 2. 信号的产生证明输入 CTRL C 就是向前台进程发送信号signal 函数内部参数传递的理解对于信号自定义动作的捕捉问题 3.信号产生的方式1.从键盘输入2.使用系统调用向进程发送信号killraiseabort 3.由软件条件产生信号 1.信号概…

轻博客Plume的搭建

什么是 Plume ? Plume 是一个基于 ActivityPub 的联合博客引擎。它是用 Rust 编写的,带有 Rocket 框架,以及 Diesel 与数据库交互。前端使用 Ructe模板、WASM 和SCSS。 反向代理 假设我们实际访问地址为: https://plume.laosu.ml…