#反序列化 #中间表示 #序列化 #XML数据 #MusicXML

muxml

用于将MusicXML文件序列化和反序列化为中间表示的Rust库

3个版本

0.1.3 2023年11月18日
0.1.2 2023年11月17日
0.1.1 2023年11月16日
0.1.0 2023年11月11日

#861编码

GPL-3.0-only

25KB
606

muxml-rust

Rust中对MusicXML的序列化支持

一个用于将MusicXML文件序列化为Rust原生数据类型的Rust库。

它并不打算全面。目标是保留MusicXML中信息最相关的元素,而不是完整的排版和格式化信息。

因此,这个库可能无法满足您应用的需求。

它是更大项目(非开源)的一部分,该项目与将机器学习应用于音乐数据相关。

crates.io上的原始版本(已被撤回)包括反序列化支持。然而,该实现是不对称的,因为反序列化过程使用roxml crate从输入XML中提取相关数据的子集以将其编码到中间数据格式。

这里的目的是让最终的反序列化实现使用serde/quick-xml进行反序列化。

待办事项

  • 添加支持编码单部分总谱
  • 使错误处理系统对现有消费者不那么侵入性
  • 实现反序列化支持
  • 添加rustdoc文档
  • 实现全面的单元测试
  • 添加对无调音符元素/打击乐的支持
  • 添加对各种MusicXML元素的支持

注意:此项目处于预Alpha状态,API频繁且重大更改。

安装

要求

  • Rust 1.56+

导入

此crate可在crates.io上使用。要在您的应用程序中使用它,只需将其添加到项目的Cargo.toml中。

[dependencies]
muxml = "0.1.3"

使用

### Serialize from structs to MusicXML

```rust
use muxml::de::xml_to_ir;
use muxml::error;
use muxml::error::Result;
use muxml::ser::ir_to_xml;
use std::fs::{self, File};
use std::io::{BufWriter, Write};
use std::path::PathBuf;

pub fn process_xml_multipart(input: PathBuf, output: PathBuf, dump_input: bool) -> Result<()> {
    let outfile = File::create(output).expect("IO Error Occurred");
    let mut writer = BufWriter::new(outfile);

    let score = ScoreBuilder::new()
        .work_title("Eine kleine Nachtmusik".to_string())
        .composer("Mozart".to_string())
        .software("muxml rust crate".to_string())
        .encoding_date("08/22/1983".to_string())
        .build();

    let output_xml = encode_muxml(score);
    writer
        .write_all(output_xml.as_bytes())
        .expect("IO Error occurred on write_all()");
    writer
        .flush()
        .map_err(|e| error::Error::IoKind(e.kind().to_string()))?;

    Ok(())
}

依赖

~5.5–7.5MB
~136K SLoC