在 Swift 中实现的 MusicXML 规范
此软件包是原始 dn-m/MusicXML 的一个分支。
一个 正在进行中 的 Swift 中 musicXML 规范的实现。
此项目的目标是允许 Swift 用户以类型丰富的方式在 Swift 支持的任何平台上读取、操作和编写 musicXML 文件。
让我们从 musicXML 文档中构建“Hello, world!”乐谱示例。 这个音乐作品由一个小节组成,该小节包含以 4/4 拍为基础的中音 C 上的全音符。
以图形方式呈现时,此乐谱示例应如下所示
musicXML 表示如下所示
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-partwise PUBLIC
"-//Recordare//DTD MusicXML 4.0 Partwise//EN"
"http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise version="4.0">
<part-list>
<score-part id="P1">
<part-name>Music</part-name>
</score-part>
</part-list>
<part id="P1">
<measure number="1">
<attributes>
<divisions>1</divisions>
<key>
<fifths>0</fifths>
</key>
<time>
<beats>4</beats>
<beat-type>4</beat-type>
</time>
<clef>
<sign>G</sign>
<line>2</line>
</clef>
</attributes>
<note>
<pitch>
<step>C</step>
<octave>4</octave>
</pitch>
<duration>4</duration>
<type>whole</type>
</note>
</measure>
</part>
</score-partwise>
在 Swift 中构建“Hello, world!”示例看起来像这样
let note = Note(
pitch: Pitch(step: .c, octave: 4),
duration: 4,
type: .whole
)
let key = Key(fifths: 0)
let time = Time(4,4)
let clef = Clef(sign: .g, line: 2)
let attributes = Attributes(
divisions: 1,
keys: [key],
times: [Time(
[
Time.Signature(
beats: ["4"],
beatType: ["4"]
)]
)],
clefs: [clef]
)
let measure = Partwise.Measure(
number: "1",
musicData: [
.attributes(attributes),
.note(note)
]
)
let part = Partwise.Part(id: "P1", measures: [measure])
let header = Header(
partList: [
.part(ScorePart(id: "P1", name: "Music"))
]
)
let traversal = Partwise(header: header, parts: [part])
let score = Score.partwise(traversal)
您可以通过多种方式解码 Score
let fromData = try Score(data: data)
let fromString = try Score(string: string)
let fromURL = try Score(url: url)
预发布版本 0.3.0 将完成从 Score
到 musicXML 格式的编码。
使用 Swift Package Manager 将 SwiftMXL
模块包含到您的项目中。
要为 SwiftMXL
软件包做出贡献,请克隆 git
存储库
git clone git@github.com:Treata11/SwiftMXL.git && cd SwiftMXL
构建软件包
swift build
运行测试
swift test
open package.swift
或直接 xed .
即将发布的预发布版本将侧重于完成不同的任务。
预发布版本 0.3.0 将通过完成对 抽象音乐内容 的 编码 的实现来定义。 LilyPond 测试套件测试将被转换为往返测试,以确保管道畅通。
预发布版本 0.4.0 将通过改进 SwiftMXL
软件包公开的公共接口来定义。 在此之前,公共初始化器可能有些笨拙。
有关 MusicXML 结构方式的更多信息,请参阅 MusicXML XSD 架构参考。