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段录音。

ccmusic-database

CCMUSIC DATASET

Multi-functional Music Database for MIR Research

CCMUSIC DATASET

写邮件发过来压缩包

扩充数据集

官方数据集完整218首,扩充至300首。

自行下载,裁剪至60s内,转换格式为.wav

MP3文件存储路径:

E:\1五音项目整体\1_五音乐曲汇总\MP3\20230829有效五音乐曲116首

乐曲下载完毕统一转换格式为.wav。

QQ音乐格式转换,解锁加密音乐,转mp3格式,酷狗、网易云也能用!

音乐解锁工具v1.10.3_免费高速下载

扩充后300首数据集下载 链接: https://pan.baidu.com/s/1oU8oHhHMHlrg9VrA6xLs4Q?pwd=v35s 提取码: v35s 复制这段内容后打开百度网盘手机App,操作更方便哦

理论介绍

image

看似四类,实际上只有两类,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个模板中最相关的

模板由一个基础的移动得到

image

同宫系统/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]

image

Type

0--五声/Pentatonic
1--六声(清角)/Hexatonic (Qingjue) 
2--六声(变宫)/Hexatonic (Biangong) 
3--七声雅乐/Heptatonic Yayue
4--七声清乐/Heptatonic Qingyue
5--七声燕乐/Heptatonic Yanyue

原文可找到模板,至于调式类型识别,根据每种调式对应的音阶,获得由0和1组成的模板,并使用与TongGong体系识别类似的计算方法获得结果。

原理同System的识别。

image

    '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得到

image

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

标签

image

识别调式策略

System同宫系统+Tonic主音=Pattern模式

方法一:用两个单任务直接预测主音(Tonic)模式(Pattern)

方法二——BaseLine采用:用两个单任务预测系统(System)主音(Tonic),计算出模式(Pattern)——公式:System同宫系统+Tonic主音=Pattern模式

方法三:用一个多任务模型识别系统(System)主音(Tonic)模式(Pattern)

同音系统称为“系统”主音的音调称为“主音”,模式模式称为“模式”,模式类型称为“类型”System/Tonic/Pattern/Type)。分类时的主要任务是识别模式(Pattern)和主音(Tonic),以系统(System)作为辅助项目,然后是类型(Type)分类作为次要任务。