Version

menu_open
Wwise SDK 2023.1.3
Quick Start Sample Integration - MIDI

MIDI Integration Example

MIDI events are posted by calling the AK::SoundEngine::PostMIDIOnEvent() function. The following code shows examples of:

  • setting initial MIDI parameters,
  • posting MIDI events using the event's name (name given to the event by the Wwise user) or the event's ID as defined in "Wwise_IDs.h" (header file generated by Wwise).
#include "Wwise_IDs.h" // IDs generated by Wwise
// After Sound Engine initialization, register a global callback function.
// Be sure to register for callback just before the message queue is processed;
// this will ensure that any newly posted MIDI events are processed during
// the current frame (i.e. immediately after we exit our callback function).
// Obtain Sound Engine audio settings. These are required to determine the time
// equivalent of one audio frame.
AkAudioSettings audioSettings;
(...)
// Callback function used to post MIDI events.
void MIDICallback( bool in_bLastCall )
{
// Post MIDI event(s) if required.
// Take extra care to ensure this code is thread-safe.
// For this example, assume we need to post the note-on and note-off
// events for the same note.
AkMIDIPost aPosts[2];
const AkUInt8 byNote = 60;
const AkUInt8 byChan = 0; // Range 0-15 mapped to MIDI channel range 1-16.
const AkUInt32 uOnSamples = 0; // Note will start at beginning of current frame.
const AkUInt32 uOffSamples = uOnOffset + audioSettings.uNumSamplesPerFrame / 2;
// Note will end mid-frame.
// Note-on
AkMIDIPost& noteOn = aPosts[0];
noteOn.byChan = byChan;
noteOn.NoteOnOff.byNote = byNote;
noteOn.NoteOnOff.byVelocity = 72; // random velocity
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 );
}

Refer to Integration Details - Events for more information regarding events. Refer to Integration Details - MIDI for more information regarding MIDI.

AkUInt8 byType
See AK_MIDI_EVENT_TYPE_* pre-processor definitions.
Definition: AkMidiTypes.h:179
#define AK_MIDI_EVENT_TYPE_NOTE_ON
Definition: AkMidiTypes.h:56
AkMidiChannelNo byChan
Definition: AkMidiTypes.h:180
AKSOUNDENGINE_API AKRESULT RegisterGlobalCallback(AkGlobalCallbackFunc in_pCallback, AkUInt32 in_eLocation=AkGlobalCallbackLocation_BeginRender, void *in_pCookie=NULL, AkPluginType in_eType=AkPluginTypeNone, AkUInt32 in_ulCompanyID=0, AkUInt32 in_ulPluginID=0)
uint8_t AkUInt8
Unsigned 8-bit integer.
tNoteOnOff NoteOnOff
Definition: AkMidiTypes.h:225
AkUInt32 AkUniqueID
Unique 32-bit ID.
Definition: AkTypes.h:134
Configured audio settings.
Definition: AkTypes.h:304
AKSOUNDENGINE_API AkPlayingID PostMIDIOnEvent(AkUniqueID in_eventID, AkGameObjectID in_gameObjectID, AkMIDIPost *in_pPosts, AkUInt16 in_uNumPosts, bool in_bAbsoluteOffsets=false, AkUInt32 in_uFlags=0, AkCallbackFunc in_pfnCallback=NULL, void *in_pCookie=NULL, AkPlayingID in_playingID=AK_INVALID_PLAYING_ID)
AKSOUNDENGINE_API AKRESULT GetAudioSettings(AkAudioSettings &out_audioSettings)
@ AkGlobalCallbackLocation_PreProcessMessageQueueForRender
Start of frame rendering, before having processed game messages.
Definition: AkCallback.h:340
AkUInt32 uNumSamplesPerFrame
Number of samples per audio frame (256, 512, 1024 or 2048).
Definition: AkTypes.h:305
AKSOUNDENGINE_API AkUInt32 GetIDFromString(const char *in_pszString)
uint32_t AkUInt32
Unsigned 32-bit integer.
Definition: AkMidiTypes.h:237
#define AK_MIDI_EVENT_TYPE_NOTE_OFF
Definition: AkMidiTypes.h:55
AkUInt64 uOffset
Frame offset (in samples) for MIDI event post.
Definition: AkMidiTypes.h:238

Cette page a-t-elle été utile ?

Besoin d'aide ?

Des questions ? Des problèmes ? Besoin de plus d'informations ? Contactez-nous, nous pouvons vous aider !

Visitez notre page d'Aide

Décrivez-nous de votre projet. Nous sommes là pour vous aider.

Enregistrez votre projet et nous vous aiderons à démarrer sans aucune obligation !

Partir du bon pied avec Wwise