聊聊使用Rust制作MIDI钢琴程序,你学会了吗?

2024年 4月 29日 66.1k 0

本文让我们使用Rust实现一个简单的MIDI Piano应用程序。

首先,使用以下命令创建一个Rust新项目:

cargo new midi-rs

然后在Cargo.toml文件中加入依赖项:

[dependencies]
eframe = "0.27.2"
itertools = "0.12.1"
phf = { version = "0.11", features = ["macros"] }
rustysynth = "1.3.1"
tinyaudio = "0.1.3"

  • eframe:EGUI框架——编写可以编译为web或本机的GUI应用程序
  • itertools:扩展的迭代器适配器、函数和宏。
  • phf:使用完美的散列函数在编译时生成高效的查找表。
  • rustysynth:用纯Rust编写的MIDI 音色库合成器
  • tinyaudio:是一个跨平台,易于使用,底层的音频输出库。

这个应用程序将打开一个接收键盘事件的egui窗口,这些事件被发送到rustysynth库作为midi音符并通过tinyaudio库输出声音。

首先,在src/main.rs文件中引入这些库:

use eframe::egui;
use itertools::Itertools;
use phf::{phf_map, Map};
use rustysynth::{SoundFont, Synthesizer, SynthesizerSettings};
use std::{
    fs::File,
    sync::{Arc, Mutex},
};
use tinyaudio::prelude::*;

接下来,定义静态变量和常量:

const OUTPUT_PARAMS: OutputDeviceParameters = OutputDeviceParameters {
channels_count: 2,
sample_rate: 44100,
channel_sample_count: 441, // 样本的最大长度
};

#[derive(Debug)]
pub struct MidiNote {
pub note: i32,
pub velocity: i32,
}

pub static NOTE_KEY_MAP: Map

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论