你好!这里是风筝的博客,
欢迎和我一起交流。
测试音频延时的话,一般使用WALT来测试是最为准确的,他是借助了外部硬件来捕获音频信号,某宝上有卖:
就是有丢丢小贵,本打工人还是想想白嫖的法子…
谷歌有cts测试工具:CtsVerifier.apk,专门做兼容性测试的,其中里面有关于audio的测试。
Cts工具下载链接:https://source.android.com/docs/compatibility/cts/downloads?hl=zh-cn
不过CtsVerifier.apk不是专门的audio的工具,最近发现一个工具挺好用的,专门测试audio的。
在google商店可以下载:OboeTster。
Oboe是一个C ++库,可以轻松在Android上构建高性能音频应用程序。它主要是为了允许开发人员针对简化的API,该API跨多个API级别回到API级别16(Jelly Bean)
下载地址:https://apkpure.com/tw/oboetester/com.mobileer.oboetester/download
打开APK,主要有几个测试项可用:
- TEST OUTPUT:测试播放
- TEST INPUT:测试录音
- TAP TO TONE Latency:测试播放延时
- ROUND TRIP Latency:测试播放+录音往返延时
- ECHO INPUT TO OUTPUT:回音测试
- RECORD AND PLAY:录音然后播放
- GLITCH TEST:故障测试
- AUTO GLITCH TEST:自动故障测试
- TEST DISCONNECT:断开测试?
- DEVICE REPORT:设备信息
- DATA PATHS:数据通路
- EXTRAS TEST:额外的测试
每个TEST项都有很详细的测试数据可以查看。
我主要关注两个测试项:TAP TO TONE Latency和ROUND TRIP Latency
两个都是测试latency,延时是音频很重要的一个指标,外放延时,数字耳机延时,模拟耳机延时,蓝牙耳机延时,非常影响用户的体验。
TAP TO TONE Latency
在TAP TO TONE Latency,测试点击屏幕播放到设备出声的这段时间延时:
点击START之后即可测试,用指甲和指腹一起敲击屏幕下方绿色区域即可测试播放latency。
参数可以用默认参数,比如aaudio,这里我设备没有支持aaudio,MMAP也是灰色的。
播放latency避免泄漏我就不放了,开启aaudio之后外放能做到20ms的latency。
bufferSize下面的三个圆框属于period count,设置设置2.
既bufferSize = 256 * 2 = 512.
Device可以选择测试的设备,数字耳机、模拟耳机或者蓝牙耳机,speaker,都行。
ROUND TRIP Latency
在ROUND TRIP Latency,可以测试播放+录音往返延时。
MEASURE是测量单次,AVERAGE是测量五次平均值。
这里input burst是128,output burst是256,bufferSize还是512.
latency主要看latency.msec即可,关于timestamp.latency,只是时间戳信息,可以不用关注。
倒是看到有人提了一个issues:Why the “latency.msec” is not equals to input’s “timestamp.latency” plus output’s “timestamp.latency” in “Round Trip Latency”
还有其他TEST项就不一一列举了,例如DEVICE REPORT:
我插入一款华为的数字耳机就有信息report
可以看出这款华为数字耳机最高支持96K播放等等信息。
最后,GitHub上也可以找到这个oboe源码:https://github.com/google/oboe