我们在测试过程中经常遇到各种各样的音频问题,比如起跳和落地声音没有了、冲刺脚步声缺一只脚、武器声音不停、VO忽大忽小等。音频作为游戏的一个重要组成部分,在测试时却比较容易被忽视或无法充分测试。本文探索了针对音频的自动化测试,可以帮助我们快速发现音频中的一些问题。
作为一个FPS游戏玩家,一般会有三种情况让我急得想骂人:
其一、卡了!
其二、挂!
其三、怎么没声啊!
前两种暂且不在本文的讨论范围内,第三种情况一旦出现,对游戏的体验会产生极大的负面影响。下面列举几个最近的音频相关bug。
1.
APEX音频丢失
脚步声远近有问题,队友脚步忽大忽小,枪声、技能音效丢失等各种乱七八糟的问题。
2.
守望先锋响度异常
3.
边境音频错误
播放了错误的音频和音效残留问题。
4.
R6S音频丢失
游戏内声音直接没了,基本属于是可以摘了耳机自由自在地玩了。
FPS游戏中,信息收集就像一个自行车,前轮是画面,后轮是声音,缺了一个直接就成了独轮车了。毕竟,能够听到逼真的枪声、爆炸声和其他环境声音,是游戏体验的重要组成部分之一。但是,如果游戏中出现了缺失、重复或低质量的音频,那么玩家将很快失去兴趣,甚至可能会怀疑游戏的质量和制作水平。
我们在测试的时候也经常遇到过各种各样的音频问题,比如起跳和落地声音没有了、冲刺脚步声缺一只脚、武器声音不停、VO忽大忽小等。一般来说这种问题都会有相对应的测试用例,测试的时候戴上耳机注意听一下基本就能发现绝大多数的问题。但是相对于功能表现来说,音频是很容易被忽视的一个点,有的时候可能刚好没带耳机,或者在关注一些表现的时候,声音上的问题就被错过了。因此,我们可以把音频也尝试加入自动化检查流程,让一些音频问题在上班之前就开始检查。
我们的可以在日常的自动化中附加一个音频自动化测试的流程。
在项目组中,我们在日常自动化测试的脚本中插入录制指令函数,在某些状态下录制我们的音频文件;
在所有自动化测试脚本都结束之后,统一按照文件名来进行相似度分析(我们选取的base可以通过版本控制来管理,每日录制的就无所谓了)。
分析结束后结果会附在自动化报告中,QA在看自动化报告的时候需要重点关注相似度数据异常的音频片段和其对应的状态。目前项目组这边采纳了八种参数,其中满足两种情况的一种我们就认为这个音频是正常的:
1.所有数据在85以上;
2.小于85以下数据不超过2项且存在95以上的数据;
我们以检查某一把枪的枪声,比如AK47为例,来介绍一下流程中步骤的具体操作。
1.
录制音频
首先,我们要先做到能够正确地录制AK47在游戏内的开火声音,并且是能够在自动化脚本中发起录制音频的请求。
最开始录制使用的方法是利用windows自带的立体声混响搭建声卡回环并使用python的Soundcard库进行录制,但是实际录制出来的音质确实垃圾,基本属于是用不了的声音文件。
从我们的需求来说,录制这块不一定非得自己去实现,用那些现成的命令行工具也可以满足我们的需求。于是我又去找了一些支持命令行调用的录制工具。最后使用了fmedia这个工具搭配VBCable虚拟声卡来实现调用命令行实现游戏内录的方法。
MFCC是一种用于语音处理的技术,它可以将语音波形转换为数字特征,就像我们可以用字母和数字来描述一段话一样。这些数字特征可以用于许多语音相关的任务,例如语音识别、说话人识别等。MFCC的方法是通过模拟人耳对声音的感知方式,将声音信号在频域上进行分析,并提取出一些关键的频率特征。这些特征可以用来表示语音信号的语音学特征,从而提高语音处理的效果。
短时能量是一种音频特征,用于描述短时间内音频信号的强度或能量大小。通俗地讲,就是用来衡量音频中瞬间的音量大小。它通常通过将音频信号分成许多小块(称为帧),并计算每个帧的能量来计算。在音频处理和分析中,短时能量是一种常用的特征,可用于声音检测、语音识别、音频压缩等应用。
(3)频率
频率指的是某个事件或现象在一定时间内重复发生的次数,通常用赫兹(Hz)来表示。可以理解为,频率就是一个东西震动或者变化的速度快慢,比如声音的高低音调、电信号的频率等。我们可以通过测量事件在单位时间内发生的次数,来确定其频率大小。
(4)时频分析
时频分析是一种用来描述信号在时间和频率上变化的方法。简单来说,它可以告诉我们一个信号在不同时间和不同频率上的强弱程度或者变化情况。比如说,当我们听到一首歌曲时,时频分析可以帮助我们理解音频中音乐元素的变化,比节奏、旋律和音调等。
当然以上知识都需要回去复习一些数学基础知识,尤其是这个傅里叶变换。
看到上面的一些东西,你可能会就觉得:“哎呀这么多数学的东西,死去的回忆开始攻击我了”。先别急,我们实际在开发过程中并不需要去写这么多计算式,python的很多科学计算库都已经替我们封装好了,直接用现成的轮子就好了。
下面登场的是音频分析超好用的轮子——librosa。
librosa是一个基于Python的音频和音乐信号处理库,它提供了许多常用的音频特征提取方法、音频分析工具和音频可视化工具。librosa旨在为音乐信息检索、音频信号处理、音乐分类、声音分析等领域的研究人员和开发人员提供一个易于使用的工具。
librosa的主要功能包括:
音频文件读取和写入:librosa可以读取和写入多种音频文件格式,如WAV、MP3、FLAC等。
特征提取:librosa提供了许多常用的音频特征提取方法,如MFCC、Mel频率谱、色度图、节拍跟踪等。
音频分析:librosa提供了许多音频分析工具,如节拍跟踪、音高估计、音频源分离等。
可视化工具:librosa提供了许多音频可视化工具,如波形显示、频谱显示、色度图显示等。
具体API自己查看手册就好,有了这个库我们开发调试就变得又快又方便了。
3.
相似度度量
上个部分我们了解了常用的几个特征值,使用我们的librosa或者其他库就可以取到录制下来的音频数据的特征值了。在有了特征值之后,就可以简单地对两个特征值进行比较了。
(1)余弦距离
余弦距离是一种用来比较两个向量之间相似度的方法,其值越小意味着两个向量越相似。余弦距离是通过计算两个向量之间的夹角余弦值来衡量它们之间的相似度。具体来说,余弦距离等于两个向量之间的夹角余弦值的余弦值。
余弦距离的取值范围是0到1之间。当两个向量完全相同时,余弦距离为0;当两个向量完全不同时,余弦距离为1。余弦距离越小,表示两个向量之间的相似度越高。
(2)欧几里得距离
欧几里得距离是一种用来计算两个向量之间的距离的方法,它也被称为直线距离。在二维平面上,欧几里得距离就是两个点之间的直线距离。在三维空间中,欧几里得距离就是两个点之间的空间距离。
(3)互相关函数
互相关函数是一种用于衡量两个信号相似性的方法。互相关函数可以接受两个信号作为输入,并计算它们之间的相似性值。可以通过设置对齐方式来控制信号的对齐方式,常用的对齐方式包括完全对齐、仅计算重叠部分和保持信号长度等。
(4)差分函数
差分函数可以用来计算序列中相邻元素之间的差值,它可以接受一个序列作为输入,并返回一个新的序列,其中每个元素表示原始序列中相邻元素的差值。
当然了,这部分虽然也涉及了很多的数学知识,但是仍旧不用为计算的问题头疼。sklearn、scipy这些科学计算库已经封装好我们需要的很多函数了,直接调用就能解决我们的需求了。
了解了上述知识,我们就可以依照这个流程来进行开发调试了。
FPS游戏中,音频既是游戏的重要组成部分,又是游戏体验的重要因素之一。因此,保证游戏中音频的质量和准确性至关重要。
在测试的过程中,音频自动化检查可以帮助我们快速发现音频中的问题,如缺失的音频、不匹配的音频等。同时,音频自动化检查还可以避免一些人为错误和疏漏,提高游戏的整体质量。虽然自动化检查可以帮助我们发现一些音频上的问题,但它并不能完全替代人耳去听。因此,在实际测试工作中仍然要注意音频相关的问题,以确保音频的质量和准确性。
项目组内的声音自动化还在起步阶段,很多东西都是处于待验证的状态。但是作为一个玩家来说,我相信这套系统能尽可能地避免一些音频的问题。
推荐阅读
都看到这里了,点个赞再走吧~