首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP判断上传文件类型

PHP判断上传文件类型

作者头像
用户7657330
发布于 2020-08-14 07:18:52
发布于 2020-08-14 07:18:52
2K00
代码可运行
举报
文章被收录于专栏:程序生涯程序生涯
运行总次数:0
代码可运行

导语

游戏多媒体引擎(Game Multimedia Engine,GME)作为游戏语音的PaaS服务,致力于提升游戏语音的质量,简化语音接入的流程,创造更多的语音玩法。GME基于Wwise引擎推出了独有的解决方案,目前是Wwise官方支持的唯一语音合作伙伴,本文将对Wwise + GME方案做简单的介绍,看一看那些被解锁的游戏语音新玩法。

"如果你的团队正在使用Wwise音频组件,一定要使用GME for Wwise这套解决方案,它非常完美地解决了我们在即时语音功能上遇到的所有问题。"

—— from 《香肠派对》项目团队

当你玩吃鸡时,右侧突然出现窸窸窣窣的脚步声,伴随一声枪响在右耳边炸开,身旁的队友瞬间倒地,队友的惊呼中还带着被击中后痛苦的颤音....

当你进入狼人杀房间,映入眼帘的是夜晚的草原篝火背景,玩家围绕着篝火席地而坐,耳机里隐约传来左边玩家的窃窃私语,主持人的讲述里还夹杂着远处的狼嚎,闭眼,睁眼,今晚又有人被毒...

这些游戏里语音与游戏场景完美融合的效果,能为游戏玩家提供身临其境的沉浸式游戏体验。上一篇《来了!GME沉浸式方案助力游戏实现Metaverse的无限可能》文章中,我们提到Metaverse游戏核心在于真实而沉浸的互动体验。

而在实际操作中,游戏语音如何深度融合游戏场景,为玩家最大程度“还原临场感”却面临诸多困难。为了解决这些行业难题,提升游戏语音体验,作为顶级互动音频引擎Wwise唯一官方授权的语音插件,GME和Wwise的研发团队联合推出了独家语音解决方案。

Game Multimedia Engine(GME)游戏多媒体引擎是针对游戏场景定制的一站式语音解决方案,提供了包括多人实时语音、语音消息、语音转文本以及语音内容审核等功能,开发者需要通过API调用接入GME SDK,从而在游戏中实现语音功能。

传统的独立语音SDK方案接入过程是独立于游戏音效设计的,而基于Wwise音频引擎开发的游戏,GME提供了专门的解决方案,通过使用相应的GME语音插件,游戏开发者可以将语音的接入融入到游戏音效的设计过程,Wwise强大的音频处理能力和音频控制能力都可以运用到语音上,在提升语音音质的同时,为游戏音效提供了更加丰富的语音玩法设计空间。其基本流程框架如下:

由上图可以看出,GME的几个插件把本地的待发送语音(麦克风录制的本地玩家语音)和从网络接收到的语音(待本地播放的其它队友语音)全部送到了Wwise的处理管线中,GME语音流被抽象成了Wwise的基本声音源进行处理,正是基于这样的新颖设计,Wwise-GME相比于传统的独立语音SDK具有独有的优势。

语音与游戏音效统一设计

在Wwise工程中,GME语音音频流无缝接入Wwise音频管线,接入语音的过程和Wwise的音效设计过程深度融合,避免了单独接入一套语音SDK可能引起的音频冲突。在游戏程序端,对GME语音发送和接收的操作抽象成一个个Wwise事件的触发,这些操作和Wwise的标准开发流程体验一致,比以前的API调用的接入方式更直接,更形象。

完美解决行业内痛点

对于传统的独立语音SDK方案,语音开麦以后的游戏音效质量下降、音量跳变以及声音发干都曾是行业痛点,开麦后整个游戏的音效音质都进入“电话音质”级别(低采样率的单声道信号),极大的影响了玩家的游戏体验。Wwise-GME有效解决了手游开麦以后音量类型切换导致的游戏音效质量下降的问题,大幅提升了开麦后语音的音质,在畅快聊天的同时仍然可以保持原有音效做到听声辩位。

强大的设计能力,带来无限的玩法创意

Wwise-GME方案给游戏语音玩法带来非常大的设计空间,由于语音流全部送入Wwise总线,可将Wwise上丰富的音效处理和控制运用到语音,并且能定制化处理每一路语音流,从而增加游戏过程中语音的沉浸感和趣味感,让玩家交流“不出戏”。

对于每一名玩家来说,语音聊天主要涉及两条音频流链路,一条是上行链路,即本地麦克风采集自己的说话声,通过服务器分发到远端队友,另一条是下行链路,即从服务器接收所有队友的语音,混音后经过本地的播放设备播放出来。

上行链路

玩家本地的聊天语音流会经过GME采集插件发送给Wwise引擎,基于Wwise提供的丰富的音效处理能力,游戏端可以根据玩家所处的实际环境和需求来对语音流进行处理,比如质地,混响和变声处理等,试想现在玩家的角色是在教堂中,则处理后的带有教堂混响的语音流会通过GME发送插件发送到服务器中,进而发送到远端的玩家。同样,如果游戏设计了变声玩法,经过实时变声算法处理的语音流会发送到远端的玩家。

上行链路处理流程
上行链路处理流程

下行链路

相比上行链路的单路本地语音流,下行链路通常会收到所有队友的N路语音流,这些语音流会通过GME接收插件传给Wwise引擎,同样游戏端可以根据每一路接收语音对应的玩家在游戏中的实际场景,比如相对本地玩家的位置,距离和有无障碍物阻挡等进行对应的音效处理,处理后的数据经过Wwise混音后在本地设备播放。

具体的游戏场景中,比如队友A站在本地玩家的左前方,那么他听到队友A的声音就是在左前方发出来,队友B跳到一个岩石后边,那么他听到队友B的声音就是经过岩石阻挡并折射出来的声音,同时随着队友接近或者远离听者,对应的声音也会被增强或者衰减。

下行链路处理流程
下行链路处理流程

这种基于游戏场景处理过的语音不再像传统独立语音SDK那样只能提供“语音会议”般的游戏体验,而是把语音体验提升到了更高的层次,即与游戏场景融合的沉浸式语音体验。下面这个视频就展示了Wwise-GME方案的一些基本用法,如果用手机观看Demo视频,需要戴耳机观看,因为这里边运用了双耳虚拟声场技术。

视频中你是第一人称视角,对面灰色机器人是其他队友和你通过GME讲话,3D,变声和混响等都运用到语音聊天处理当中,视频中的所有语音都是实时录屏远端玩家发送的语音,而并非后期合成制作。

Wwise-GME方案这种独特的设计使语音作为游戏音效设计的一部分成为可能,这里列出笔者想到的一些可能的语音处理,更多的玩法期待音频设计师的创作。

发送环境声音或伴奏音

GME提供的不单单是发送玩家语音的能力,还具备发送其它音频流到语音服务器的能力。这个能力最显而易见的应用场景就是卡拉OK了。对于游戏来说,试想这样的游戏场景,玩家在游戏中的角色处在雨中或者风中,当玩家和队友通话的时候,沉浸式的体验就需要把雨声或者风声适当的混音到语音当中。当然还有一些其它的应用场景,比如根据玩家在游戏中的进程发送一些声音Emoji增加语音的趣味性。

模拟语音的反射衍射等处理

沉浸式的语音体验一定要把语音的渲染和游戏的实际场景结合起来考虑。本文之前提到的质地、衰减、变声、混响以及3D定位处理只能算是初阶的处理,为了更好的模拟游戏场景中说话人与听者的语音传输路径,Wwise提供的反射、衍射、声笼和阻挡模型同样可以用来处理队友之间的语音,这些处理的效果正是元宇宙(Metaverse)对语音的终极体验。

人物性格和状态处理

为了增加游戏语音的趣味性,根据玩家在游戏场景中的一些性格和状态变化也可对其语音做一些特定设计的DSP处理。比如在游戏中的玩家被对手击打掉血,那么语音上做一些失真,延迟或者颤音处理表明玩家的痛苦状态,再比如玩家PK掉了对手或者拾到了宝贝,就对语音做一些高通滤波或者语音加速处理,从而体现玩家的兴奋程度等等。

侧链的处理

侧链是混音制作过程中必不可少的处理手段,其基本原理就是用一路信号控制另一路信号。游戏中加入语音功能是为增加游戏的社交属性,语音必须要清晰地传递到听者,当有玩家说话时候,游戏声音混音的焦点就应该落到语音上而不是游戏本身的音效,这就类似收音机电台的做法,DJ要讲话时会让播放的音乐音量降低些,等讲完了话就把音量恢复。

Wwise-GME方案把语音流全部送入了Wwise总线使这种处理在游戏场景下也成为可能,比如在接收的语音处设置一个Wwise Meter,然后根据这个Meter的值动态的控制其它音效的音量大小。

下面这段视频是Wwise的开发商Audiokinetic联合GME制作的Demo视频,其中展示了比如声音反射,阻挡和侧链对GME语音的处理。视频中展示了第一人称第三人称和俯视图视角,绿色机器人是队友和你通过GME讲话,随着机器人所处的位置和环境变化,对应的处理就会施加到语音上(处理细节字幕有描述),这样处理过的语音聊天会让人有身临其境的感觉。同样,视频中的所有语音都是实时录屏远端玩家发送的语音,而并非后期合成制作。

游戏语音解决方案GME和音频引擎中间件Wwise,两个产品各自可以从不同的角度提升游戏的品质,GME增强了游戏的社交属性,从而增加游戏对玩家的粘性。

Wwise音频引擎大幅提高了游戏中互动音效的开发效率,并且提高了游戏中的声音体验。当游戏语音解决方案GME遇到音频引擎Wwise时,GME填补了Wwise生态在语音方面的空白,两者在一起必然会产生出一加一大于二的效果,相信它们的融合方案Wwise-GME会成为游戏音效设计师的强有力工具,为游戏中创造最好最真实最富有创意的声音。

目前,Wwise+GME语音插件已上架Wwise官网并对全行业开放。

01

Wwise+GME方案后续还有操作详解和创意征集活动,

福利多多,大佬云集,欢迎持续关注我们!

02

对Wwise+GME方案感兴趣,

可关注公众号回复「联合方案」加入交流群

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python干货——元组
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的! 👋大家好!我是你们的老朋友Java学术趴。我今天又来喽!!今天继续给大家分享Python语言干货知识。 第七章 元组 7.1 元组的概念 元组是
Java学术趴
2022/06/01
6860
python干货——元组
Python干货——内置函数(2)
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 👋大家好!我是你们的老朋友Java学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。 所谓内置函数就是可以直接拿过来使用的函数,Python已经帮我们内
Java学术趴
2022/06/04
1.3K0
Python干货——内置函数(2)
Python——列表
列表是python中最基础,最强大的数据结构之一。python的列表可以容纳任何东西,其中的元素可以没有任何关系。python的列表就像一个可以容纳万物的容器。但是需要注意,这个容器中的数据是有序的。 在Python 中,用方括号([])表示列表,并用逗号分隔其中的元素。下面是一个例子:
zy010101
2021/03/11
2.3K0
Python——列表
Python干货——内置函数
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 👋大家好!我是你们的老朋友Java学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。 所谓内置函数就是可以直接拿过来使用的函数,Python已经帮我们内
Java学术趴
2022/06/04
8980
Python干货——内置函数
python干货——字典
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的! 👋大家好!我是你们的老朋友Java学术趴。我今天又来喽!!今天继续给大家分享Python语
Java学术趴
2022/06/02
1K0
python干货——字典
列表常用操作
'''列表的方法 l.index() l.count() l.copy() l.insert() l.append() l.extend() l.pop() l.remove() l.clear() l.sort() l.reverse() ''' l = [1, 2, 'h', [3, 4, 'H']] print(len(l)) l1 = l.index('h', 2
汪凡
2018/05/29
6410
Python 基础一 (列表)
Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和 xrange 对象。最常见的是列表和元组。
数据STUDIO
2021/06/24
7950
Python内置容器(1)——列表,元组
---------------------------------------------------------------------------
py3study
2020/01/08
5160
干货!Python常用数据类型的基本操作(长文系列第一篇)
Python基础系列会将基础内容大致分为四到五个板块,每篇文章着重讲一方面,知识不会很难,主要是以小例子的形式解读,如果你已经入门Python,希望可以帮你温习一下;如果你想入门Python,希望可以帮你越过这个门槛。
奶糖猫
2020/07/31
7810
干货!Python常用数据类型的基本操作(长文系列第一篇)
Python学习杂记_5_列表常用操作
列表时用方括号括起来的一组元素值,是可变变量,可通过下表取值,也可以通过下表来修改值,列表中的元素是有序的,可以是不同的基本数据类型,如:
呆呆
2021/05/25
2940
Python中列表list常见操作
    切片主要就是针对获取列表中部分或者单个元素的方法,通过下标访问列表中的元素,下标从0开始计数
py3study
2020/01/07
1.8K0
Python学习笔记之list列表使用方法
列表是最基本的数据结构。列表中的元素被分配一个数字来索引。第一个元素索引为0,第二个元素索引为1,依次类推。 Python有六种内置的序列类型,但最常见的是列表和元组。
青山师
2023/05/05
2510
Python干货——se集合
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的! 👋大家好!我是你们的老朋友Java学术趴。任何语言中都存在一些内置的数据结构,比如:集合、
Java学术趴
2022/06/05
5770
Python干货——se集合
python整型-浮点型-字符串-列表及内置函数(上)
转换字符串的大小写(只影响字母) lower  upper  capitalize  swapcase  title
suwanbin
2019/09/26
1.9K0
python整型-浮点型-字符串-列表及内置函数(上)
day06-列表
列表中的每个元素均会分配一个数字,用以记录位置,我们称之为 索引 (Indexes),索引值从 0 开始,依次往后计数。
似小陈吖
2023/11/01
2690
python干货——函数
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 👋大家好!我是你们的老朋友Java学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。 9.1 函数的基础 函数就是一段含有特殊功能的代码块 使用函数完成
Java学术趴
2022/06/03
7510
python干货——函数
Python列表
可以使用列表推导式和条件语句来移除列表中所有值为"itheima"的元素。以下是示例代码:
kwan的解忧杂货铺
2024/07/31
4230
Python列表
Python列表之班荆道故
列表是python的基础数据类型之一 ,它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型: list列表的定义:
py3study
2020/01/19
4120
Python列表(list)的相关操作及方法
注意:在列表中元素的数据类型可以不同(灵活性)表中的元素类型可以是任意python中的基本数据类型或者是自定义的数据类型
用户7886150
2021/01/26
5.5K0
Python 基础
['我', '列表', '是', '这', '我', '列表', '是', '这']
iOSDevLog
2019/05/24
4890
相关推荐
python干货——元组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档