#mod #music #parser #sample #format #file-format #play

bin+lib mod_player

用于解析和播放 mod 音乐文件的库

5 个版本

0.1.4 2019 年 6 月 2 日
0.1.3 2019 年 5 月 20 日
0.1.2 2019 年 4 月 29 日
0.1.1 2019 年 4 月 2 日
0.1.0 2019 年 3 月 31 日

#441音频

MIT 许可证

2MB
1.5K SLoC

mod_player 是一个 crate,用于读取和播放 mod 音频文件。mod_player 每次解码一个样本对(左,右),可以将其流式传输到音频设备或文件。

播放时,只需要两个函数;

  • read_mod_file 将文件读取到 Song 结构体中
  • next_sample 获取下一个样本

要使用库解码 mod 文件并将其保存到磁盘(使用 hound 音频 crate 保存 WAV),

use hound;
 
fn main() {
    let spec = hound::WavSpec { 
    channels: 2,
        sample_rate: 48100,
        bits_per_sample: 32,
        sample_format: hound::SampleFormat::Float,
    };

    let mut writer = hound::WavWriter::create( "out.wav", spec).unwrap();
    let song = mod_player::read_mod_file("BUBBLE_BOBBLE.MOD");
    let mut player_state : mod_player::PlayerState = mod_player::PlayerState::new( 
                                song.format.num_channels, spec.sample_rate );
    loop {
        let ( left, right ) = mod_player::next_sample(&song, &mut player_state);
        writer.write_sample( left  );
        writer.write_sample( right  );
        if player_state.song_has_ended || player_state.has_looped { 
            break;
        }
    }
 }

没有运行时依赖