工作中接触musicxml文件,这里只涉及到解析musicxml,所以大部分精力是来介绍musicxml的元素的。小编的译文。

一、musicxml简介


musicxml有两类元素:一类用来标识音乐应该怎样播放,这些元素通常可以被用来导出MIDI文件。另一类用来标识音符在五线谱等上的位置,即谱面,这些元素可以导出xml格式的文件,Finale软件可以渲染为可读的谱面。

二、musicxml关键元素

第一部分先来接触有关导出midi的元素

<attributes><divisions>24</divisions><key><fifths>-3</fifths><mode>minor</mode></key><time><beats>3</beats><beat-type>4</beat-type></time>
</attributes>


attributes标签包含的信息有:时值标识,调号标识,位置,谱号和一些其他标识。这些信息包含在attributes中,通常放在第一小节。

1、Atrributes

attributes标签包含了很多跟midi播放有关的信息。

1. divisions


divisions标签通常用来标识几分音符:全音符、二分音符、四分音符等等。musicxml中的division定义了四分音符的时值,其他音符通过跟division的倍数关系就可以确认duration。

2. key


key定义了调号。其中的fifth标签中的数字标识升降,比如-3标识降E调。然后其中的mode标签标识的就是用来区分记法相同的大小调式的。

3. time


time标签是用来标识拍号的。其中beat标签标识分子,beat_type用来标识分母。在上例中,标识3/4,以四分音符为一拍,每小节有三拍。

<note><pitch><step>E</step><alter>-1</alter><octave>5</octave></pitch><duration>24</duration><tie type="start"/><lyric><syllabic>end</syllabic><text>meil</text><extend/></lyric></note>

2、note

note为一个具体的音符,包含了很多音符信息

1.pitch


在每个note中pitch被分成三个子标签用来标识音:step、alter、octave
step标识:A-G中的某个音符
alter标识:这个音的升降(-1降调 1 升调)
octave标识:这个音所在八度(4标识中央C)

例子中的pitch渲染之后就是红色圈出的部分

2. duration


duration是一个整数,它标识一个音符以四份音符(division)为单位的倍数时值。比如,divisions等于24,那么一个四分音符的时值,就是24,那么八分音符的三连音时值是8,并且每个八分音符就是12.


问题区:

Q1:四分音符的时值(duration)怎么计算得到?

MusicXML中计算音符时值采用的方法是相对倍数法(我给起的名字)。涉及到的具体标签是<divisions><duration>。其中每个XML文件中只会定义一个固定值得divisions作为所有音符的参考数值,divisions的含义是:四分音符的时值单位。duration则直接表示音符的时值信息,其数值就是根据divisions计算出来。

# 例1
设 divisions = 4,
那么 二分音符 duration = 8四分音符 duration = 4八分音符 duration = 216分音符 duration = 1
# 由此可以看出division=4能够表示的极限音符为16分音符
# ?如果出现32分音符怎么办呢?我们可以增大division的数值来解决# 例2
设 divisions = 64,
那么 二分音符 duration = 128四分音符 duration = 64八分音符 duration = 3216分音符 duration = 1632分音符 duration = 8...八分音符的三连音时值 duration = 64 / 3 不为整数所以增大了 divisions之后也不是万能的,需要根据实际分配情况设定divisions数值

Q2: 导出的Musicxml中的速度标记?

导出xml中的速度标记有两种情况,如图

记法1 Andante
这种记法是将Andante作为数值,放在word标签中

这种记法的关键字Andante所对应的速度有具体的含义,参考音乐术语

记法2 四分音符=86
这种标签通常使用 <metronome> 标签标识

解析时需要注意在这两种记法中选择好主次关系。

Q3:根据速度节拍计算小节时长和音符时长

根据Q2的速度记法,我们可以从MusicXml中获取整首曲子的速度(速度标识每分钟多少拍,具体的拍子要看曲子的节拍),速度为60意思就是每分钟演奏60拍,速度为90标识每分钟90拍,有的时候会明确四分音符=60标识每分钟60拍,单拍是四分音符。举例计算一下

假设1、第一小节节拍 2/42、速度为603、第一小节全为四分音符时那么有>第一小节的时长是:第一小节节拍 * 第一小节beat-type / 速度 = 2/4 * 4/60 = 1/30 分钟 = 2秒>而一个音符则是:节拍 * 第一小节beat-type / 速度 * (音符duration/小节总duration) = 2/4 * 4 /60 * (4/8) = 1/60分钟 = 1秒假设(通用-变拍)1、第一小节节拍 2/42、目标小节变拍 3/83、速度为60
那么有> 小节的时长是:本节拍 * 第一小节beat-type / 速度 = 3/8 * 4 / 60 = 1/40 分钟 = 1.5s公式:小节时长 = (beats / beat-type) * 第一小节beat-type / speed音符时长 = note duration / measure duration * 小节时长
>注意:beats beat-type都能从<time>标签中获取
>note duration要从note的<duration>标签中取
>小节的要从<backup>的<duration>中获取
>注意变拍情况

musicxml文档笔记(待续)相关推荐

  1. Vue官网2文档笔记

    文章目录 $event $on Class 与 Style 绑定 对象语法 列表渲染 v-for 中使用对象 事件处理 事件修饰符 插槽 具名插槽 解构插槽 prop 动态组件&异步组件 访问 ...

  2. NE40E华为产品文档-----笔记(2022.9.28)

    ** NE40E华为产品文档-----笔记(2022.9.28) ** P34开始 全连接full Mesh 中文解释:全网状 英文来历:Full Mesh表示网络的一种连接形式,即所有结点之间都直接 ...

  3. HOOMD Blue 文档笔记

    HOOMD Blue文档笔记 基于hoomd 1.0.2 userdoc http://codeblue.umich.edu/hoomd-blue/doc/index.html 3. 快速开始 例程: ...

  4. 这几款文档笔记工具,你习惯用哪个?

    前言 俗话说的好:"好记性不如烂笔头",平时工作记录笔记的确是一个良好的习惯,做文档笔记可以在我们遗忘时进行回看,方便查找,代替人的大脑.有时程序写多了,很不愿意去强制记忆一些东西 ...

  5. 文档笔记----nodejs菜鸟教程

    <html><head><meta charset="utf-8"><title>文档笔记----nodejs菜鸟教程</ti ...

  6. 文档 笔记 我全都要

    不知道你在平时工作或学习中,会不会经常写文档.记笔记 ~~ 笔者建议大家试着多写写文档 多记记笔记.把自己工作学习中遇到的问题,解决的方法都记录下来,别人写的好的文章也可以保存一下.长期下来 你会发现 ...

  7. html5教学文档笔记,4.HTML 教程- (HTML5 基础)

    HTML 教程- (HTML5 基础) 1.HTML 标题 HTML 标题(Heading)是通过 - 标签来定义的. 2.HTML 段落 HTML 段落是通过标签 来定义的. 3.HTML 链接 H ...

  8. 华为技术官又出神作,鸿蒙操作系统完整文档笔记现已疯传

    操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,用户和计算机的接口,同时也是计算机硬件和其他软件的接口. 其能管理计算机系统的硬件.软件及数据资源, ...

  9. Apple Developer文档笔记(一)AppKit App Structure

    导语 这篇文章是方便自己学习理解苹果开发者的文档的笔记,希望能给有需要的同学一些帮助,因为自己翻译理解的内容, 必然存在一些不足,还望指出. Apple Developer (https://deve ...

最新文章

  1. hdu4930 模拟斗地主
  2. 面向服务的分析与设计原理
  3. sql中实现取得某字段中数字值
  4. react学习(46)----react渲染组件
  5. 认识Linux下的硬盘分区
  6. java 在已有的so基础上封装jni_webshell中的分离免杀实践java篇
  7. 服务器进bios修改启动顺序,服务器进入bios设置u盘启动
  8. PyCharm中的快捷键不能用怎么办?(复制粘贴)
  9. Day 05 模板层相关
  10. 屏幕小于6英寸的手机_2019小屏手机有哪些 8款6英寸以下小屏全面屏手机推荐 (全文)...
  11. ZYNQ-7 PS的中断
  12. 真传丹道小周天功.txt
  13. 我国数学家丁小平先生在微积分研究领域所取得的成就
  14. 【ShaderToy】基础篇之谈谈点、线的绘制
  15. 【 bzoj 4355 】 Play with sequence - 线段树乱搞
  16. 如何理解普吕克坐标(几何理解)
  17. 我的见解之hibernate(八)
  18. PTA 谷歌的招聘(java)
  19. 大华视频会议系统服务器配置,浙江大华视频会议解决方案-v-20210727005844.pdf-原创力文档...
  20. echarts 地图上边画柱状图

热门文章

  1. 【解决】RESP.app GUI for Redis 连接不上redis服务器
  2. ST公司 L9963T - 汽车通用SPI到隔离SPI收发器
  3. 广西大学计算机专业分流,《广西大学中加国际学院学生专业分流管理办法》的翻译项目报告.pdf...
  4. table表格设置圆角
  5. 美国运通利用i2c技术提高金融科技公司在其网络上发卡的速度
  6. 基于highway的数据采集
  7. leetcode 1523. 在区间范围内统计奇数数目
  8. 1Password mac使用指南
  9. 视频教程-Linux系列课程(基础篇)-Linux
  10. 光机电一体化综合实训系统