osynic_midi 0.1.0

A MIDI -> keyboard mapper for the Osynic
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
<!-- markdownlint-disable MD033 MD041 MD045 -->

<p align="center">
    <img style="height:240px;width:240px" src="https://s2.loli.net/2025/03/10/GSsjOcHqdtBkyu9.png" alt="OsynicMIDI"/>
</p>

<p align="center">
  <h1 align="center">🎵 OsynicMIDI</h1>
  <p align="center"><strong>一个优雅的 Rust MIDI 到键盘映射工具库</strong></p>
  <p align="center">将 MIDI 设备(电子琴、控制器等)映射到键盘按键,轻松控制任何应用程序</p>
</p>

<p align="center">
  <a href="https://www.rust-lang.org/" target="_blank"><img src="https://img.shields.io/badge/Rust-1.85%2B-blue?style=flat-square"/></a>
  <a href="https://crates.io/crates/osynic_midi" target="_blank"><img src="https://img.shields.io/crates/v/osynic_midi?style=flat-square"/></a>
  <a href="https://docs.rs/osynic_midi" target="_blank"><img src="https://img.shields.io/docsrs/osynic_midi?style=flat-square"/></a>
  <a href="https://github.com/osynicite/osynic_midi" target="_blank"><img src="https://img.shields.io/badge/License-MIT-green?style=flat-square"/></a>
  <a href="https://github.com/osynicite/osynic_midi" target="_blank"><img src="https://img.shields.io/github/stars/osynicite/osynic_midi?style=flat-square"/></a>
</p>

<hr>

<p align="center">
  <a href="#-快速开始">快速开始</a><a href="#-特性">特性</a><a href="#-安装">安装</a><a href="#-文档">文档</a><a href="#-示例">示例</a><a href="README_EN.md">English</a>
</p>

---

## 📖 关于项目


**OsynicMIDI** 是一个轻量级、高效的 MIDI 到键盘映射工具,使用 Rust 编写。它允许你用任何 MIDI 设备(如电子琴、鼓垫、MIDI 控制器)控制计算机上的键盘输入。

无论你是游戏玩家、音乐制作人,还是想要创意地使用 MIDI 设备,OsynicMIDI 都能为你提供简单而强大的解决方案。

### 为什么选择 OsynicMIDI?


✅ **简单易用** - 5秒快速启动,无需复杂配置  
✅ **强大灵活** - 支持多种映射模式和自定义配置  
✅ **现代界面** - 交互式菜单,使用箭头键和回车按钮  
✅ **库 + CLI** - 既可作为独立工具,也可嵌入你的 Rust 项目  
✅ **可靠稳定** - 经过充分测试,生产就绪  
✅ **开源免费** - MIT 许可,完全开源  

---

## ⚡ 快速开始


### 1️⃣ 安装


```bash
cargo install osynic_midi
```

或从源码编译:
```bash
git clone https://github.com/osynicite/osynic_midi
cd osynic_midi
cargo build --release
```

### 2️⃣ 运行


```bash
osynic-midi start
```

### 3️⃣ 选择


用箭头键 `↑` `↓` 选择配置和设备,按 `Enter` 确认!

就这么简单!现在你可以用 MIDI 设备弹出键盘按键了 🎉

---

## ✨ 特性


### 🎹 MIDI 映射

- **两种映射模式**
  - **音符模式**:每个 MIDI 音符映射到特定按键
  - **八度模式**:按八度和音高自动映射

### 🎯 智能设备管理

- 自动发现所有连接的 MIDI 设备
- 基于设备名称的可靠连接(不依赖不稳定的索引)
- 支持多个 MIDI 设备

### ⚙️ 灵活配置

- JSON 格式的可读配置文件
- 预设配置开箱即用
- 易于创建自定义映射
- 支持力度阈值过滤

### 🖥️ 现代化 CLI

- 交互式菜单选择(类似 Vite)
- 箭头键导航,直观易用
- 支持非交互式模式用于脚本和自动化
- 完整的命令行帮助系统

### 📚 全面文档

- 完整的 API 文档
- 详细的配置指南
- 丰富的使用示例
- 架构和设计文档

---

## 📦 安装


### 使用 Cargo(推荐)


```bash
cargo install osynic_midi
```

### 从源码编译


```bash
git clone https://github.com/osynicite/osynic_midi.git
cd osynic_midi
cargo build --release
```

编译后的二进制文件位于:
- **开发版本**`target/debug/osynic-midi.exe`
- **发布版本**`target/release/osynic-midi.exe`

### 系统要求


- **Rust**:1.85.0 或更高版本
- **操作系统**:Windows、Linux 或 macOS
- **MIDI 设备**:至少一个 MIDI 输入设备(可选,支持虚拟 MIDI 端口)

---

## 🚀 使用指南


### 基本命令


```bash
# 快速使用

osynic-midi

# 列出所有连接的 MIDI 设备

osynic-midi list-devices

# 列出所有可用的配置文件

osynic-midi list-configs

# 启动交互式 MIDI 映射

osynic-midi start

# 创建一个新的映射配置文件(交互式)

osynic-midi create

# 从本地文件加载配置文件

osynic-midi load-local

# 使用指定配置启动

osynic-midi start -c configs/my_config.json

# 指定映射模式(notes 或 octaves)

osynic-midi start -m notes

# 同时指定配置和模式(非交互式)

osynic-midi start -c configs/my_config.json -m notes

# 从本地路径加载配置和指定模式

osynic-midi load-local -c /path/to/config.json -m notes
```

### 交互式菜单


运行 `osynic-midi start` 后,你会看到三个选择菜单:

```
? Select configuration file:
❯ midi_config.json
  midi_config_10ka.json
  midi_config_10kab.json
  ...
```

**操作方式**:
- `` / `` - 上下移动
- `Enter` - 确认选择
- `Ctrl+C` - 取消

### 工作流程


1. **检查设备**
   ```bash
   osynic-midi list-devices

   ```
   确保你的 MIDI 设备已识别

2. **选择配置方式**
   
   **方式 A:使用现有配置(推荐新手)**
   ```bash
   osynic-midi list-configs

   osynic-midi start

   ```
   
   **方式 B:创建新配置(推荐自定义)**
   ```bash
   osynic-midi create

   ```
   按照提示逐步创建你的映射配置
   
   **方式 C:加载本地配置文件**
   ```bash
   osynic-midi load-local

   ```
   指定配置文件的完整路径(可以在任何位置)

3. **启动映射**
   ```bash
   osynic-midi start

   ```
   按照交互式提示完成设置

4. **开始使用**
   现在你可以使用 MIDI 设备弹出键盘按键了!

---

## 📚 文档


完整文档位于 `docs/` 目录:

| 文档                                       | 内容                     |
| ------------------------------------------ | ------------------------ |
| [快速开始]docs/01-getting-started.md     | 5分钟入门指南            |
| [CLI 完整指南]docs/02-cli-guide.md       | 命令行工具的详细使用说明 |
| [库 API 文档]docs/03-library-api.md      | Rust 库的完整 API 参考   |
| [架构设计]docs/04-architecture.md        | 项目结构和设计说明       |
| [配置指南]docs/05-configuration-guide.md | JSON 配置文件详细说明    |
| [更新日志]docs/06-changelog.md           | 版本历史和更新内容       |
| [故障排除]docs/07-troubleshooting.md     | 常见问题和解决方案       |

---

## 💡 示例


### 示例 1:快速启动

```bash
osynic-midi start -c configs/midi_config.json -m notes
```

### 示例 2:库中使用

```rust
use osynic_midi::{Config, MappingMode, start_mapping};

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 加载配置
    let config = Config::load("configs/midi_config.json")?;
    
    // 启动 MIDI 映射
    start_mapping(
        "configs/midi_config.json".to_string(),
        "X8III".to_string(),
        MappingMode::Notes,
    ).await?;
    
    Ok(())
}
```

详见 `examples/` 目录获取更多示例。

---

## 🎯 使用场景


### 🎮 游戏玩家

- 用 MIDI 键盘控制游戏(Osu!mania、节奏游戏等)
- 创建专业游戏外设映射

### 🎵 音乐制作人

- 用 MIDI 控制器控制 DAW
- 创建自定义快捷键映射

### 💻 开发者

- 作为库集成到 Rust 项目中
- 创建专业的 MIDI 应用程序

### 🏠 爱好者

- 创意使用 MIDI 设备
- 自动化和控制应用程序

---

## 🔧 配置示例


### Osu!Mania 风格


```json
{
  "mapping_mode": "notes",
  "velocity_threshold": 1,
  "octaves": {},
  "note_mappings": {
    "36": "A", "37": "S", "38": "D", "39": "F",
    "40": "G", "41": "H", "42": "J", "43": "K"
  }
}
```

### 钢琴键盘式


```json
{
  "mapping_mode": "octaves",
  "velocity_threshold": 0,
  "octaves": {
    "3": {
      "C": "A", "C#/Db": "W", "D": "S", "D#/Eb": "E",
      "E": "D", "F": "R", "F#/Gb": "F", "G": "T",
      "G#/Ab": "G", "A": "Y", "A#/Bb": "H", "B": "U"
    }
  },
  "note_mappings": {}
}
```

更多配置见 [配置指南](docs/05-configuration-guide.md)。

---

## 🤝 贡献


欢迎贡献!无论是下列哪一种方式,我们都很感谢:

- 🐛 报告 Bug
- 💡 提出新想法
- 📝 改进文档
- 🔧 提交代码修复

请通过 GitHub Issues 或 Pull Requests 与我们联系。

---

## ❓ 常见问题


### Q: 支持哪些操作系统?

A: Windows、Linux 和 macOS 都支持。

### Q: 可以不用 MIDI 设备使用吗?

A: 可以使用虚拟 MIDI 端口(如 Windows 的 loopMIDI)进行测试。

### Q: 支持多个 MIDI 设备吗?

A: 目前一次只能使用一个设备,但可以快速切换。

### Q: 如何创建自定义配置?

A: JSON 格式非常简单。参考 [配置指南](docs/05-configuration-guide.md)。

### Q: 可以在脚本中使用吗?

A: 可以!使用 `-c` 和 `-m` 参数运行非交互式模式。

更多问题见 [故障排除指南](docs/07-troubleshooting.md)。

---

## 📊 项目状态


- ✅ 稳定版本
- ✅ 生产就绪
- ✅ 完整文档
- ✅ 活跃维护

---

## 📄 许可证


本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。

---

## 🙏 致谢


感谢以下项目的支持:
- [midir]https://github.com/Boddlnagg/midir - MIDI 支持
- [enigo]https://github.com/enigo-rs/enigo - 键盘模拟
- [tokio]https://github.com/tokio-rs/tokio - 异步运行时
- [inquire]https://github.com/mikaelmello/inquire - 交互式菜单

---

## 📮 联系方式


- 📧 Email: [zoneherobrine@gmail.com]mailto:zoneherobrine@gmail.com
- 🐙 GitHub: [@osynicite]https://github.com/osynicite
- 🌐 项目链接: [osynic_midi]https://github.com/osynicite/osynic_midi

---

<p align="center">
  Made with ❤️ by <a href="https://github.com/osynicite">Hako Chest</a>
  <br><br>
  <a href="README_EN.md">🌍 English Version</a>
</p>