menu
 
版本
2018.1.11.6987

2024.1.4.8780

2023.1.12.8706

2022.1.18.8567

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624


menu_open
Wwise SDK 2018.1.11
快速入门示例集成——MIDI

MIDI 集成示例

MIDI 事件通过调用 AK::SoundEngine::PostMIDIOnEvent() 函数进行发布。以下代码显示有关下列的示例:

  • 设置初始 MIDI 参数,
  • 使用事件名称(音频设计师对事件的命名)或者“Wwise_IDs.h”中定义的事件 ID(Wwise 生成的头文件)发布 MIDI 事件。
#include "Wwise_IDs.h" // 由 Wwise 生成的 ID
// 在声音引擎初始化后,注册全局回调函数。
// 确保在处理消息队列之前注册回调;
// 这将确保新发布的 MIDI 事件在当前帧期间
// 得到处理(即我们退出回调函数后立即处理)。
// 获取声音引擎音频设置。这些设置在确定一个音频帧的
// 等效时间时是必须用到的。
AkAudioSettings audioSettings;
(...)
// 用于发布 MIDI 事件的回调函数。
void MIDICallback( bool in_bLastCall )
{
// 如需要,发布 MIDI 事件。
// 格外小心,确保此代码对线程是安全的。
// 对于此例,假设我们需要对同一音符发布 note-on
// 和 note-off 事件。
AkMIDIPost aPosts[2];
const AkUInt8 byNote = 60;
const AkUInt8 byChan = 0; // 值域 0-15 映射到 MIDI 通道值域 1-16。
const AkUInt32 uOnSamples = 0; // 音符将从当前帧的开头开始。
const AkUInt32 uOffSamples = uOnOffset + audioSettings.uNumSamplesPerFrame / 2;
// 音符将在一帧当中结束。
// Note-on
AkMIDIPost& noteOn = aPosts[0];
noteOn.byChan = byChan;
noteOn.NoteOnOff.byNote = byNote;
noteOn.NoteOnOff.byVelocity = 72; // 随机力度
noteOn.uOffset = uOnSamples;
// Note-off
AkMIDIPost& noteOff = aPosts[1];
noteOff.byChan = byChan;
noteOff.NoteOnOff.byNote = byNote;
noteOff.NoteOnOff.byVelocity = 0; // not used for note-off
noteOff.uOffset = uOffSamples;
AkUniqueID eventID = AK::SoundEngine::GetIDFromString( "MIDIEventName" );
AK::SoundEngine::PostMIDIOnEvent( eventID, REGISTERED_MIDI_GAME_OBJECT, aPosts, 2 );
}

请参阅 集成详情——事件 了解有关事件的更多信息。 请参阅 集成详情——MIDI 了解有关 MIDI 的更多信息。


此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅