X-LANCE TTS听测服务说明

Maintainer:郭奕玮、陈谐老师 2024.03.14

简介和功能

这一听测系统是从BeaqleJS(https://github.com/HSU-ANT/beaqlejs)fork而来,并做了一些改动得到的。现有如下功能:

  1. 提供了普通的MOS(不带参考音频,范围1-5,0.5间隔)、CMOS(带参考音频,范围-3到3,0.5间隔)、ABX(判断AB之中哪一个和X更接近)、AB偏好测试(选A或B,或中立)四种测试的样例。Similarity MOS可以简单通过CMOS实现,即把CMOS的分值范围和背景图片换成普通MOS即可。MUSHRA测试也可以直接借用MOS测试实现。
  2. 有一个测试主界面,如index.html。其中的任意测试结束之后均可一键返回。
  3. 可以在网站上一键提交测试结果并保存在服务器上,不用下载下来再发送。另外,测试结果保存的文件名中包含“测试名称”和“测试人”两个字段,因此不同听测的实验结果也不会混淆。如果遇到问题导致结果提交失败,则也提供下载文件的功能,以防结果丢失。

如何建立自己的听测

1. 登录服务器

使用你所知道的密码登录。

⚠️⚠️请避免使用VScode连接此服务器,个人发现偶有崩溃现象。直接在终端连接则一切正常。⚠️⚠️

和服务器之间的文件传输可以通过sftp。例如

该服务器上安装了oh-my-zsh,上键可进行前缀搜索。

2. 检查docker服务

该听测服务的运行依赖于docker实现。运行sudo docker ps -a,如果出现以下输出,则说明有正在运行的容器,可以进行下一步。

screenshot

如果没有正在运行的容器,则可以用如下命令启动一个:

这一命令将服务器的80端口映射到容器内的80端口,从而直接用浏览器访问4.191.73.44即可出现界面。

注意:该服务器上docker命令前须加sudo。

3. 新建自己的目录

上面的命令新建了自己的目录,并将听测的模板进行复制。此时,可在浏览器中直接用4.191.73.44/yiwei.guo.202403进行访问。

⚠️template是模板目录,请保证其不被修改!⚠️

之后为了方便修改,请将自己的目录(用SFTP等方式)下载到本地,在本地修改、测试完了之后再到服务器部署。

4. 在本地根据具体测试进行对应代码、数据、配置修改

mos.html为例,其中第17行

指定了这个测试使用的配置文件。这一配置文件长这样:

其他测试的配置文件大同小异。因此,需要将你的听测音频放到你目录下的audio/中,然后填充你的js配置文件,这样听测就能从这些样本中随机抽取。

完成数据和配置修改之后,把对应听测的HTML中内容进行一些替换即可。在这里,请给听测人写一个明确的instruction。随后,如果想使用index.html这个主页,则对其中的HTML进行相应修改(路径、文本等等)即可。

这一步做完之后可以在本地打开HTML进行听测,看看音频能否正常加载等。但此时尚不能进行结果的自动提交

5. 部署到服务器,并检查能否提交结果

将你在本地修改好的目录传到服务器上自己的位置,然后需要按这个命令添加权限:

随后,可以自己通过浏览器访问一下你的HTML,看看听测到最后能否成功提交。在服务器上,听测结果被保存在web_service/results/下,文件名的格式例如20240314-1445_YourName_MOS_demo_test_a06daf1.txt,即“日期-时间-测试者名字-测试名字-随机数”。

⚠️因此如果有多个同类的测试,比如MOS1、MOS2,请务必在js配置中更改两个测试的名字,以防实验结果混淆⚠️。

到这里便大功告成!

注意事项

听测如果不再使用,建议在本地备份结果后删除相关数据,以免过多占用服务器空间。

由于目前每个人登上去都是root权限,请在执行危险操作(比如rm)前三思!

具体实现细节(optional)

如果你对具体实现感兴趣,或想要实现一个新的听测类型,或遇到bug无从下手,可以阅读这一章节。

在每个测试HTML中,会构造某个听测类的实例,比如mos.html的第37行:

同理还有PrefTestMushraTestAbxTest几个类。它们都实现在js/beaqle.js中,都属于ListeningTest的子类。js/beaqle.js实现了听测服务相关的几乎所有内核代码。在每个类中,createTestDOM函数实现了每一轮听测时的界面,因此每个听测类的这一函数均有不同。如果需要自定义听测类,大概率也需要会写这一函数。

SubmitTestResults函数是听测提交结果的接口,这里可以看到发送了一个POST请求。这个请求在web_service/beaqleJS_Service.php中被处理。在这个php文件中,可以看到52行

即指定了文件名格式。如果想修改格式可以从这里入手。必要时可以修改js/beaqle.js的841行,即向php传送的数据dict。

最后

这个听测服务尚未经过广泛“拷打”,可能还有不少问题,欢迎有兴趣的同学来优化代码或服务器管理方式!