다음을 통해 공유


midiOutCachePatches 함수(mmeapi.h)

midiOutCachePatches 함수는 내부 MIDI 신시사이저 디바이스가 지정된 패치 집합을 미리 로드하고 캐시하도록 요청합니다.

구문

MMRESULT midiOutCachePatches(
  HMIDIOUT hmo,
  UINT     uBank,
  LPWORD   pwpa,
  UINT     fuCache
);

매개 변수

hmo

열린 MIDI 출력 디바이스에 대한 핸들입니다. 이 디바이스는 내부 MIDI 신시사이저여야 합니다. 이 매개 변수는 HMIDIOUT으로 캐스팅된 MIDI 스트림의 핸들일 수도 있습니다.

uBank

사용해야 하는 패치 은행. 기본 패치 뱅크를 캐시하려면 이 매개 변수를 0으로 설정해야 합니다.

pwpa

캐시되거나 캐시되지 않을 패치를 나타내는 PATCHARRAY 배열에 대한 포인터입니다.

fuCache

캐시 작업에 대한 옵션입니다. 다음 플래그 중 하나일 수 있습니다.

의미
MIDI_CACHE_ALL 지정된 모든 패치를 캐시합니다. 모두 캐시할 수 없는 경우 없음을 캐시하고 PATCHARRAY 배열을 지우고 MMSYSERR_NOMEM 반환합니다.
MIDI_CACHE_BESTFIT 지정된 모든 패치를 캐시합니다. 모두 캐시할 수 없는 경우 가능한 한 많은 패치를 캐시하고, PATCHARRAY 배열을 변경하여 캐시된 패치를 반영하고, MMSYSERR_NOMEM 반환합니다.
MIDI_CACHE_QUERY PATCHARRAY 배열을 변경하여 현재 캐시된 패치를 나타냅니다.
MIDI_UNCACHE 지정된 패치를 캐시하지 않고 PATCHARRAY 배열을 지웁니다.

반환 값

성공하면 MMSYSERR_NOERROR 반환하고, 그렇지 않으면 오류를 반환합니다. 가능한 오류 값은 다음과 같습니다.

반환 코드 설명
MMSYSERR_INVALFLAG
wFlags로 지정된 플래그가 잘못되었습니다.
MMSYSERR_INVALHANDLE
지정한 디바이스 핸들이 잘못되었습니다.
MMSYSERR_INVALPARAM
lpPatchArray가 가리키는 배열이 잘못되었습니다.
MMSYSERR_NOMEM
디바이스에 요청된 패치를 모두 캐시할 수 있는 충분한 메모리가 없습니다.
MMSYSERR_NOTSUPPORTED
지정된 디바이스는 패치 캐싱을 지원하지 않습니다.

설명

일부 신시사이저는 모든 패치를 동시에 로드할 수 없으며 MIDI 프로그램 변경 메시지를 받을 때 디스크에서 데이터를 로드해야 합니다. 패치를 캐싱하면 지정된 패치를 즉시 사용할 수 있습니다.

PATCHARRAY 배열의 각 요소는 128개의 패치 중 하나를 나타내며 특정 패치를 사용하는 16개의 MIDI 채널 각각에 대해 비트가 설정됩니다. 가장 중요한 비트는 물리적 채널 0을 나타내고 가장 중요한 비트는 실제 채널 15(0x0F)를 나타냅니다. 예를 들어 물리적 채널 0 및 8에서 패치 0을 사용하는 경우 요소 0은 0x0101 설정됩니다.

이 함수는 내부 MIDI 신시사이저 디바이스에만 적용됩니다. 모든 내부 신시사이저가 패치 캐싱을 지원하는 것은 아닙니다. 디바이스가 패치 캐싱을 지원하는지 확인하려면 MIDICAPS_CACHE 플래그를 사용하여 midiOutGetDevCaps 함수로 채워진 MIDIOUTCAPS 구조체의 dwSupport 멤버를 테스트합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 mmeapi.h(Windows.h 포함)
라이브러리 Winmm.lib
DLL Winmm.dll

추가 정보

MIDI 함수