버전

menu_open
Wwise SDK 2019.1.11
예제 통합으로 빠르게 시작하기 - MIDI

MIDI 통합 예제

MIDI 이벤트는 AK::SoundEngine::PostMIDIOnEvent() 함수 호출로 게시됩니다. 아래 나오는 코드는 다음의 예제를 보여줍니다.

  • 초기 MIDI 매개 변수 설정하기
  • 이벤트 이름(Wwise 사용자가 부여한 이름)이나 "Wwise_IDs.h"(Wwise가 생성한 헤더파일)에 정의된 이벤트 ID를 이용해 MIDI 이벤트 게시하기
#include "Wwise_IDs.h" // Wwise에서 생성한 ID
// 사운드 엔진 초기화 후, 전역적 콜백 함수를 등록하세요.
// 반드시 메시지 대기열이 처리되기 직전에 콜백을 등록하세요.
// 이렇게 해야 새롭게 발송된 MIDI 이벤트가
// 현재 프레임 중에 (예: 콜백 함수를 빠져나간 직후) 처리됩니다.
AK::SoundEngine::RegisterGlobalCallback( &MIDICallback, AkGlobalCallbackLocation_PreProcessMessageQueueForRender )
// 사운드 엔진 오디오 설정을 구하세요. 이 설정은 하나의 오디오 프레임에 해당하는 시간을 결정하는 데 사용됩니다.
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;
// 프레임 중간에 노트가 종료됩니다.
// 노트온
AkMIDIPost& noteOn = aPosts[0];
noteOn.byType = AK_MIDI_EVENT_TYPE_NOTE_ON;
noteOn.byChan = byChan;
noteOn.NoteOnOff.byNote = byNote;
noteOn.NoteOnOff.byVelocity = 72; // 랜덤 벨로시티
noteOn.uOffset = uOnSamples;
// 노트오프
AkMIDIPost& noteOff = aPosts[1];
noteOff.byType = AK_MIDI_EVENT_TYPE_NOTE_OFF;
noteOff.byChan = byChan;
noteOff.NoteOnOff.byNote = byNote;
noteOff.NoteOnOff.byVelocity = 0; // 노트오프에 사용되지 않음
noteOff.uOffset = uOffSamples;
AkUniqueID eventID = AK::SoundEngine::GetIDFromString( "MIDIEventName" );
AK::SoundEngine::PostMIDIOnEvent( eventID, REGISTERED_MIDI_GAME_OBJECT, aPosts, 2 );
}

이벤트와 관련된 더 자세한 정보는 통합 세부 사항 - Event 를 참고하세요. MIDI와 관련한 더 자세한 정보는 통합 세부사항 - MIDI 를 참고하세요.

AkUInt8 byType
Definition: AkMidiTypes.h:179
AkMidiNoteNo byNote
Definition: AkMidiTypes.h:189
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)
tNoteOnOff NoteOnOff
Definition: AkMidiTypes.h:220
Configured audio settings
Definition: AkTypes.h:203
AKSOUNDENGINE_API AKRESULT PostMIDIOnEvent(AkUniqueID in_eventID, AkGameObjectID in_gameObjectID, AkMIDIPost *in_pPosts, AkUInt16 in_uNumPosts)
AKSOUNDENGINE_API AKRESULT GetAudioSettings(AkAudioSettings &out_audioSettings)
AkUInt32 uNumSamplesPerFrame
Number of samples per audio frame (256, 512, 1024 or 2048).
Definition: AkTypes.h:204
AkUInt32 uOffset
Definition: AkMidiTypes.h:230
AKSOUNDENGINE_API AkUInt32 GetIDFromString(const char *in_pszString)
Definition: AkMidiTypes.h:229

이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요