#midi #synthesizer #music #soundfont

rustysynth

纯Rust编写的SoundFont MIDI合成器

12个版本 (稳定版)

1.3.1 2023年9月8日
1.2.1 2023年7月30日
1.2.0 2023年5月22日
1.1.0 2023年4月30日
0.1.0 2023年1月15日

#33音频

Download history 32/week @ 2024-04-08 95/week @ 2024-04-15 237/week @ 2024-04-22 53/week @ 2024-04-29 28/week @ 2024-05-06 85/week @ 2024-05-13 145/week @ 2024-05-20 138/week @ 2024-05-27 127/week @ 2024-06-03 142/week @ 2024-06-10 161/week @ 2024-06-17 191/week @ 2024-06-24 801/week @ 2024-07-01 521/week @ 2024-07-08 171/week @ 2024-07-15 238/week @ 2024-07-22

1,758 每月下载量
用于 5 个crate (2个直接使用)

MIT 许可证

195KB
4.5K SLoC

RustySynth

RustySynth是一个纯Rust编写的SoundFont MIDI合成器,从MeltySynth移植而来。

特性

  • 适用于实时和离线合成。
  • 支持标准MIDI文件,包括动态速度变化等附加功能。
  • 除了标准库外,没有其他依赖项。

示例

合成简单和弦的示例代码

// Load the SoundFont.
let mut sf2 = File::open("TimGM6mb.sf2").unwrap();
let sound_font = Arc::new(SoundFont::new(&mut sf2).unwrap());

// Create the synthesizer.
let settings = SynthesizerSettings::new(44100);
let mut synthesizer = Synthesizer::new(&sound_font, &settings).unwrap();

// Play some notes (middle C, E, G).
synthesizer.note_on(0, 60, 100);
synthesizer.note_on(0, 64, 100);
synthesizer.note_on(0, 67, 100);

// The output buffer (3 seconds).
let sample_count = (3 * settings.sample_rate) as usize;
let mut left: Vec<f32> = vec![0_f32; sample_count];
let mut right: Vec<f32> = vec![0_f32; sample_count];

// Render the waveform.
synthesizer.render(&mut left[..], &mut right[..]);

合成MIDI文件的另一个示例代码

// Load the SoundFont.
let mut sf2 = File::open("TimGM6mb.sf2").unwrap();
let sound_font = Arc::new(SoundFont::new(&mut sf2).unwrap());

// Load the MIDI file.
let mut mid = File::open("flourish.mid").unwrap();
let midi_file = Arc::new(MidiFile::new(&mut mid).unwrap());

// Create the MIDI file sequencer.
let settings = SynthesizerSettings::new(44100);
let synthesizer = Synthesizer::new(&sound_font, &settings).unwrap();
let mut sequencer = MidiFileSequencer::new(synthesizer);

// Play the MIDI file.
sequencer.play(&midi_file, false);

// The output buffer.
let sample_count = (settings.sample_rate as f64 * midi_file.get_length()) as usize;
let mut left: Vec<f32> = vec![0_f32; sample_count];
let mut right: Vec<f32> = vec![0_f32; sample_count];

// Render the waveform.
sequencer.render(&mut left[..], &mut right[..]);

待办事项

  • 波形合成
    • SoundFont读取器
    • 波形发生器
    • 包络发生器
    • 低通滤波器
    • 颤音LFO
    • 调制LFO
  • MIDI消息处理
    • 音符开启/关闭
    • 选择银行
    • 调制
    • 音量控制
    • 声像
    • 表情
    • 保持踏板
    • 程序更改
    • 音高弯折
    • 调音
  • 效果
    • 混响
    • 合唱
  • 其他事物
    • 支持标准MIDI文件
    • 支持MIDI文件循环扩展
    • 性能优化

许可证

RustySynth可在MIT许可证下使用。

无运行时依赖项