3个版本
0.1.2 | 2023年1月16日 |
---|---|
0.1.1 | 2022年12月27日 |
0.1.0 | 2022年12月25日 |
在音频类别中排名336
每月下载量27次
在ffmmlc中使用
1.5MB
3K SLoC
ffmml
FFamicon风味音乐宏语言(FFMML)的解析器和播放器。
Famicon也称为NES(任天堂娱乐系统)。
🎵 Web播放器
📝 VSCode扩展
FFMML的语言规范基于MCK。但FFMML和MCK之间(已知)存在以下差异
- FFMML不支持以下功能
#INCLUDE
指令#OCTAVE-REV
指令@n
命令(直接频率选择)n
命令(直接音符选择)y
命令(直接内存条目)- DPCM通道
- FFMML具有定义自定义通道的
#CHANNEL <CHANNEL_NAME> <OSCILLATOR>
指令<CHANNEL_NAME>
:A..=Z
<OSCILLATOR>
:1
(脉冲波),2
(三角形波)或3
(噪声)
示例
以下示例解析MML脚本并生成音频数据
let mml = r#"; From https://www.nesdev.org/mck_guide_v1.0.txt
#TITLE My First NES Chip
#COMPOSER Nullsleep
#PROGRAMER 2003 Jeremiah Johnson
@v0 = { 10 9 8 7 6 5 4 3 2 }
@v1 = { 15 15 14 14 13 13 12 12 11 11 10 10 9 9 8 8 7 7 6 6 }
@v2 = { 15 12 10 8 6 3 2 1 0 }
@v3 = { 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 }
ABCD t150
A l8 o4 @01 @v0
A [c d e f @v1 g4 @v0 a16 b16 >c c d e f @v1 g4 @v0 a16 b16 >c<<]2
C l4 o3 q6
C [c e g8 g8 a16 b16 >c8 c e g8 g8 a16 b16 >c8<<]4
D l4 @v2 @0
D [@v2 b @v3 e @v2 b @v3 e @v2 b @v3 e @v2 b @v3 e8 @v2 b8]4"#;
let music = mml.parse::<ffmml::Music>().unwrap_or_else(|e| panic!("{e}"));
let mut player = music.play(48000);
let audio_data = (&mut player).collect::<Vec<_>>();
player.take_last_error().map(|e| panic!("{e}"));
要播放上述MML脚本定义的音乐,请运行以下命令
$ cargo install ffmmlc
$ cat examples/music01.mml | ffmmlc > music01.wav
$ play music01.wav
参考资料
关于MML
关于Famicon声音
依赖项
~4MB
~85K SLoC