一款 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 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

基于Python-ChatterBot搭建不同adapter的聊天机器人(使用NB进行场景分类)

chatterbot是一款python接口的,基于一系列规则和机器学习算法完成的聊天机器人。具有结构清晰,可扩展性好,简单实用的特点。本文通过chatterbo...

4599
来自专栏杨熹的专栏

Python很强大

今天查了很多资料,梳理一下Python的知识面。 ? Python 的语法非常简洁,写起来就像写英语一样,不仅简单而且可以高效地实现面向对象编程。与 C/C++...

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

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

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

1035
来自专栏AI科技评论

干货 | 如何配置一台适用于深度学习的工作站?

本文来源于王璋在知乎问题【如何配置一台适用于深度学习的工作站?】下的回答,AI科技评论获其授权转载。 问题详情 如何配置一台适用于深度学习的工作站? 刚买两块T...

50414
来自专栏张善友的专栏

Windows Phone 7 实战第二天 二维码QRcode

越来越多的收据具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描功能,手机具备条码扫描功能,可以优化购物流程,快速存储电子名片(二维码)等。 QR 码是...

22410
来自专栏诸葛青云的专栏

在微信好友信息抓取这一块,这才是最好的python分析技巧!

早些日子有人问我我的微信里面有一共多少朋友,我就随后拉倒了通讯录最下面就找到了微信一共有多少位好友。然后他又问我,这里面你认识多少人?

2344
来自专栏linux驱动个人学习

SMBus与I2C的差别

932
来自专栏吴伟祥

遵循面向对象设计原则,设计出高内聚低耦合可扩展模块

所谓易,“变易”,“简易”,“不易”,就是要告诉我们如何从变化中 抽出 不变的 —— 选择一个正确的抽象视角。七大基本原则介绍完毕,很空洞,需要联系代码仔细体会...

703
来自专栏大数据文摘

Twitter新政:变革140字推文限定背后,Twitter有何新目标?

1256
来自专栏KK的小酒馆

开发Android太阳能手电筒

作为一个世上有名的发明家,发明些对普通人类非常有用的日常用品,也是一个科学家的职责。

664

扫码关注云+社区