3个版本
0.1.3 | 2023年11月18日 |
---|---|
0.1.2 | 2023年11月17日 |
0.1.1 | 2023年11月16日 |
0.1.0 |
|
#861 在 编码
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