Skip to main content

MIDI 播放

您可以播放 MIDI 数据及音频轨道,来控制 Udon 世界中的任何内容。您可以跳转到示例场景立即开始使用。

资源:MidiFile 和 AudioClip​

扩展名为 .mid 的文件被处理为 MIDI 资源。开始使用你自己的 MIDI 和音频文件:

  1. 将它们拖放到 Assets 文件夹中。MIDI 文件必须具有扩展名 .mid,音频文件可以是 Unity 支持的任意格式(.aif、.wav、.mp3、.ogg)。
  2. 选择 MIDI 文件并将其 AudioClip 设置为匹配的音频文件。

image

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

组件:VRCMidiPlayer​

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 的数组。
byteBpm表示轨道的 BPM。

类:MidiTrack​

此类简单地包装了 MidiBlock 数组,并提供了一些在轨道中发现的有用音符和力度范围引用。

类型名称描述
MidiBlock[]Blocks轨道中 MidiBlock 的数组。
byteminNote轨道中演奏的最低音符。
bytemaxNote轨道中演奏的最高音符。
byteminVelocity轨道中演奏的最低力度(除 0 外)。
bytemaxVelocity轨道中演奏的最高力度。

类:MidiBlock​

MidiBlock 代表从开到关的整个 MIDI 音符事件,以及一些有用的元数据。

类型名称描述
byteNote演奏音符的 0-127 范围编号。
byteVelocity演奏音符力度的 0-127 范围编号。
byteChannel演奏音符通道的 1-16 范围编号。
floatStartTimeMsNote On 事件开始的毫秒时间。
floatEndTimeMsNote Off 事件触发的毫秒时间。
floatStartTimeSecNote On 事件开始的秒数时间。
floatEndTimeSecNote Off 事件触发的秒数时间。
floatLengthSec从 Note On 到 Note Off 整个事件的秒数长度。