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 在 音频
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;
}
}
}