一款 NOW 直播音频采集质量的测试工具

作者:陈兴

导语

针对主播反馈的NOW音质变差问题,在分析原因后,设计了一套测试方案并实现了自动化。对主播的采集音量,主播采集频率范围,两项重要参数进行量化监控。本文章对问题背景以及实现原理进行分享。

音质测试工具介绍

1. 这是什么工具:

界面:

工具支持一键测试,自动执行测试,测试结束后自动分析,并绘制分析结果。

测试项:

1) 用于测试直播观众端,收听到的音量大小,量化并直观显示音量大小; 2) 用于测试直播主播端,采集声音的频率范围,量化并直观显示截止频率;

结果显示:

上半部分为音量幅值波形图,可见音量最大值以及平均值;

下半部分为频谱分析图,可见最大幅值(dB),以及截止频率值。

2. 解决什么问题:

1、问题背景:

NOW直播iOS 1.12发布后,有主播投诉音质变差。

对问题进行重现后,确认问题原因为两方面:麦克风采集音量变小、采集频率范围变小。

那么为什么我们的测试人员在功能测试过程中没有发现呢?

主要是下面几个原因:1)音量大还是小每个人感受都不一样,判断偏主观;2)办公室太嘈杂有噪音干扰;3)测试时没敢大声说话,所以声音小也是理所当然。

2、解决方案:

那么接下来的问题就是,应该用什么样的测试方法,对音质进行测试,避免这类问题再犯。

方案1:

从测试人员未发现问题的原因来看,我们可以这么处理:

1) 邀请多人对音量大小进行体验,并对比先前版本; 2) 测试时,寻找安静环境进行测试; 3) 找个安静又没人的地方,敞开嗓子放声测试;

这个方案,显然操作成本太高,明显不是一个技术人员应该用的最优方案。

方案2:

音视频实验室对已有成熟的音质打分方案,可以拿过来用。

测试原理大致如下:

1) PC端输出标准测试音源; 2) 通过3.5mm音频线,直连主播端手机麦克风插孔,输入测试音频; 3) 通过3.5mm音频线,观众端将耳机孔直连PC,将观众端收到的音频输出给PC; 4) PC端对比音频源与接收音频,使用PESQ评判差异情况,进行打分。

这个方案,要得到准确的音质打分值,需事先调节输出音量到某合适值,且打分值和要测试的音量大小并无直接关系;此外打分值也无法体现出问题的采集频宽范围。故该方案不适用我们的问题场景。

方案3(实际解决方案):

于是乎只能自己撸起袖子加油干,设计了如下测试方案。

1) 制作标准测试音频,音频内容为1khz的正弦波、0~24kHz的扫频正弦波,时长5s即可; 2) PC端外接扬声器播放测试音频; 3) 主播端通过外置麦克风采集播放的测试音频; 4) 通过3.5mm音频线,观众端将耳机孔直连PC,将观众端收到的音频输出给PC; 5) PC对接收到的音频信号进行分析:音频波形振幅(获取音量大小),音频频谱(获取采集频宽)。

这样,方案3就能够量化出主播采集音量的大小、采集频率范围,正是我们想要测试方案。

3. 如何使用工具:

测试拓扑搭建:

1) 测试PC为笔记本,将测试音频通过音箱播放(音箱播放音量固定为50%); 2) 主播端通过自带麦克风进行音频采集(音箱与采集手机位置固定为50cm); 3) 观众端耳机输出口,使用3.5mm音频线直连到笔记本麦克风输入口;

文件夹说明:

5s_1khz.wav、5s_24khz.wav为测试音频源,AudioTest.exe为测试程序。

软件界面说明:

打开AudioTest.exe后,测试仅需一键点击“start”按钮,即可启动测试。

测试约15s结束,测试完成后生成测试结果文件,并显示结果。

测试结果说明:

1) 上图为根据接收到的音频,绘制的波形图:

a.横轴为时间轴,纵轴为对应时刻音频振幅; b.音频波形的最大振幅参见max volume,平均振幅参见avg volume; c.振幅越高,对应音量越大。

2) 下图为接收到的音频,频谱分析结果:

a.横轴为频率值,纵轴为该频点上对应的幅值(已转化为dB); b.频域上,截止频率参见图示绿线的截止处频率值,最大幅值参见max freq amplitude; c.频域上的幅值越高,对应音量越大,截止频率越高,高频成分丢失越少音质越好。

4. 工具自动化原理

方案3测试过程中,如果手动操作的话,需要干下面这些事情:

  1. 制作测试音频源
  2. 设定PC播放音量
  3. PC端开始播放后,需要同步启动录音
  4. 将录音结果文件,导入到CoolEdit,查看最大振幅(平均振幅没法看)
  5. 使用CoolEdit选取分析的音频段,进行FFT变换分析频谱,查看采集的频宽

以上这些环节,CoolEdit需要一定学习成本,即便学习后,操作起来也比较费时。

所以打算将以上环节打包起来,做成一个可以“一键测试”的小工具。

各个关键环节,自动化实现方案如下:

1) 制作测试音频源

使用CoolEdit生成测试音频。

生成1khz正弦波,设定时长为5s,用于音量大小的测试;

生成0~24khz的扫频正弦波,设定时长5s,用于截止频率的测试;

2) 设定PC播放音量

可通过python中的ctypes模块,调用系统音量设置dll文件,设置PC的播放音量。

3) PC端开始播放后,需要同步启动录音

声音的播放,可以通过python的wave模块完成,通过设定对应的音频参数后,将音频源文件写入声卡buffer中即可。

声音的录制,可以通过pyaudio模块,设定对应的音频编码参数后,读取声卡中音频数据写入到音频结果文件中即可。

使用Threading模块,开两个线程同时处理,播放的同时同步在录音。

4) 将录音结果文件,导入到CoolEdit,查看最大振幅

查看最大振幅以及平均值,可以通过numpy模块,导入音频输入,方便的计算出来。

5) 使用CoolEdit选取分析的音频段,进行FFT变换分析频谱,查看采集的频宽

同样的,numpy同样支持做FFT的计算。

截取对应的音频段进行FFT运算,将结果去除共轭,并转化单位为dB后,即可用于绘制结果。

6) 结果绘图

使用matplotlib进行处理即可。

7) 一键测试

界面只需要一个按钮,使用tk进行界面设计,一键完成测试。

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序创造美好世界

“腾讯云 · 开发者实验室“体验

偶然间从腾讯云 · 云+社区的实验室标签点进去,居然就发现了新大陆!

40212
来自专栏Jerry的SAP技术分享

使用Recast.AI创建具有人工智能的聊天机器人

很多SAP顾问朋友们对于人工智能/机器学习这个话题非常感兴趣,也在不断思考如何将这种新技术和SAP传统产品相结合。Jerry之前的微信公众号文章C4C和微信集成...

825
来自专栏jessetalks

这应该是目前最快速有效的ASP.NET Core学习方式(视频)

ASP.NET Core都2.0了,它的普及还是不太好。作为一个.NET的老司机,我觉得.NET Core给我带来了很多的乐趣。Linux, Docker, C...

893
来自专栏FreeBuf

看我如何逆向智能手环控制无人机

一年前,我买了一个智能手环,型号为SONY SmartBand SWR10。就像大部分智能手环一样,它对我没什么用一直放在抽屉里。 背景 突然有一天我有了个很好...

19310
来自专栏iOSDevLog

记一次失败的小程序参赛经历gyp WARN EACCES user “root” does not have permission to access the dev dir

44010
来自专栏互联网杂技

前端自动化测试探索

背景 测试是完善的研发体系中不可或缺的一环。前端同样需要测试,你的css改动可能导致页面错位、js改动可能导致功能不正常。由于前端偏向GUI软件的特殊性,尽管测...

34210
来自专栏企鹅号快讯

微信跳一跳可以用 Python 刷分;macOS 再曝重大安全漏洞,或许已存在 15 年

转自:开源中国、solidot、cnBeta、腾讯科技等 ? 如果你每次都能挑到各自的正中间的话,可以 + 2 分,如果连着跳到中间会 + 4、+6、+8、+1...

19510
来自专栏人人都是极客

如何建立您的第一个机器人

如果您是Raspberry Pi的初学者,并且正在寻找一个简单的硬件项目,那么不就对了。本教程将向您展示开发一种基于python的机器人,避免障碍物和自由导航。...

34215
来自专栏FreeBuf

怎么用Python爬虫煎蛋妹纸海量图片?

我们的目标是用爬虫来干一件略污事情。 最近听说煎蛋上有好多可爱的妹子,而且爬虫从妹子图抓起练手最好,毕竟动力大嘛。而且现在网络上的妹子很黄很暴力,一下接受太多容...

1678
来自专栏Data Analysis & Viz

图表太丑怎么破,ECharts神器带你飞!

在本专栏或文集中,我曾多次使用ECharts绘制图表、进行可视化,也渐渐积累了30多个实例,本文对此前用过的所有图表和代码进行整理并分享,以给想绘制精美图表的人...

1612

扫码关注云+社区