始于
分类:MRS
Tags: [ MRS ]
包含了音乐推荐系统数据集和音乐理论
MRS数据集及音乐理论
Music-Recommendation-System
文献下载
AUTOMATIC CHINESE NATIONAL PENTATONIC MODES RECOGNITION USING CONVOLUTIONAL NEURAL NETWORK
CNPM Database数据集
一个用于计算音乐学的中国民族五声调式数据库
数据集:CNPM (Chinese National Pentatonic Modes) Dataset 中国五声数据集
Hugging Face下载
https://huggingface.co/datasets/ccmusic-database/CNPM
$ git clone https://huggingface.co/datasets/ccmusic-database/CNPM
音频
音频经过裁剪,只有角和商音,时长在15-30s左右
26首商音乐曲,43首角音乐曲
dataset文字结构
| 曲名/Title | 演奏者/Artist | 专辑/Album | 调式全称/Mode Name | 文件名/File Name | 同宫系统/System | 主音音名/Tonic | 样式/Pattern | 种类/Type | 时长/Length | 备注/Note |
|---|---|---|---|---|---|---|---|---|---|---|
| 1级-小鸟朝凤 | 儿童歌曲 | D宫清乐七声 | 1级-小鸟朝凤 - 儿童歌曲.mp3 | 2 | 2 | 0 | 4 | 0:01:53 | ||
| 暗香 | 纯音乐 | 月满西楼 | G宫七声清乐 | 暗香 - 纯音乐.mp3 | 7 | 7 | 0 | 4 | 0:03:35 |
命名格式:jue1.wav、shang1.wav
分析的都是.wav文件,MP3是加密过的。如同.docx文件转换为PDF文件。
将模式所属的同音系统称为“系统”,主音的音调称为“主音”,模式模式称为“模式”,模式类型称为“类型”(System/Tonic/Pattern/Type)。分类时的主要任务是识别模式(Pattern)和主音(Tonic),以系统(System)作为辅助项目,然后是类型(Type)分类作为次要任务。根据主音t和系统s,我们可以推断出该模式的模式。当t等于s时,它是锣模式。当t比s高2个半音时,为尚模式。4个半音高是觉模,7个半音高是志模,9个半音高是于模。
完整版CCMUSIC DATASET申请
数据集包含287段录音。
Multi-functional Music Database for MIR Research
写邮件发过来压缩包
扩充数据集
官方数据集完整218首,扩充至300首。
自行下载,裁剪至60s内,转换格式为.wav
MP3文件存储路径:
E:\1五音项目整体\1_五音乐曲汇总\MP3\20230829有效五音乐曲116首
乐曲下载完毕统一转换格式为.wav。
QQ音乐格式转换,解锁加密音乐,转mp3格式,酷狗、网易云也能用!
扩充后300首数据集下载 链接: https://pan.baidu.com/s/1oU8oHhHMHlrg9VrA6xLs4Q?pwd=v35s 提取码: v35s 复制这段内容后打开百度网盘手机App,操作更方便哦
理论介绍

看似四类,实际上只有两类,System和Tonic一类,Pattern和Type一类。Pattern由System和Tonic比较得到,Type由Pattern加偏音得到。所以只需要识别System和Tonic即可。
主要是为了识别Pattern和Tonic,System识别是辅助项目,其次是类别分类。
12个System,12个Tonic,5个Pattern,6个Type
将模式所属的同音系统称为“系统”,主音的音调称为“主音”,模式模式称为“模式”,模式类型称为“类型”。
系统(System):同宫系统
主音(Tonic):GABDE
模式(Pattern):宫商角徵羽
类型(Type):五声、六声
标签中的12356对应的是 GABDE
System
整首进去,匹配12个模板中最相关的
模板由一个基础的移动得到

同宫系统/TongGong System:
0--C
1--#C/bD
2--D
3--#D/bE
4--E
5--F
6--#F/bG
7--G
8--#G/bA
9--A
10--#A/bB
11--B
分析待识别乐曲的音阶模式,与12个模板分别比对,分别计算色度向量与每个模板之间的皮尔森相关系数,取最大的那一个模板即为待识别乐曲的TongGong体系System类型。
参考文献:C TongGong体系的模板是1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0,其他的可以通过在循环中移动模板来获得。
这些数组代表了一个十二音阶系统中的不同音级(从C到B)的音阶模式。每个数组都是一个音阶模式,其中 1 表示该音级在音阶中出现,而 0 表示不出现。这些模式是通过将基础模式(在这个例子中是C TongGong体系)沿着十二音阶系统循环移位来生成的。
让我们将每个数组与相应的音级对应起来:
C - [1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0]:这是C TongGong体系的基础模式。
C# - [0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0]:这是将C TongGong模式向右移动一个音级得到的。
D - [0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1]:这是将C TongGong模式向右移动两个音级得到的。
D# - [1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0]:这是将C TongGong模式向右移动三个音级得到的。
E - [0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1]:这是将C TongGong模式向右移动四个音级得到的。
F - [1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0]:这是将C TongGong模式向右移动五个音级得到的。
F# - [0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0]:这是将C TongGong模式向右移动六个音级得到的。
G - [0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1]:这是将C TongGong模式向右移动七个音级得到的。
G# - [1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0]:这是将C TongGong模式向右移动八个音级得到的。
A - [0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1]:这是将C TongGong模式向右移动九个音级得到的。
A# - [1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0]:这是将C TongGong模式向右移动十个音级得到的。
B - [0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1]:这是将C TongGong模式向右移动十一个音级得到的。
每次移位都相当于在十二音阶系统中向上移动一个半音。这种方法可以用来生成任何音级的特定音阶模式。
Tonic
最后500帧的色度特征按音高求和,最大值对应的音高名称
Tonic:
0--C
1--#C/bD
2--D
3--#D/bE
4--E
5--F
6--#F/bG
7--G
8--#G/bA
9--A
10--#A/bB
11--B
然后对于主音音高,由于我们分析的大多数音乐在最后都回到主音,因此我们使用一种简单的方法来识别主音:直接将最后500帧的色度特征按音高求和,并将最大值对应的音高名称视为主音音高。
# 音高名称列表
pitch_names = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']
tonic_index = np.argmax(np.sum(chroma[:, -500:], axis=1))
tonic = pitch_names[tonic_index]

Type
0--五声/Pentatonic
1--六声(清角)/Hexatonic (Qingjue)
2--六声(变宫)/Hexatonic (Biangong)
3--七声雅乐/Heptatonic Yayue
4--七声清乐/Heptatonic Qingyue
5--七声燕乐/Heptatonic Yanyue
原文可找到模板,至于调式类型识别,根据每种调式对应的音阶,获得由0和1组成的模板,并使用与TongGong体系识别类似的计算方法获得结果。
原理同System的识别。

'Heptatonic Yanyue': np.array([1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0]),
'Heptatonic Qingyue': np.array([1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0]),
'Heptatonic Yayue': np.array([1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]),
'Hexatonic (Biangong)': np.array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]),
'Hexatonic (Qingjue)': np.array([1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1]),
'Pentatonic': np.array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1])
Pattern
Pattern = Tonic+System
调式样式/Mode Pattern:
0--宫/Gong
1--商/Shang
2--角/Jue
3--徵/Zhi
4--羽/Yu
通过System和Tonic得到

half_tone_difference = (tonic_number - System_number) % 12# 计算半音差距
if half_tone_difference == 0:# 根据半音差距判断模式
pattern_number = 0
elif half_tone_difference == 2:
pattern_number = 1
elif half_tone_difference == 4:
pattern_number = 2
elif half_tone_difference == 7:
pattern_number = 3
elif half_tone_difference == 9:
pattern_number = 4
else:
return '无法确定模式Pattern'
数组[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1] 与 Pentatonic的对应关系是基于音乐理论中五声音阶的结构得来的。在这个上下文中,数组中的每个数字代表一个特定的音高(或音级)在音阶中是否出现。1 表示该音级在音阶中出现,而 0 则表示不出现。
五声音阶由五个音组成,通常在西方音乐中以C大调五声音阶为例,其音级为 C, D, E, G, A。这个音阶中省略了F和B(在C大调中的第四和第七音级)。在一个完整的十二音级系统中,这可以表示为:
C (出现)
C# (不出现)
D (出现)
D# (不出现)
E (出现)
F (不出现)
F# (不出现)
G (出现)
G# (不出现)
A (出现)
A# (不出现)
B (不出现)
最终目的,根据已有数据集训练出五类乐曲(Pattern)的模板,再传入未知乐曲输出对应的Pattern。
计算公式
Tonic-System=>Pattern
System+Pattern=>Tonic
Tonic-Pattern=>System
标签

识别调式策略
System同宫系统+Tonic主音=Pattern模式
方法一:用两个单任务直接预测主音(Tonic)和模式(Pattern)
方法二——BaseLine采用:用两个单任务预测系统(System)、主音(Tonic),计算出模式(Pattern)——公式:System同宫系统+Tonic主音=Pattern模式
方法三:用一个多任务模型识别系统(System)、主音(Tonic)和模式(Pattern)
同音系统称为“系统”,主音的音调称为“主音”,模式模式称为“模式”,模式类型称为“类型”(System/Tonic/Pattern/Type)。分类时的主要任务是识别模式(Pattern)和主音(Tonic),以系统(System)作为辅助项目,然后是类型(Type)分类作为次要任务。