1、功能描述
1)用户可使用该功能切换五线谱、固定调(简谱)、首调(简谱)显示
2、业务规则
1)判断曲目是否为合奏曲目,合奏曲目不可转换简谱(含固定调、首调),声部曲目根据该声部设置的是否支持转简谱判断是否呈现
2)声部曲目根据该声部后台设置是否支持转简谱判断。若该声部设置为不支持转简谱,则不显示该功能;若设置为支持转简谱,则显示该功能
3)不支持转简谱的曲目默认显示五线谱,支持转简谱的声部根据后台设置的默认谱面判断默认显示五线谱、首调、固定调
3、操作方式
1)点击转谱功能按钮
2)选择需要切换的谱面类型
3)页面显示的谱面切换为用户所选谱面
1、功能描述
1)可使用该功能切换谱面显示那一条声轨
2、业务规则
1)仅合奏曲目支持切换声轨
2)可切换的声轨根据后台设置该曲目可切换的声轨显示
3、操作方式
1)点击切换声轨功能按钮
2)选择需要显示的声轨
3)页面显示的谱面切换为用户所选声轨谱面
1、功能描述
1)用户可使用该功能试听当前所选声轨的原声MP3
2、业务规则
1)Mid播放的曲目不支持该功能
2)根据用户所选声轨播放该声轨的MP3
3、操作方式
1)点击播放按钮
2)播放当前所选声轨播放该声轨的原声MP3
1、功能描述
1)可使用该功能下载曲谱图片到设备相册
2、业务规则
1)根据当前选择的谱面(五线谱、首调、固定调)和声轨下载对应谱面图片
3、操作方式
1)点击下载按钮
2)切换需要下载的谱面页码
3)点击保存按钮
4)图片保存到设备相册
1、功能描述
1)用户可使用该功能切换云教练的三种模式
2)三种模式分别为:练习模式、跟练模式、评测模式
2、业务规则
1)当该曲目后台没有上传伴奏时,不支持评测模式
3、操作方式
1)点击模式按钮
2)显示该曲目可支持的模式
3)点击所需模式按钮
4)进入对应模式界面
同【曲目详情页-切换声轨】
同【曲目详情页-切换声轨】
1、功能描述
1)用户可使用该功能开启或关闭谱面指法显示
2)默认状态为开始指法显示
3)该功能仅练习模式、跟练模式可用
2、业务规则
无
3、操作方式
1)点击指法按钮
2)根据用户所切换的开启/关闭状态显示/关闭指法
1、功能描述
1)该功能用于调整谱面指针的播放方式,共分为三种:音符指针、节拍指针、关闭指针
2)音符指针:播放曲目时,指针跟随音符走动,例:指针走到二分音符时停留两拍后再走到下一个音符
3)节拍指针:播放曲目时,指针跟随节拍走动,例:指针走到二分音符时停留一拍,然后走到后面空白处停留一拍,再走到下一个音符
4)关闭指针:播放曲目时,不显示指针,当前播放小节需高亮显示
5)该功能仅练习模式、评测模式可用
6)默认为音符指针
2、业务规则
请自行学习乐理基础中音符、拍号、时值相关知识
3、操作方式
1)用户每点击一次切换指针按钮时,依照音符指针、节拍指针、关闭指针顺序切换到下一个
1、功能描述
1)用户可自行开启或关闭节拍器
2)开启时,当用户使用播放功能,系统根据当前曲目拍号播放节拍声音
3)该功能仅练习模式、跟练模式可用
2、业务规则
无
3、操作方式
无
1、功能描述
1)该功能用于调整节拍器的播放音量
2、业务规则
1)未开启节拍器时不显示该功能
2)开始节拍器后显示该功能
3、操作方式
无
1、功能描述
1)用户可自行开启或关闭该功能
2)功能开启时,用户播放曲目结束后,指针自动跳转第一个小节并自动再次播放
3)当用户使用选段功能选择部分小节播放时,播放结束后跳转所选小节前一个小节开始自动再次播放
4)循环播放时,当用户点击暂停按钮后停止播放
5)关闭该功能时,无论用户是否选段播放,播放结束指针都不跳转并停止播放
2、业务规则
1)开启时循环播放,直到用户点击暂停
2)开启且未选段时,播放结束后跳转第一小节再次播放
3)开启且选段时,播放结束后跳转所选小节的前一个小节再次播放
4)关闭时,无论是否选段,播放结束后都不再重复播放
3、操作方式
1)点击循环播放按钮,开启魂环播放
2)开启后,当用户正常结束后,指针自动跳转第一小节,再次播放
3)开启后,当用户选段播放结束后,指针自动跳转所选小节的迁移小节,再次播放(从所选小节的前一小节播放)
1、功能描述
1)开启护眼模式可将谱面背景颜色改为护眼色
2、业务规则
无
3、操作方式
1)点击护眼模式开关,开启护眼模式
2)谱面背景颜色切换为护眼色
1、功能描述
1)用户可使用该功能查看设备画面如何投屏到电视上观看
2、业务规则
1)根据用户设备系统显示不同的帮助内容
3、操作方式
1)点击投屏帮助按钮
2)根据当前设备显示该设备的投屏帮助内容
1、功能描述
1)用户可使用该功能切换播放时播放的是原声或伴奏
2、业务规则
1)该曲目是否上传伴奏,若上传则该功能可用;若未上传则该功能不可使用
3、操作方式
1)点击原声/伴奏切换按钮
2)点击播放按钮
3)播放用户所选MP3
1、功能描述
1)用户可使用该功能选择曲目中的部分小节反复播放练习
2)选段后开始播放时,从用户所选小节的前一小节(预备小节)开始播放
2、业务规则
无
3、操作方式
1)点击选段按钮
2)在谱面上选择开始小节
3)在谱面上点击结束小节
4)点击播放按钮
5)从开始小节的前一小节开始播放
1、功能描述
1)该功能用于显示和调整谱面小节速度
2)谱面指针移动到哪个小节,显示哪个小节的速度
3)默认速度显示优先级:小节标记速度 > 意大利文约定速度 > 框架默认速度(100)
4)用户在某个小节调整速度时,其他小节按照该小节调整前与调整后的速度比同步调整,例:A小节谱面速度100,B小节谱面速度50,当用户在A小节将速度调整到50时,播放到B小节时,速度显示为25
5)当其他小节速度按照调整后比例计算为小数时,系统按实际结算结果播放MP3及指针,但界面上显示速度为四舍五入取整后的数值
2、业务规则
无
3、操作方式
1)点击速度按钮
2)拖动滑动条或点击【+号】【-号】速度目标速度
3)点播播放按钮
4)谱面指针、播放速度按照调整后速度播放
1、功能描述
1)用户可使用该功能试听该曲目的原声、伴奏
2)播放时指针、指法、速度、音频跟随播放进度实时显示
2、业务规则
1)播放过程中可使用原声伴奏切换、指法显示功能
2)若开启循环播放,播放结束时,指针跳转第一小节再次播放,如此循环直到用户操作暂停
3)若用户选段播放,从所选段的前一小节(预备小节)开始播放
4)若用户选段播放,所选段落播放结束时,指针跳转所选段前一小节(预备小节)再次播放,如此循环直到用户操作暂停
3、操作方式
无
1、功能描述
1)在播放的过程中用户可使用该功能暂停播放
2)暂停后可使用播放功能继续播放
2、业务规则
无
3、操作方式
无
1、功能描述
1)播放到一半暂停后,或点击谱面选择某个音符后,用户可使用该功能从头播放
2、业务规则
1)未选段时,从曲目第一小节开始播放
2)选段时,从所选段的前一小节(预备小节)开始播放
3、操作方式
无
1、功能描述
1)该功能用于开始跟练,开始后,设备开始收音
2)用户演奏频率与谱面指针所指音符一致时,指针跳转下一个音符,不一致时显示【高了】或【低了】
2、业务规则
1)点击开始演奏后开始收音
2)用户演奏频率与谱面指针所指音符一致时,指针跳转下一个音符
3)用户演奏频率与谱面指针所指音符不一致时,若用户演奏频率比指针音符高,则界面提示【高了】
4)用户演奏频率与谱面指针所指音符不一致时,若用户演奏频率比指针音符低,则界面提示【低了】
3、操作方式
无
1、功能描述
1)该功能用户停止跟练
2)用户开始演奏之后才可使用该功能
3)用户点击结束演奏后,设备停止收音
2、业务规则
1)未开始演奏时,不显示该功能按钮
2)开始演奏时,显示该功能按钮
3、操作方式
无
1、功能描述
1)该功能用于检测设备播放音频到设备接收音频中的时间差,用于评测时值与音频合成的默认校准时间
2、业务规则
1)进入评测模式时,校验本地是否储存该设备的延迟数据,若未储存则必须进行检测,若已存在延迟数据则不经过该流程
3、操作方式
1)点击评测模式,系统校验是否存在延迟数据,若存在则直接进入评测模式,若不存在则进行下一步
2)校验设备当前是否链接耳机,若已链接则提示用户断开耳机链接,若未链接则进行下一步
3)提示用户为了评测更加准确,即将开始设备延迟检测,点击开始检测按钮,进行下一步
4)校验用户手机音量是否≥75%,若小于75%则提示用户请将设备音量调整至75%,若≥75%则进行下一步
5)系统播放检测音效,并开始收音,计算从播放到收到音量的时间差,并记录在本地
6)记录数据后提示用户:检测完成,为了评测分数更加准确,请链接有线耳机后开始评测。用户点击开始评测按钮,进入评测模式。
1、功能描述
1)该功能用于切换评测打分标准,共分为三种标准:入门级、进阶级、大师级
2)默认为进阶级
3)用户可自行切换打分标准
2、业务规则
无
3、操作方式
1)在评测模式下点击设置按钮
2)切换到评测设置界面
3)选择需要的打分标准
4)点击确定按钮操作结束
1、功能描述
1)该功能用于让用户校准乐器声音,保障评测分数客观准确
2、业务规则
1)当用户开启校音提醒时,每次进入评测模式都需进行校音步骤
2)当用户关闭校音提示时,每次进入评测模式都不进行该步骤
3、操作方式
1)界面提示用户使用乐器演奏中央C
2)设备开始收音
3)使用收音频率与该声部中央C频率对比是否一致,不一致时,界面显示高了/低了,一致时显示准确,帮提示用户校音完成
4)校音完成后进入评测模式界面
1、功能描述
1)该功能用于开启/关闭每次评测前是否需要进行校音
2、业务规则
无
3、操作方式
无
1、功能描述
1)该用能用于开启设备摄像头与相册权限
2)开启后,评测时需通过设备前置摄像头录制评测画面
3)默认为关闭状态
2、业务规则
1)用户是否授权摄像头
2)用户是否授权相册
3)摄像头、相册都授权时,功能开关亮起,任何一个权限未授权则功能按钮置灰
3、操作方式
1)点击开启摄像头功能,判断是否授权摄像头
2)若未授权,则提示是否授权摄像头,选择否则流程结束,功能按钮置灰;选择是则进行下一步
3)提示用户是否授权相册,若选择否则流程结束,功能按钮置灰,若选择是则功能按钮亮起,界面显示前置摄像头画面,界面UI变成75%半透明,流程结束
1、功能描述
1)该功能用于在评测模式开启摄像头的情况下调整界面UI透明度
2)仅调整UI背景透明度,谱面UI不受此影响
2、业务规则
1)用户是否开启摄像头且APP已获取到摄像头、相册权限,都获取到时显示该功能,其中一个未获取或用户关闭开启摄像头功能时,不显UI透明度调整功能
3、操作方式
无
1、功能描述
1)该功能用于切换评测音高标准
2、业务规则
1)可选项在后台乐器管理中配置
2)默认选项在后台乐器管理配置
3、操作方式
无
1、功能描述
1)该功能用于设置评测打分时的校准延迟
2)用户可根据自己的实际情况设置反应时间
2、业务规则
无
3、操作方式
无
1、功能描述
1)该功能用于正式开开始评测,开始后,设备开始收音并传输到后台,后台计算每小节分数并返回前端显示小节评分
2、业务规则
无
3、操作方式
无
1、功能描述
1)该功能用于在评测过程中终止评测
2)终止评测后,显示本次评测的总体评分,并生成评测报告,保存评测音频
2、业务规则
无
3、操作方式
无
1、功能描述
1)评测完成后系统自动保存本次评测的音频文件
2)评测音频文件可在评测报告中的回放功能查看
2、业务规则
1)本次评测结束时自动保存音频文件
2)用户通过结束评测功能手动结束时保存音频文件
3、操作方式
无
1、功能描述
1)评测结束后,生成评测报告
2)评测报告根据音准、节奏、完整性三个维度显示每个音符的用户演奏情况
3)音准包括:高了、低了、准确
4)节奏包括:快了、慢了、准确
5)完整性包括:时值不足、时值准确
6)三个维度具体结果样式请查看UI设计稿
2、业务规则
1)根据用户所选评测难度确定打分误差区间
2)音准、节奏、完整性具体评分规则请查看后台评测打分模块
3、操作方式
无
1、功能描述
1)评测完成后,用户可以通过该功能将演奏音频与曲目伴奏合成
2)可调整演奏音频与曲目伴奏对齐参数
3)以曲目伴奏时间走为标准,默认将设备延迟检测、反应时间相加,将演奏音频后移
4)用户可更换封面图片,发布作品、保存草稿
5)发布作评后,该音频/视频替换评测报告中的音频
6)发布作评后草稿自动移除
7)保存草稿后7填自动清理
2、业务规则
1)设备延迟检测参数
2)反应时间参数
3)用户自行调整时间差
3、操作方式
无
DROP TABLE IF EXISTS music_sheet
;
CREATE TABLE music_sheet
(
id_
bigint(20) NOT NULL AUTO_INCREMENT COMMENT ’主键‘music_category_id_
bigint(20) NOT NULL COMMENT '曲谱分类ID'music_cover_
varchar(255) DEFAULT NULL COMMEN T '曲谱封面图'name_
varchar(255) NOT NULL COMMENT '曲谱名称'musical_instrument_ids_
varchar(255) DEFAULT NULL COMMENT '曲谱乐器(多个,用逗号分隔)'composer_
varchar(255) DEFAULT NULL COMMENT '作曲人'music_sheet_type_
varchar(100) DEFAULT 'SINGLE' COMMENT '曲谱类型(SINGLE:单曲 CONCERT:合奏)'is_use_system_beat_
tinyint(1) DEFAULT NULL COMMENT '是否使用系统节拍器(0:否;1:是)'is_evaluated_
tinyint(1) DEFAULT NULL COMMENT '是否可评测(0:否;1:是)'is_convertible_score_
tinyint(1) DEFAULT NULL COMMENT '是否可转谱(0:否; 1:是)'is_show_fingering_
tinyint(1) DEFAULT NULL COMMENT '是否展示指法(0:否;1:是)'is_play_beat_
tinyint(1) DEFAULT '1' COMMENT '是否播入节拍器(0: 否 1:是)'multi_tracks_selection_
text COMMENT '多声轨选择'play_speed_
int(4) DEFAULT NULL COMMENT '播放速度'play_mode_
varchar(50) DEFAULT NULL COMMENT '播放模式(MIDI;MP3)'xml_file_url_
varchar(255) DEFAULT NULL COMMENT 'XML文件'midi_file_url_
varchar(255) DEFAULT NULL COMMENT 'MIDI文件(保留字段)'music_json_
text COMMENT '曲谱JSON'music_svg_json_
text COMMENT '曲谱缓存JSON(后续使用)'music_svg_
varchar(255) DEFAULT NULL COMMENT '曲谱缓存'music_jian_svg_
varchar(255) DEFAULT NULL COMMENT '简谱缓存'music_first_svg_
varchar(255) DEFAULT NULL COMMENT '首调缓存'music_img_json_
longtext COMMENT '谱面图片JSON(后续使用)'music_img_
longtext COMMENT '五线谱图片'music_first_img_
longtext COMMENT '首调图片'music_jian_img_
longtext COMMENT '固定调图片'ext_config_json_
longtext COMMENT '谱面参数设置'ext_style_config_json_
longtext COMMENT '谱面样式参数设置'available_type_
varchar(255) DEFAULT NULL COMMENT '可用类型(PLATFORM: 平台; ORG: 机构; PERSON: 个人)'source_type_
varchar(255) DEFAULT NULL COMMENT '来源类型(PLATFORM: 平台; ORG: 机构; PERSON: 个人)'audio_type_
varchar(200) DEFAULT NULL COMMENT '音频类型(HOMEMODE: 自制 COMMON: 普通)'status_
tinyint(1) DEFAULT '1' COMMENT '曲目状态(0:停用,1:启用)'reason_
varchar(255) DEFAULT NULL COMMENT '停用原因'remark_
varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '备注'del_flag_
tinyint(1) DEFAULT '0' COMMENT '逻辑删除标识(0: 未删 1:已删)'update_by_
bigint(20) DEFAULT NULL COMMENT '更新人'update_time_
datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'create_by_
bigint(20) DEFAULT NULL COMMENT '创建人'create_time_
datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
PRIMARY KEY (id_
) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1711300065414127618 DEFAULT CHARSET=utf8mb4 COMMENT='曲谱表'
DROP TABLE IF EXISTS music_sheet_accompaniment
;
CREATE TABLE music_sheet_accompaniment
(
id_
bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'music_sheet_id_
bigint(20) NOT NULL COMMENT '曲谱ID'musical_instrument_id_
varchar(200) DEFAULT NULL COMMENT '声轨乐器'audio_file_url_
varchar(256) NOT NULL COMMENT '音频文件'track_
varchar(255) DEFAULT NULL COMMENT '声轨名称'sort_number_
int(11) DEFAULT '0' COMMENT '排序号'create_by_
bigint(20) DEFAULT NULL COMMENT '创建人'create_time_
datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
PRIMARY KEY (id_
) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=28066 DEFAULT CHARSET=utf8mb4 COMMENT='曲谱伴奏表';
DROP TABLE IF EXISTS music_sheet_appreciation
;
CREATE TABLE music_sheet_appreciation
(
id_
bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'music_sheet_id_
bigint(20) NOT NULL COMMENT '曲谱ID'name_
varchar(255) NOT NULL COMMENT '名称'audio_file_url_
varchar(255) NOT NULL COMMENT '原音文件'introduction_
text COMMENT '简介说明'sort_number_
int(11) DEFAULT '0' COMMENT '排序号'del_flag_
tinyint(1) DEFAULT '0' COMMENT '删除标记'create_by_
bigint(20) DEFAULT NULL COMMENT '创建人'create_time_
datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
PRIMARY KEY (id_
) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14757 DEFAULT CHARSET=utf8mb4 COMMENT='曲谱赏析表';
DROP TABLE IF EXISTS music_sheet_categories
;
CREATE TABLE music_sheet_categories
(
id_
int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID'parent_id_
int(11) DEFAULT '0' COMMENT '父级ID'name_
varchar(50) DEFAULT NULL COMMENT '名称'order_
int(11) DEFAULT NULL COMMENT '排序编号'enable_
tinyint(4) DEFAULT '0' COMMENT '启用标记'cover_img_
varchar(250) DEFAULT NULL COMMENT '封面图片'operator_id_
bigint(11) DEFAULT NULL COMMENT '操作人'music_sheet_num_
int(11) DEFAULT '0' COMMENT '曲目数'update_time_
datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'create_time_
datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
PRIMARY KEY (id_
) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COMMENT='曲谱分类';
DROP TABLE IF EXISTS music_sheet_sound
;
CREATE TABLE music_sheet_sound
(
id_
bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'music_sheet_id_
bigint(20) NOT NULL COMMENT '曲谱ID'musical_instrument_id_
varchar(32) DEFAULT NULL COMMENT '声轨乐器'track_
varchar(255) DEFAULT NULL COMMENT '声轨名称'audio_file_url_
varchar(255) NOT NULL COMMENT '原音文件'sort_number_
int(11) DEFAULT '0' COMMENT '排序号'create_by_
bigint(20) DEFAULT NULL COMMENT '创建人'create_time_
datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
PRIMARY KEY (id_
) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=71072 DEFAULT CHARSET=utf8mb4 COMMENT='曲谱原声表';
DROP TABLE IF EXISTS musical_instrument
;
CREATE TABLE musical_instrument
(
id_
int(11) NOT NULL AUTO_INCREMENT COMMENT '主键'name_
varchar(45) CHARACTER SET utf8 NOT NULL COMMENT '名称'code_
varchar(45) CHARACTER SET utf8 DEFAULT NULL COMMENT '编码'parent_id_
int(11) DEFAULT '0' COMMENT '父级ID'orientation_
tinyint(1) DEFAULT NULL COMMENT '横竖屏:1:竖 0:横'img_
varchar(128) DEFAULT NULL COMMENT '图片'logo_
varchar(255) DEFAULT NULL COMMENT '乐器logo'media_
varchar(255) DEFAULT NULL COMMENT '音频'del_flag_
tinyint(3) DEFAULT '0' COMMENT '删除标识'enable_flag_
tinyint(3) NOT NULL DEFAULT '1' COMMENT '是否启用'operator_
bigint(20) DEFAULT NULL COMMENT '操作人'default_score_
varchar(50) DEFAULT NULL COMMENT '默认谱面(STAVE: 五线谱; JIAN: 固定调; FIRST: 首调)'update_time_
datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'create_time_
datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
PRIMARY KEY (id_
) USING BTREE,
KEY code_
(code_
) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2121 DEFAULT CHARSET=utf8mb4 COMMENT='曲谱乐器';SET FOREIGN_KEY_CHECKS = 1;
1、示例
{
"api" : "createMusicPlayer",
"content" : {
"tuneSrc" : "https:\/\/oss.dayaedu.com\/cloud-coach\/1686725501654check_music1_(1).mp3",
"musicSrc" : "https:\/\/oss.dayaedu.com\/cloud-coach\/你的名字叫什么-伴奏.mp3",
"uuid" : "1703560248534882202"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
musicSrc 伴奏mp3 tuneSrc 延迟检测音频 tuneFrequence:检测频率(预留后续修改检测音频) | H5 | 告知App评测播放相关资源,App进行音频缓 |
1、延迟测试开始,开启音频录制示例
xxxxxxxxxx
{
"api" : "startTune",
"content" : {
"count" : "0",
"uuid" : "1703560356247268367"
}
}
2、发送DELAY_CHECK 给服务端,携带当前检测声音hz示例
xxxxxxxxxx
{
"body" : {
"HZ" : 800
},
"header" : {
"commond" : "recordStart",
"type" : "DELAY_CHECK",
"status" : 200
}
}
3、发送DELAY_CHECK recordEnd 消息示例
xxxxxxxxxx
{
"header" : {
"commond" : "recordEnd",
"type" : "DELAY_CHECK",
"status" : 200
}
}
4、接收DELAY_CHECK延迟值,计算出延迟值保存下来示例
xxxxxxxxxx
{
"header" : {
"commond" : "recordEnd",
"status" : 200,
"type" : "DELAY_CHECK"
},
"body" : {
"firstNoteDelayDuration" : 2275.5556335449219
}
}
5、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
count:第几次延迟检测,从0开始 | H5 | 1.延迟测试开始,开启音频录制 2.音频录制开始回调时,播放延迟检测声音 3.监听播放器进度,记录播放器播放延迟 4.发送DELAY_CHECK 给服务端,携带当前检测声音hz 5.发送DELAY_CHECK recordEnd 消息 6.接收DELAY_CHECK延迟值,计算出延迟值保存下来 |
1、示例
xxxxxxxxxx
{
"api" : "endTune",
"content" : {
"uuid" : "1703560480159115435"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 停止延迟检测,停止播放延迟检测声音,发送DELAY_CHECK recordEnd消息给服务端 |
1、示例
xxxxxxxxxx
{
"api" : "finishTune",
"content" : {
"uuid" : "170356059750712269"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 结束延迟检测功能,App计算平均麦克风收音延迟值,存储下来 |
1、示例
xxxxxxxxxx
{
"api" : "getDeviceDelay",
"content" : {
"value" : 123,
"uuid" : "170356059750712269"
}
}
2、请求参数说明
参数 | 描述 | 描述 |
---|---|---|
value:当前设备麦克风收音延迟值 | H5 | App获取当前设备记录的延迟值, 返回给H5 |
1、示例
xxxxxxxxxx
{
"api" : "startEvaluating",
"content" : {
"speed" : 100,
"beatLength" : 0,
"clientId" : "student",
"uuid" : "1703561058076864652",
"evaluationCriteria" : "frequency",
"xmlUrl" : "https:\/\/oss.dayaedu.com\/cloud-coach\/你的名字叫什么.xml",
"subjectId" : "2",
"examSongId" : "1688446805041012737",
"heardLevel" : "ADVANCED",
"platform" : "IOS",
"hertz" : 442,
"detailId" : "1688446805041012737",
"partIndex" : 0,
"reactionTimeMs" : 0,
"musicXmlInfos" : [
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 0,
"measureRenderIndex" : 0,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 500,
"duration" : 500,
"musicalNotesIndex" : 0,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 0,
"measureRenderIndex" : 1,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 1000,
"duration" : 1000,
"musicalNotesIndex" : 1,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 1,
"measureRenderIndex" : 2,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 2000,
"duration" : 1000,
"musicalNotesIndex" : 2,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 2,
"measureRenderIndex" : 3,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 3000,
"duration" : 1000,
"musicalNotesIndex" : 3,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 3,
"measureRenderIndex" : 4,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 4000,
"duration" : 1000,
"musicalNotesIndex" : 4,
"nextFrequency" : -2
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 4,
"measureRenderIndex" : 5,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 5000,
"duration" : 500,
"musicalNotesIndex" : 5,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 4,
"measureRenderIndex" : 5,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 5500,
"duration" : 500,
"musicalNotesIndex" : 6,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 5,
"measureRenderIndex" : 6,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 6000,
"duration" : 500,
"musicalNotesIndex" : 7,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 5,
"measureRenderIndex" : 6,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 6500,
"duration" : 500,
"musicalNotesIndex" : 8,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 6,
"measureRenderIndex" : 7,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 7000,
"duration" : 750,
"musicalNotesIndex" : 9,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 6,
"measureRenderIndex" : 7,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 7750,
"duration" : 250,
"musicalNotesIndex" : 10,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 7,
"measureRenderIndex" : 8,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 8000,
"duration" : 1000,
"musicalNotesIndex" : 11,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 8,
"measureRenderIndex" : 9,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 9000,
"duration" : 500,
"musicalNotesIndex" : 12,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 8,
"measureRenderIndex" : 9,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 9500,
"duration" : 500,
"musicalNotesIndex" : 13,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 9,
"measureRenderIndex" : 10,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 10000,
"duration" : 500,
"musicalNotesIndex" : 14,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 9,
"measureRenderIndex" : 10,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 10500,
"duration" : 500,
"musicalNotesIndex" : 15,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 10,
"measureRenderIndex" : 11,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 11000,
"duration" : 750,
"musicalNotesIndex" : 16,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 10,
"measureRenderIndex" : 11,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 11750,
"duration" : 250,
"musicalNotesIndex" : 17,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 11,
"measureRenderIndex" : 12,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 12000,
"duration" : 1000,
"musicalNotesIndex" : 18,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 12,
"measureRenderIndex" : 13,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 13000,
"duration" : 500,
"musicalNotesIndex" : 19,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 12,
"measureRenderIndex" : 13,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 13500,
"duration" : 500,
"musicalNotesIndex" : 20,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 13,
"measureRenderIndex" : 14,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 14000,
"duration" : 500,
"musicalNotesIndex" : 21,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 13,
"measureRenderIndex" : 14,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 14500,
"duration" : 500,
"musicalNotesIndex" : 22,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 14,
"measureRenderIndex" : 15,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 15000,
"duration" : 500,
"musicalNotesIndex" : 23,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 14,
"measureRenderIndex" : 15,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 15500,
"duration" : 500,
"musicalNotesIndex" : 24,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 15,
"measureRenderIndex" : 16,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 16000,
"duration" : 250,
"musicalNotesIndex" : 25,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 15,
"measureRenderIndex" : 16,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 16250,
"duration" : 250,
"musicalNotesIndex" : 26,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 15,
"measureRenderIndex" : 16,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 16500,
"duration" : 500,
"musicalNotesIndex" : 27,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 16,
"measureRenderIndex" : 17,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 17000,
"duration" : 750,
"musicalNotesIndex" : 28,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 992.2564507054858,
"frequency" : 1051.2590896624054,
"measureIndex" : 16,
"measureRenderIndex" : 17,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 17750,
"duration" : 250,
"musicalNotesIndex" : 29,
"nextFrequency" : 1113.7702081070679
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 17,
"measureRenderIndex" : 18,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 18000,
"duration" : 500,
"musicalNotesIndex" : 30,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 17,
"measureRenderIndex" : 18,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 18500,
"duration" : 500,
"musicalNotesIndex" : 31,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 18,
"measureRenderIndex" : 19,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 19000,
"duration" : 500,
"musicalNotesIndex" : 32,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 18,
"measureRenderIndex" : 19,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 19500,
"duration" : 500,
"musicalNotesIndex" : 33,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 19,
"measureRenderIndex" : 20,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 20000,
"duration" : 500,
"musicalNotesIndex" : 34,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 19,
"measureRenderIndex" : 20,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 20500,
"duration" : 500,
"musicalNotesIndex" : 35,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 20,
"measureRenderIndex" : 21,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 21000,
"duration" : 1000,
"musicalNotesIndex" : 36,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 21,
"measureRenderIndex" : 22,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 22000,
"duration" : 1000,
"musicalNotesIndex" : 37,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 22,
"measureRenderIndex" : 23,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 23000,
"duration" : 1000,
"musicalNotesIndex" : 38,
"nextFrequency" : -2
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 23,
"measureRenderIndex" : 24,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 24000,
"duration" : 1000,
"musicalNotesIndex" : 39,
"nextFrequency" : -2
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 24,
"measureRenderIndex" : 25,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 25000,
"duration" : 500,
"musicalNotesIndex" : 40,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 24,
"measureRenderIndex" : 25,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 25500,
"duration" : 500,
"musicalNotesIndex" : 41,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 25,
"measureRenderIndex" : 26,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 26000,
"duration" : 500,
"musicalNotesIndex" : 42,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 25,
"measureRenderIndex" : 26,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 26500,
"duration" : 500,
"musicalNotesIndex" : 43,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 26,
"measureRenderIndex" : 27,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 27000,
"duration" : 750,
"musicalNotesIndex" : 44,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 26,
"measureRenderIndex" : 27,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 27750,
"duration" : 250,
"musicalNotesIndex" : 45,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 27,
"measureRenderIndex" : 28,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 28000,
"duration" : 1000,
"musicalNotesIndex" : 46,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 28,
"measureRenderIndex" : 29,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 29000,
"duration" : 500,
"musicalNotesIndex" : 47,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 28,
"measureRenderIndex" : 29,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 29500,
"duration" : 500,
"musicalNotesIndex" : 48,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 29,
"measureRenderIndex" : 30,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 30000,
"duration" : 500,
"musicalNotesIndex" : 49,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 29,
"measureRenderIndex" : 30,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 30500,
"duration" : 500,
"musicalNotesIndex" : 50,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 30,
"measureRenderIndex" : 31,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 31000,
"duration" : 750,
"musicalNotesIndex" : 51,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 30,
"measureRenderIndex" : 31,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 31750,
"duration" : 250,
"musicalNotesIndex" : 52,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 31,
"measureRenderIndex" : 32,
"denominator" : 2,
"isOrnament" : false,
"timeStamp" : 32000,
"duration" : 1000,
"musicalNotesIndex" : 53,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 32,
"measureRenderIndex" : 33,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 33000,
"duration" : 500,
"musicalNotesIndex" : 54,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 32,
"measureRenderIndex" : 33,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 33500,
"duration" : 500,
"musicalNotesIndex" : 55,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 33,
"measureRenderIndex" : 34,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 34000,
"duration" : 500,
"musicalNotesIndex" : 56,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 33,
"measureRenderIndex" : 34,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 34500,
"duration" : 500,
"musicalNotesIndex" : 57,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 34,
"measureRenderIndex" : 35,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 35000,
"duration" : 500,
"musicalNotesIndex" : 58,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 34,
"measureRenderIndex" : 35,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 35500,
"duration" : 500,
"musicalNotesIndex" : 59,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 35,
"measureRenderIndex" : 36,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 36000,
"duration" : 250,
"musicalNotesIndex" : 60,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 35,
"measureRenderIndex" : 36,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 36250,
"duration" : 250,
"musicalNotesIndex" : 61,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 35,
"measureRenderIndex" : 36,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 36500,
"duration" : 500,
"musicalNotesIndex" : 62,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 36,
"measureRenderIndex" : 37,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 37000,
"duration" : 750,
"musicalNotesIndex" : 63,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 992.2564507054858,
"frequency" : 1051.2590896624054,
"measureIndex" : 36,
"measureRenderIndex" : 37,
"denominator" : 8,
"isOrnament" : false,
"timeStamp" : 37750,
"duration" : 250,
"musicalNotesIndex" : 64,
"nextFrequency" : 1113.7702081070679
},
{
"prevFrequency" : 884,
"frequency" : 936.56537541361718,
"measureIndex" : 37,
"measureRenderIndex" : 38,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 38000,
"duration" : 500,
"musicalNotesIndex" : 65,
"nextFrequency" : 992.2564507054858
},
{
"prevFrequency" : 743.35243108428358,
"frequency" : 787.55446683605999,
"measureIndex" : 37,
"measureRenderIndex" : 38,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 38500,
"duration" : 500,
"musicalNotesIndex" : 66,
"nextFrequency" : 834.38489241061711
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 38,
"measureRenderIndex" : 39,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 39000,
"duration" : 500,
"musicalNotesIndex" : 67,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 662.25172797949324,
"frequency" : 701.63126496994425,
"measureIndex" : 38,
"measureRenderIndex" : 39,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 39500,
"duration" : 500,
"musicalNotesIndex" : 68,
"nextFrequency" : 743.35243108428358
},
{
"prevFrequency" : 589.99921554315517,
"frequency" : 625.08239456890794,
"measureIndex" : 39,
"measureRenderIndex" : 40,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 40000,
"duration" : 500,
"musicalNotesIndex" : 69,
"nextFrequency" : 662.25172797949324
},
{
"prevFrequency" : -2,
"frequency" : -2,
"measureIndex" : 39,
"measureRenderIndex" : 40,
"denominator" : 4,
"isOrnament" : false,
"timeStamp" : 40500,
"duration" : 500,
"musicalNotesIndex" : 70,
"nextFrequency" : -2
}
]
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
musicXml 评测相关数据 beatLength:需要剔除多余检测录音文件时长,如果从第一小节,音频文件自带节拍器,该时长为节拍器时长,如果是中间选段,则时长为预备小节时长 speed:音频基准播放速度 evaluationCriteria:评测打分标准:frequency(默认-频率)、amplitude(声部打击乐-振幅)、decibels(节奏练习-分贝) xmlUrl:曲子xml地址 subjectId:曲子声部ID examSongId:曲子ID 同detailId detailId:曲子ID partIndex:曲子分轨索引 heardLevel:评测级别'入门 BEGINNER'|'进阶 ADVANCED'|'大师 PERFORMER' platform:评测客户端平台:iOS、安卓 hertz:A4基准赫兹HZ(440|442) reactionTimeMs:反应时间ms musicXmlInfos:评测音符信息 { prevFrequency:上一个音符的频率 休止符为-1 frequency:当前音符的频率 nextFrequency:下一个音符的频率 measureRenderIndex:评测小节索引(默认值0,同一个小节的音符索引相同) measuerRenderIndex:实际渲染的小节索引,从渲染的谱面开始,代表当前小节再谱面实际的位置 musicalNotesIndex:当前实际评测音符索引,从0开始 denominator:多少分音符 isOrnament:是否装饰音 donEvaluating:是否打分的标记(Listen,纯率、如果是打击乐和节奏练习,连音线后面的音符都不打分,如果是普通吹奏,连音线后面的音符和前面的音符同音高都不打分) timeStamp:当前音符开始的时间ms(参数评测第一个音符为0) duration:当前音符持续时间ms } | H5 | 开始评测,该API会判断是否连接scoket,如果连上,会发送SOUND_COMPARE 包含 musicXml信息给service同时回执信息给H5,如果没有连上,会建立连接,成功后发送SOUND_COMPARE 至服务端,同时回执信息给H5 |
1、示例
xxxxxxxxxx
{
"api" : "endEvaluating",
"content" : {
"musicScoreId" : "1688446805041012737",
"uuid" : "1703561228193776197"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
musicScoreId:同startEvaluating examSongId表示 曲目ID | H5 | 接收到该消息,会发送SOUND_COMPARE recordEnd消息至服务端,同时回执给H5,同时停止mp3播放 |
1、示例
xxxxxxxxxx
{
"api" : "cancelEvaluating",
"content" : {
"uuid" : "1703561228193776197"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 取消评测,同endEvaluating,只是不发生SOUND_COMPARE recordEnd至服务端 |
1、示例
xxxxxxxxxx
{
"api" : "startRecording",
"content" : {
"firstNoteTime" : 2667,
"uuid" : "1703562044162971287",
"accompanimentState" : 1
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
accompanimentState:是否静音评测 firstNoteTime:评测播放MP3开始时间(选段模式:firstNoteTime应该取预备小节的第一个音符的开始播放的时间,正常评测 取值为0) | H5 | 1.开始音频录制功能,同时判断accompanimentState是否静音播放mp3 2.在开始录制时,评测场景,如果是App播放mp3,这个时候App开启播放功能 3.录制开始接收到第一段音频时,会发送SOUND_COMPARE recordStart信息给服务端,同时回执recordStartTime至H5 |
1、示例
xxxxxxxxxx
{
"api" : "endRecording",
"content" : {
"uuid" : "1703561966859113931"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 停止音频录制功能,回执endRecording给H5 |
1、示例
xxxxxxxxxx
{
"api" : "playProgress",
"content" : {
"totalDuration" : 6000,
"currentTime" : 10
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
Mp3播放器进度回调: currentTime:当前播放进度(时间 ms) totalDuration:全曲时长(ms) | APP | 1.评测功能:原生mp3播放器进度回调给前端 2.在进度回调中,计算延迟值,发送SOUND_COMPARE audioPlayStart至服务端 |
1、示例
无
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
可能用不上 | H5 | 暂停音频录制 |
1、描述
无
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
可能用不上 | H5 | 恢复音频录制 |
1、示例
xxxxxxxxxx
{
"api" : "suspendPlay"
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | App退到后台暂停播放,通知H5 |
1、示例
xxxxxxxxxx
{
"api" : "isWiredHeadsetOn",
"content" : {
"checkIsWired" : true,
"type" : "蓝牙耳机",
"uuid" : "1703561404357134809"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
checkIsWired:是否带耳机 type:耳机类型名称:蓝牙耳机、有线耳机 | H5 | 获取输出是否未耳机 type:有线耳机、蓝牙耳机 checkIsWired(是否带耳机) |
1、示例
xxxxxxxxxx
{
"api" : "listenerWiredStatus",
"content" : {
"checkIsWired" : true,
"type" : "蓝牙耳机",
"uuid" : "1703561404357134809"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
checkIsWired:是否带耳机 type:耳机类型名称:蓝牙耳机、有线耳机 | APP | App监听扬声器通道变化通知给H5 |
1、示例
xxxxxxxxxx
已废弃
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | H5调用发送消息至服务端,将content放在body,header 设置proxyMessage,发送给服务等 |
1、示例
xxxxxxxxxx
{
"api" : "proxyServiceMessage",
"content" : {
"header" : {
"commond" : "recordCancel",
"type" : "SOUND_COMPARE",
"status" : 200
},
"uuid" : "1703561640785920599"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
通用接口 header:Object commond:请求命令。目前支持的请求命令:musicXml(同步music xml信息),recordStart(开始评测),recordCancel(取消评测),recordEnd(结束评测)、videoUpload(上传 评测视频) 请求类型,目前支持的请求类型:SOUND_COMPARE(评测),DELAY_CHECK(延迟检查),PITCH_DETECTION(校音) status:状态码,默认200 | H5 | H5调用发送消息至服务端,将content直接发送给服务等 |
1、示例
x{
"api" : "sendResult",
"content" : {
"uuid" : "1703561640785920599",
"body" : {
"url" : "https:\/\/oss.dayaedu.com\/cloud-coach\/202401\/103732_2401021407268.wav",
"score" : 0,
"playTime" : 0,
"integrity" : 0,
"intonation" : 0,
"scoreData" : {
"musicalNotesPlayStats" : {
"notesData" : [
],
"examSongId" : "1688446805041012737",
"xmlUrl" : "https:\/\/oss.dayaedu.com\/cloud-coach\/你的名字叫什么.xml",
"detailId" : "1688446805041012737"
},
"userMeasureScore" : {
}
},
"cadence" : 0
},
"header" : {
"commond" : "recordCancel",
"type" : "SOUND_COMPARE",
"status" : 200
}
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
通用接口 header:Object commond:请求命令。目前支持的请求命令:musicXml(同步music xml信息),recordStart(开始评测),recordCancel(取消评测),recordEnd(结束评测)、videoUpload(上传 评测视频) 请求类型,目前支持的请求类型:SOUND_COMPARE(评测),DELAY_CHECK(延迟检查),PITCH_DETECTION(校音) status:状态码,默认200 body:body内容更具返回内容不同,数据不同,如检测返回:{"body":{"firstNoteDelayDuration":185.7596435546875} 小节评分:{ "body": { "score": 0, "measureIndex": 5, "measureRenderIndex": 5 }, "header": { "commond": "measureScore", "status": 200, "type": "SOUND_COMPARE" } } 结束评测打分: | APP | App接收服务端消息传递给H5(传递服务端socket消息) |
1、示例
xxxxxxxxxx
{
"api" : "openCamera",
"content" : {
"uuid" : "1703561966859113931"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 开启摄像头,App收到后会检测摄像头相关权限,渲染摄像头捕捉画面 |
1、示例
xxxxxxxxxx
{
"api" : "closeCamera",
"content" : {
"uuid" : "1703561996652345199"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 关闭摄像头,停止渲染摄像头捕捉画面 |
1、示例
xxxxxxxxxx
{
"api" : "startCapture",
"content" : {
"uuid" : "1703562200341909531"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 开启摄像头录制 |
1、示例
xxxxxxxxxx
{
"api" : "endCapture",
"content" : {
"uuid" : "1703562234983517772"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 关闭摄像头录制 |
1、示例
xxxxxxxxxx
{
"api" : "setCaptureMode",
"content" : {
"mode" : "evaluating",
"uuid" : "1703561966859113931"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
mode:播放(practice)还是评测(evaluating) | H5 | iOS 使用该功能,modeString 如果是评测,录制视频时,不会采集麦克风声音(声音交给录音功能去实现) |
1、示例
xxxxxxxxxx
{
"api" : "videoUpdate",
"content" : {
"type" : "success",
"message" : "上传成功",
"filePath" : "https:\/\/www.cdn.dayaedu.com\/ssl.wav"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
type:是否成功(success| error) message:上传成功 filePath: 视频地址 | H5 | 上传录制的视频,无合成功能的app中使用 |
1、示例
xxxxxxxxxx
{
"api" : "startSoundCheck",
"content" : {
"uuid" : "1703561966859113931"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 开始校音,开始音频录制,录制第一段声音回调时,会发送PITCH_DETECTION recordStart消息给服务端 |
1、示例
xxxxxxxxxx
{
"api" : "endSoundCheck",
"content" : {
"uuid" : "1703561966859113931"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
描述 | 结束校音,停止音频录制 |
1、示例
xxxxxxxxxx
{
"api" : "cloudDetail",
"content" : {
"numerator" : 4,
"midi" : "",
"interval" : 50,
"denominator" : 4,
"originalSpeed" : 90
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
midi :midi文件Url originalSpeed :mid原始速度 denominator:多少分音符 numerator:小节拍数 interval:回调间隔ms | H5 | 1.获取mid相关播放信息,同时下载mid文件 2.初始化mid播放器成后回调播放总时长midiDuration回调给H5 |
1、示例
xxxxxxxxxx
{
"api" : "cloudGetMediaStatus",
"content" : {
"status" : "suspend"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
status: mid 播放器状态 'init' | ’play‘ | ’suspend‘ | H5 | 获取mid播放器状态 |
1、示例
xxxxxxxxxx
{
"api" : "cloudPlay",
"content" : {
"startTime" : 0,
"hertz" : 440,
"songID" : 0,
"speed" : 90,
"originalSpeed" : 90
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
songID: 当前曲目id originalSpeed: xml整体原始速度 speed: 当前选择速度 startTime: 开始时间(ms) hertz:播放频率 | H5 | mid播放器----播放、播放结束位置、跳转指定位置 |
1、示例
xxxxxxxxxx
{
"api" : "cloudSuspend",
"content" : {
"songID" : 0
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
songID:当前曲目id | H5 | 暂停mid播放 |
1、示例
xxxxxxxxxx
{
"api" : "cloudSetCurrentTime",
"content" : {
"songID" : 0,
"currentTime" : 0
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
songID:当前曲目id currentTime:播放进度 | H5 | 跳转指定位置 |
1、示例
xxxxxxxxxx
{
"api" : "cloudChangeSpeed",
"content" : {
"speed" : 90,
"songID" : 0,
"originalSpeed" : 120
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
songID:当前曲目id speed:调整速度 originalSpeed:曲子原速 | H5 | mid播放调速 |
1、示例
xxxxxxxxxx
{
"api" : "cloudVolume",
"content" : {
"activeMidiId":"12",
"activeMidiVolume":100
"parts" : [
{
"name" : "长笛",
"volume" : 90
}
]
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
activeMidiId:轨道ID activeMidiVolume:播放音了 parts:所有轨道音量参数:(暂未使用) name:声轨名称 volume:音量(0~100) | H5 | 设置每个轨道音量 |
1、示例
xxxxxxxxxx
{
"api" : "cloudDetail",
"content" : {
"numerator" : 4,
"supplement" : 0,
"denominator" : 4,
"repeat" : 1
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
supplement:补拍 repeat:重复节拍次数 denominator:多少分音符 numerator:小节拍数 | H5 | 1.节拍器播放功能,获取播放节拍,速度 2.播放回调,cancel finish的回调 |
1、示例
xxxxxxxxxx
{
"api" : "cloudDestroy",
"content" : {
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
H5 | 销毁mid播放器 |
1、示例
xxxxxxxxxx
{
"api" : "cloudTimeUpdae",
"content" : {
"songID" : 0,
"currentTime" : 0
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
songID:曲目ID currentTime:当前播放进度ms | H5 | mid播放器进度回调给H5 |
1、示例
xxxxxxxxxx
{
"api" : "cloudplayed",
"content" : {
"songID" : 0
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
songID:曲目id | App | mid播放结束回调给H5 |
1、示例
xxxxxxxxxx
{
"api" : "cloudToggleFollow",
"content" : {
"state" : "start",
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
status: 开始、结束跟音(start| end) | H5 | 跟音功能,开启调音器声音检测功能,接收到频率回调时,发送cloudFollowTime 将获取到的frequency 传给H5 |
1、示例
xxxxxxxxxx
{
"api" : "cloudFollowTime",
"content" : {
"frequency" : 587.31,
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
frequency:录音音频频率 | App | App回调跟音录制频率回调给H5 |
1、示例
xxxxxxxxxx
{
"api" : "openAdjustRecording",
"content" : {
"title" : "欢乐颂",
"coverImg" : "https:\/\/www.cdn.dayaedu.com\/sdfsfs.png",
"recordId" : "1231312313213123",
"uuid" : "1703561966859113931"
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
recordId : 评测记录id title: 曲目名 coverImg : 曲目封面 | H5 | App进入合成功能页面 |
1、示例
xxxxxxxxxx
{
"api" : "hideComplexButton",
"content" : {
}
}
2、请求参数说明
参数 | 调用方 | 描述 |
---|---|---|
APP | 合成发布作品成功后App回调,H5隐藏保存演奏按钮 |
1、功能说明:
1)Websocket客户端发送曲目XML文件信息到服务端
2)开始评测前,前端传入需要评测的曲目相关数据和延迟时间,由后端保存,没有返回数据。
2、请求参数示例:
xxxxxxxxxx
{
"header": {
"commond": "musicXml",
"type": "SOUND_COMPARE",
"status": 200
},
"body": {
"musicXmlInfos": [
{
"timeStamp": 0,
"duration": 2400,
"frequency": 175.40781624248606,
"nextFrequency": 185.83810777107092,
"prevFrequency": 165.5629319948733,
"measureIndex": 0,
"measureRenderIndex": 0,
"dontEvaluating": false,
"musicalNotesIndex": 0,
"denominator": 1
},
{
"timeStamp": 2400,
"duration": 2400,
"frequency": 196.88861670901497,
"nextFrequency": 208.59622310265428,
"prevFrequency": 185.83810777107092,
"measureIndex": 1,
"measureRenderIndex": 1,
"dontEvaluating": false,
"musicalNotesIndex": 1,
"denominator": 1
},
{
"timeStamp": 36000,
"duration": 2400,
"frequency": 350.8156324849721,
"nextFrequency": 371.67621554214185,
"prevFrequency": 331.1258639897466,
"measureIndex": 15,
"measureRenderIndex": 15,
"dontEvaluating": false,
"musicalNotesIndex": 15,
"denominator": 1
}
],
"firstNoteTime": 0,
"id": "1113",
"subjectId": 4,
"detailId": 1103,
"examSongId": 1113,
"xmlUrl": "https:\/\/oss.dayaedu.com\/daya\/202108\/SfYmJZ2.xml",
"partIndex": 0,
"behaviorId": "1703729242379352905",
"tenantId": 1,
"platform": "ANDROID",
"clientId": "student",
"speed": 100,
"heardLevel": "ADVANCED",
"beatLength": 2480,
"evaluationCriteria": "frequency",
"uuid": "1703730337571345881"
}
}
3、请求参数说明:
参数 | 类型 | 说明 |
---|---|---|
header | Object | 请求信息 |
commond | String | 请求命令。目前支持的请求命令:musicXml(同步music xml信息),recordStart(开始评测),recordCancel(取消评测),recordEnd(结束评测) |
type | String | 请求类型,目前支持的请求类型:SOUND_COMPARE(评测),DELAY_CHECK(延迟检查),PITCH_DETECTION(校音) |
status | Integer | 固定值200 |
body | Object | 曲目信息 |
musicXmlInfos | Array | 曲目音符信息 |
timeStamp | double | 音符起始时间戳,单位:ms(第一个音符是0ms) |
duration | double | 当前音符持续的播放时间(ms) |
frequency | float | 当前音符的频率 |
nextFrequency | float | 下一个音的频率(不是乐谱中下一个音符的频率),当前音符加上100音分 |
prevFrequency | float | 上一个音的频率(不是乐谱中上一个音符的频率),当前音符减去100音分 |
measureIndex | Integer | 当前音符所在的小节下标(从0开始) |
dontEvaluating | boolean | 当前音符是否需要评测 |
musicalNotesIndex | Integer | 当前音符在整个曲谱中的下标(从0开始) |
denominator | Integer | 多少分音符 |
measureRenderIndex | Integer | |
firstNoteTime | Integer | 第一个音符开始时间 |
id | String | 曲目ID |
subjectId | Integer | 声部ID |
detailId | Integer | 曲目伴奏ID |
examSongId | Integer | 曲目ID |
xmlUrl | String | 曲目xml的url路径 |
partIndex | String | |
behaviorId | String | 行为编号,同一编号为一次 |
tenantId | Integer | 机构ID |
platform | String | 请求来源(设备类型)ANDROID,IOS |
clientId | String | 客户端类型(student,teacher) |
speed | Integer | 曲目评测速度 |
heardLevel | String | 曲目评测难度(BEGINNER:入门级,ADVANCED:进阶级,PERFORMER:大师级) |
beatLength | Integer | 节拍延迟时间 |
evaluationCriteria | String | 曲目评估标准:AMPLITUDE("振幅"),FREQUENCY("频率"),DECIBELS("分贝") |
uuid | String | 请求唯一ID |
4、应答返回
无
1、功能说明:
1)Websocket客户端发送曲目XML文件信息到服务端
2)开始评测,前端传入评测开的的命令信息,没有返回数据。
2、请求参数示例:
xxxxxxxxxx
{
"header": {
"commond": "recordStart",
"type": "SOUND_COMPARE",
"status": 200
}
}
3、参数请求说明:
参数 | 类型 | 说明 |
---|---|---|
header | Object | 请求信息 |
commond | String | 请求命令。目前支持的请求命令:musicXml(同步music xml信息),recordStart(开始评测),recordCancel(取消评测),recordEnd(结束评测) |
type | String | 请求类型,目前支持的请求类型:SOUND_COMPARE(评测),DELAY_CHECK(延迟检查),PITCH_DETECTION(校音) |
status | Integer | 固定值200 |
4、应答返回
无
1、功能说明:
1)Websocket客户端发送曲目XML文件信息到服务端
2)评测开始后,前端将录制的音频数据流通过Websockt发送到服务端。服务端解析数据流,当数据流满足一个小节长度后,返回当前小节的分数。
2、请求参数示例:
无
3、应答返回:
当数据流满足一个小节长度后,返回当前小节的分数:
xxxxxxxxxx
{
"body": {
"score": 0,
"measureIndex": 5,
"measureRenderIndex": 5
},
"header": {
"commond": "measureScore",
"status": 200,
"type": "SOUND_COMPARE"
}
}
4、返回参数说明:
参数 | 类型 | 说明 |
---|---|---|
header | Object | 请求信息 |
commond | String | 固定值measureScore |
type | String | 请求类型,目前支持的请求类型:SOUND_COMPARE(评测),DELAY_CHECK(延迟检查),PITCH_DETECTION(校音) |
status | Integer | 固定值200 |
body | Object | 返回小节分数信息 |
score | Integer | 小节分数 |
measureIndex | Integer | 第几小节 |
measureRenderIndex | Integer | 第几小节 |
1、功能说明:
1)Websocket客户端发送取消评测/结束评测命令信息到服务端
2)前端发送取消评测/结束评测命令给后端,后端接收到命令后生成评测报告和录音文件、并保存到数据库中。返回评测结果给客户端。
2、请求参数示例:
结束评测
xxxxxxxxxx
{
"header": {
"commond": "recordEnd",
"type": "SOUND_COMPARE",
"status": 200
}
}
取消评测
xxxxxxxxxx
{
"header": {
"commond": "recordCancel",
"type": "SOUND_COMPARE",
"status": 200
}
}
3、请求参数说明:
参数 | 类型 | 说明 |
---|---|---|
header | Object | 请求信息 |
commond | String | 请求命令。目前支持的请求命令:musicXml(同步music xml信息),recordStart(开始评测),recordCancel(取消评测),recordEnd(结束评测) |
type | String | 请求类型,目前支持的请求类型:SOUND_COMPARE(评测),DELAY_CHECK(延迟检查),PITCH_DETECTION(校音) |
status | Integer | 固定值200 |
4、应答返回:
xxxxxxxxxx
{
"recordId": 9248,
"score": 0,
"intonation": 0,
"integrity": 0,
"totalPlayTimeOfCurrentDate": 42,
"playTime": 4800,
"cadence": 0
}
5、应答参数说明:
参数 | 类型 | 说明 |
---|---|---|
recordId | Integer | 评测记录ID |
score | Integer | 评测总分 |
intonation | String | 音准分数 |
integrity | Integer | 完成度分数 |
totalPlayTimeOfCurrentDate | Object | 总演奏时长 |
playTime | Integer | 演奏时长(ms) |
cadence | Integer | 节奏分数 |
###