各位朋友们好,公司在承接一个项目,这个项目是和五线谱相关,其主要目的是答题环节。
目前定的技术方案是:uniapp+ webview+abcjs 实现五线谱的展示和编辑,但目前有个技术问题,想请教各位:
1 、需要实现一个和 KTV 实时评分类似的功能:一个是标准音线,另外一个是获取用户发出的音调音线,通过实时对比两条音线,来评判用户发出的声音是否符合标准音。
有没有大佬提供思路,或者相关的开源代码供其参考和研究。 另外不知有没有人使用过 abcjs ,这里面存不存在什么坑,可以提前告知一下。
在此十分感谢大家!
1
baojunz OP 另外还有一个问题,就是实现 abcjs 实现在音符的编辑和插入的功能,找到了 abcjs quick editor 相关源码,但是不知道内部是如何实现的。我们想在此添加一些事件
|
2
a67793581 36 天前
付费咨询了解一下
|
3
jipfqf 36 天前
应该参考在线吉他或尤克里里这种的调音器吧,本质都是对比音调
|
4
Davy 36 天前
问过 ai 了吗?
|
6
NoDataNoBB 36 天前
找个网页版的调音器,看看代码
|
7
maybedk 36 天前
玩过一些音乐,了解一点乐理。人类唱歌发音是泛音不是单音,KTV 那个非常不准,只能是娱乐。如果想做唱歌音准识别的话感觉会涉及一些非常专业的算法。
|
11
BBrother 36 天前
这跟五线谱有什么关系?然后识别单音还是一段旋律?需不需要时值完全对应?
如果时值需要完全对应那就: 1. 根据音符时值截取人声音频 2. 傅里叶变换 3. 找出主音频率 4. 跟音符对应的频率对比 如果不需要在时值上进行对应只需要识别音高的准确性: 1. 根据当前音符时值设置时间窗口 2. 在超时范围内滑动时间窗口获取若干段音频 3. 傅里叶变换 4. 找出主音频率跟音符对应的频率对比 5. 找到匹配的就进行下一个音符的匹配 6. 否则在超时前重复之前步骤 7. 超时判定为当前音符不匹配 以上方法为本人瞎编的,不对结果的准确性负责。 |
13
ETiV 35 天前
笑死,我知道你要做啥。。。
这是我当年在盛大《巨星》项目组的时候传到 YouTube 上的游戏内录视频…… |
14
shadowyue 35 天前
和五线谱没啥关系的啦
你从获取麦克风的录音数据开始入手,先看看获取到的音频数据是怎么样的, 然后补充一些声音相关的物理知识,尝试把收到的声音能画出你想要的声音图像。 你能做到这一步应该基本就有整体思路和方案。 |
15
csulyb 35 天前
就是频率对比 用 fast 傅里叶时域转频域就可以了
之前写过调音的程序 就是这样做的 可以提供付费咨询 |
16
ccpp132 35 天前
分时做傅立叶变换,可以找点数字信号处理或者数字音频输出的资料看看,应该都有
|
17
ETiV 35 天前
你要做的应该分两部分,谱面编辑器(你以为跟五线谱有关系的)、主游戏流程
编辑器的 UI 你参考一下音乐编辑软件( GarageBand 、FL Studio 、初音……),他们的样子都是横向的钢琴卷帘窗,横轴表示时间、纵轴表示音高;交互也可以参考一下,一般是鼠标拖动 note 在激活新的音高的时候会播放对应的音高。 这都是标准界面,扒谱的人应该也用得来这个东西,用不来就换一个人。。。 随便找了个视频,你参考下 UI/UX …… 在 Web 上做编辑器的话,音频播放,Chrome 支持 Web MIDI API ,可以低延迟的播放对应的音高,对应的库么,看看 https://github.com/mudcube/MIDI.js ? 游戏主流程就是波形转频率了 可以看这个 demo …… https://cwilso.github.io/PitchDetect/ 游戏过程中就是把你检测到的音高+时长,和你编辑器里导出的谱子去做比较就行了 |
18
raphaelsoul 35 天前
十二平均律就是声音频率 直接 mic 获取声音分析出频率 再去对照一下 CDEFGAB 各个音的频率即可
|
19
catamaran 35 天前
|
20
rekulas 35 天前
abcjs 确实很完善,坑就坑在它的音符设定很反人类。。。
|
21
ibuki233 35 天前
楼主是单纯要 KTV 、音游的那种音高比对系统,还是要把这种音高识别对应到 [五线谱] 这个特定媒介上?
|
22
jadeborner 35 天前
顺便问下有没有简谱转五线谱,各调转 c 调的接口
|
23
dapang1221 35 天前
原唱去伴奏,留人声轨,转时频图,然后用户声音实时转时频图,这样你就得出了某一时刻,原唱和用户的频域特征,这俩计算就行了,是简单粗暴相减还是算平方差等等,看你们需求的精细程度了。时频图可以做 FFT 变换算出来
|
24
dapang1221 35 天前
噢没看清,输入是五线谱啊。其实每个音高(或者说每个五线谱的小蝌蚪)都有自己的频域特征,有五线谱数据就能直接计算出来了,然后再和用户的时频图计算
|