MIDI 播放
您可以播放 MIDI 数据及音频轨道,来控制 Udon 世界中的任何内容。您可以跳转到示例场景立即开始使用。
资源:MidiFile 和 AudioClip
扩展名为 .mid 的文件被处理为 MIDI 资源。 开始使用你自己的 MIDI 和音频文件:
- 将它们拖放到 Assets 文件夹中。MIDI 文件必须具有扩展名 .mid,音频文件可以是 Unity 支持的任意格式(.aif、.wav、.mp3、.ogg)。
- 选择 MIDI 文件并将其 AudioClip 设置为匹配的音频文件。

- MIDI 文件的 BPM 必须正确设置。如果数据似乎与音频不匹配,很可能是这个问题。你可以通过切换"Override Bpm"并提供正确的值来覆盖 BPM。更好的方法是编辑你的 MIDI 文件并添加正确的 BPM。
组件:VRCMidiPlayer

这是操作的核心。它的工作方式类似于 Audio Source,但使用 Midi Asset 代替。它向所有目标 UdonBehaviour 发送 MIDI Note On 和 Note Off 事件。
检查器字段
| 名称 | 描述 |
|---|---|
| Midi File | 你要触发其数据的 SMF 格式 MIDI 文件。 |
| Audio Source | 包含与 MIDI 数据对应的音频剪辑的 AudioSource 组件。 |
| Target Behaviours | 将向其发送 MIDI Note On 和 Note Off 事件的 UdonBehaviour 数组。 |
| Display Debug Blocks | 启用后,在 Unity 编辑器的场景视图中选择 VRCMidiPlayer 时,可以显示当前 MIDI 文件中所有音符的显示。有助于快速查看数据。 |
方法
| 名称 | 描述 |
|---|---|
| Play() | 开始播放 MIDI 事件和音频源。 |
| Stop() | 停止播放 MIDI 事件和音频源。 |
属性
| 名称 | 描述 |
|---|---|
float time | 获取和设置 MIDI 和音频源的当前时间。 |
MidiData midiData | 获取包含当前 MIDI 轨道所有数据的 MidiData 对象。可在播放前用于进行设置。 |
示例:MidiPlaybackScene
示例中心包含一个简单的 MIDI 播放示例。您可以从菜单栏的 VRChat SDK > Samples > MidiPlayback 加载它。
类:MidiData
当你从 VRCMidiPlayer 请求 MIDI 数据时,你将获得此对象。它包含所有轨道的数组以及 BPM。
| 类型 | 名称 | 描述 |
|---|---|---|
MidiTrack[] | Tracks | 文件中 MidiTrack 的数组。 |
byte | Bpm | 表示轨道的 BPM。 |
类:MidiTrack
此类简单地包装了 MidiBlock 数组,并提供了一些在轨道中发现的有用音符和力度范围引用。
| 类型 | 名称 | 描述 |
|---|---|---|
MidiBlock[] | Blocks | 轨道中 MidiBlock 的数组。 |
byte | minNote | 轨道中演奏的最低音符。 |
byte | maxNote | 轨道中演奏的最高音符。 |
byte | minVelocity | 轨道中演奏的最低力度(除 0 外)。 |
byte | maxVelocity | 轨道中演奏的最高力度。 |
类:MidiBlock
MidiBlock 代表从开到关的整个 MIDI 音符事 件,以及一些有用的元数据。
| 类型 | 名称 | 描述 |
|---|---|---|
byte | Note | 演奏音符的 0-127 范围编号。 |
byte | Velocity | 演奏音符力度的 0-127 范围编号。 |
byte | Channel | 演奏音符通道的 1-16 范围编号。 |
float | StartTimeMs | Note On 事件开始的毫秒时间。 |
float | EndTimeMs | Note Off 事件触发的毫秒时间。 |
float | StartTimeSec | Note On 事件开始的秒数时间。 |
float | EndTimeSec | Note Off 事件触发的秒数时间。 |
float | LengthSec | 从 Note On 到 Note Off 整个事件的秒数长度。 |