# MusicXML2JSON-Drum

npm GitHub

专为打击乐设计的 MusicXML → JSON 转换工具,精准解析鼓谱,生成结构化数据,助你高效处理节奏信息。

📚 建议在使用前先阅读 W3C MusicXML 4.0 规范 (opens new window)

# 🌟 特性亮点

  • 🎯 专项优化:精准提取打击乐谱的音符、节拍、时值等核心数据
  • 📦 结构化输出:层次分明的 JSON 格式,便于后续加工处理
  • 即装即用:零配置开箱即用,亦支持深度自定义
  • 🧩 纯 TypeScript 实现:无第三方依赖,轻量高效

# 🚀 快速开始

# 安装

# 使用 npm
npm install musicxml2json-drum

# 使用 yarn
yarn add musicxml2json-drum

# 使用 pnpm
pnpm add musicxml2json-drum
1
2
3
4
5
6
7
8

# 🧪 使用示例

import { Parser } from 'musicxml2json-drum'

const configs = {
  36: { code: 36, name: 'Kick', value: [36], index: 0 },
  38: { code: 38, name: 'Snare', value: [38, 125], index: 1 },
  42: { code: 42, name: 'Hi-Hat', value: [42, 22], index: 2 },
  // ...其余配置
}

const xmlStr = await loadXMLStr('example.xml')

const parser = new Parser({ xmlStr, instrumentConfig: configs })

// parser.result 可获取解析后的 JSON 结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 🧾 JSON 输出示例

以下为转换后的数据结构部分内容(节选):

{
  "parts": [
    {
      "duration": 0,
      "measures": [
        {
          "id": "M_1",
          "notes": [
            {
              "type": "whole",
              "kind": "rest"
            }
          ],
          "timeSignature": {
            "beats": 4,
            "beatType": 4
          },
          "metronome": {
            "beatUnit": 4,
            "bpm": 90
          }
        },
        {
          "id": "M_2",
          "notes": [
            {
              "type": "eighth",
              "kind": "chord",
              "data": [
                { "code": 36, "name": "Kick" },
                { "code": 45, "name": "Tom2" },
                { "code": 43, "name": "Tom3" }
              ]
            },
            {
              "type": "half",
              "kind": "rest",
              "dot": "single"
            }
          ]
        }
      ]
    }
  ],
  "title": "Action To Win"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 📘 API 文档

👉 查看完整文档

# 🎛️ 在线演示

👉 立即试用 (opens new window)

更新时间: 2025/4/27 08:57:05