ncm_parser-0.3.0 has been yanked.
ncm_parser
A single file ncm parser. Here, the ncm is an encrypted
music file format which is widely used on NeteaseCloudMuic.
For more details see
https://www.cnblogs.com/cyx-b/p/13443003.html
API Documentation is avaliable here.
一个单文件实现的 .ncm 解析器。
Minimum Required Rust Version
Nightly now. 4 nightly-only features are enabled in this crate:
#![feature(iter_next_chunk)]
#![feature(iter_advance_by)]
#![feature(iterator_try_collect)]
#![feature(doc_auto_cfg)]
Once these features get stable, the version number of this crate will bump up to 1.0.0.
Examples
use ncm_parser::NCMMetadata;
use std::fs::File;
use std::io::{Read, Write};
use std::path::Path;
fn main() {
let mut ncm_file = Vec::new();
let ncm_file_name = Path::new("xxx.ncm");
File::open(ncm_file_name)
.unwrap()
.read_to_end(&mut ncm_file)
.unwrap();
let mut ncm_file_from_iter =
ncm_parser::from_iter(ncm_file.into_iter()).unwrap();
let mut ncm_file_from_reader =
ncm_parser::from_reader(File::open(ncm_file_name).unwrap()).unwrap();
assert_eq!(
ncm_file_from_iter.get_image(),
ncm_file_from_reader.get_image()
);
assert_eq!(
ncm_file_from_iter.get_metadata().unwrap(),
ncm_file_from_reader.get_metadata().unwrap()
);
assert_eq!(
ncm_file_from_iter.get_music().unwrap(),
ncm_file_from_reader.get_music().unwrap()
);
let image = ncm_file_from_iter.get_image_unchecked();
let metadata = ncm_file_from_iter.get_metadata_unchecked();
let music = ncm_file_from_iter.get_music_unchecked();
let ncm_meta = ncm_file_from_iter.get_parsed_matadata().unwrap();
let music_name = ncm_file_name.with_extension(&ncm_meta.format);
File::create(music_name).unwrap().write_all(&music).unwrap();
let image_ext = ncm_meta.album_pic_url.rsplit_once('.').unwrap().1;
let image_name = ncm_file_name.with_extension(image_ext);
File::create(image_name).unwrap().write_all(image).unwrap();
let meta_name = ncm_file_name.with_extension("json");
File::create(meta_name).unwrap().write_all(metadata).unwrap();
}
Contribute
Feel free to contribute everything you like.
License
Currently licensed under MIT.