KSPROPSETID_Synth_Dls
속성 집합에는 KSPROPSETID_Synth_Dls
MIDI 신시사이저에 DLS 샘플 및 계측을 다운로드하는 데 사용되는 속성이 포함되어 있습니다. DirectMusic 필터의 DirectMusic 핀에 있는 신디 노드(KSNODETYPE_SYNTHESIZER)의 속성입니다( MIDI 및 DirectMusic 필터 참조).
이 섹션에서는 DLS 데이터가 포함된 메모리의 "청크"를 다운로드하고 언로드하는 방법과 관련하여 이러한 속성의 동작에 대해 설명합니다. 다운로드한 계측 및 웨이브 데이터 청크의 실제 형식은 Microsoft Windows SDK 설명서의 하위 수준 DLS 설명서에 지정되어 있습니다.
DLS 다운로드 및 언로드는 핀이 있는 동안 언제든지 발생할 수 있습니다. DirectMusic 이벤트와 달리 타임스탬프는 지정되지 않으며 가능한 한 빨리 처리해야 합니다.
이 섹션에서는 DLS 리소스 또는 리소스라는 용어는 DLS 계측 청크 또는 DLS 웨이브 청크를 나타냅니다. 시스템은 모든 DLS 리소스에 대한 참조 수를 올바르게 유지 관리합니다.
클라이언트가 웨이브를 참조하는 마지막 계측을 언로드하면 시스템에서 웨이브를 언로드하는 호출을 자동으로 생성합니다.
반대로, 시스템은 클라이언트가 웨이브를 참조하는 마지막 계측을 언로드할 때까지 웨이브를 언로드하는 호출을 연기합니다.
이 집합의 속성 항목은 헤더 파일 Dmusprop.h에 정의된 대로 KSPROPERTY_SYNTH_DLS 열거형 값으로 지정됩니다.
사용 요약 테이블
KSPROPERTY_SYNTH_DLS_APPEND 속성은 클라이언트가 신시사이저에 다운로드하는 각 버퍼의 DLS 데이터에 추가하는 예약된 스토리지 공간의 크기를 지정합니다.
가져오기 | 설정 | 대상 | 속성 설명자 형식 | 속성 값 형식 |
---|---|---|---|---|
Yes |
아니요 |
Pin |
ULONG |
속성 값(작업 데이터)은 ULONG 형식이며 미니포트 드라이버가 다운로드한 각 DLS 데이터 버퍼의 끝에서 자체 사용을 위해 예약해야 하는 바이트 수를 지정합니다. 그런 다음, 클라이언트는 다운로드한 데이터가 종료된 후 요청된 바이트 수를 포함할 수 있을 만큼 충분히 커지도록 각 다운로드 버퍼를 할당합니다.
반환 값
KSPROPERTY_SYNTH_DLS_APPEND 속성 요청은 성공적으로 완료되었음을 나타내는 STATUS_SUCCESS 반환합니다. 그렇지 않으면 요청이 적절한 오류 상태 코드를 반환합니다. 다음 표에서는 몇 가지 가능한 오류 코드를 보여 줍니다.
상태 코드 | 의미 |
---|---|
STATUS_UNSUCCESSFUL |
작업이 성공적으로 완료되지 않았습니다. |
이러한 추가 바이트는 맞춤 요구 사항을 위해 추가 패딩이 필요하거나 샘플 보간을 간소화하기 위해 샘플의 시작을 복제하는 드라이버를 위한 것입니다.
사용 요약 테이블
KSPROPERTY_SYNTH_DLS_COMPACT 속성은 가능한 가장 큰 사용 가능한 샘플 메모리 청크를 사용할 수 있도록 신시사이저에 대한 요청입니다.
가져오기 | 설정 | 대상 | 속성 설명자 형식 | 속성 값 형식 |
---|---|---|---|---|
아니요 |
예 |
Pin |
없음 |
이 속성과 연결된 속성 값(작업 데이터)이 없습니다.
반환 값
KSPROPERTY_SYNTH_DLS_COMPACT 속성 요청은 성공적으로 완료되었음을 나타내는 STATUS_SUCCESS 반환합니다. 그렇지 않으면 요청이 적절한 오류 상태 코드를 반환합니다. 다음 표에서는 몇 가지 가능한 오류 코드를 보여 줍니다.
상태 코드 | 의미 |
---|---|
STATUS_UNSUCCESSFUL |
작업이 성공적으로 완료되지 않았습니다. |
이 속성에 대한 처리기의 구현은 재생을 중단해서는 안 됩니다.
자세한 내용은 Microsoft Windows SDK 설명서의 IDirectMusicPort::Compact 메서드에 대한 설명을 참조하세요.
사용 요약 테이블
KSPROPERTY_SYNTH_DLS_DOWNLOAD 속성은 Synthesizer에 DLS 데이터를 다운로드하는 데 사용됩니다.
가져오기 | 설정 | 대상 | 속성 설명자 형식 | 속성 값 형식 |
---|---|---|---|---|
Yes |
아니요 |
Pin |
속성 설명자(instance 데이터)는 다운로드되는 DLS 데이터 버퍼의 위치와 크기를 지정하는 SYNTH_BUFFER 구조가 바로 뒤에 있는 KSNODEPROPERTY 구조로 구성됩니다.
속성 값(작업 데이터)은 SYNTHDOWNLOAD 구조체입니다. 미니포트 드라이버는 이 구조에서 다음 정보를 다시 전달합니다.
미니포트 드라이버가 다운로드한 DLS 데이터를 고유하게 식별하기 위해 생성하는 핸들입니다. 이 클라이언트는 이 핸들을 저장하고 나중에 데이터를 언로드하는 데 사용해야 합니다( KSPROPERTY_SYNTH_DLS_UNLOAD 참조).
속성 요청이 완료된 후 클라이언트가 DLS 데이터가 포함된 버퍼를 해제할 수 있는지 여부를 나타내는 부울 값입니다. 미니포트 드라이버가 DLS 데이터의 자체 복사본을 만든 경우 클라이언트는 버퍼를 해제할 수 있습니다. 그렇지 않으면 미니포트 드라이버가 클라이언트의 원래 DLS 데이터 버퍼를 계속 사용하는 경우 미니포트 드라이버가 DLS 데이터를 언로드할 때까지 클라이언트는 버퍼를 해제하지 않아야 합니다.
반환 값
KSPROPERTY_SYNTH_DLS_DOWNLOAD 속성 요청은 성공적으로 완료되었음을 나타내는 STATUS_SUCCESS 반환합니다. 그렇지 않으면 요청이 적절한 오류 상태 코드를 반환합니다. 다음 표에서는 몇 가지 가능한 오류 코드를 보여 줍니다.
상태 코드 | 의미 |
---|---|
STATUS_BUFFER_TOO_SMALL |
버퍼가 너무 작아서 작업을 완료할 수 없습니다. |
STATUS_UNSUCCESSFUL |
작업이 성공적으로 완료되지 않았습니다. |
STATUS_NO_MEMORY |
이 요청을 완료하는 데 사용할 수 있는 메모리가 없습니다. |
자세한 내용은 Microsoft Windows SDK 설명서에서 IDirectMusicPort::D ownloadInstrument 메서드에 대한 설명을 참조하세요.
예제
KSPROPERTY_SYNTH_DLS_DOWNLOAD 속성 요청은 사용자 메모리 주소를 사용하여 DLS 다운로드 데이터의 위치를 지정합니다. 미니포트 드라이버는 액세스하기 전에 DLS 데이터가 포함된 사용자 메모리를 검색하고 잠가야 합니다. 다음 예제 코드는 이 작업을 수행하는 방법을 보여줍니다.
NTSTATUS Status = STATUS_UNSUCCESSFUL;
PSYNTH_BUFFER pDlsBuffer = (PSYNTH_BUFFER)pRequest->Instance;
PMDL pMdl = IoAllocateMdl(pDlsBuffer->BufferAddress, pDlsBuffer->BufferSize,
FALSE, FALSE, NULL);
if (pMdl)
{
__try
{
MmProbeAndLockPages(pMdl, KernelMode, IoReadAccess);
PVOID pvUserData = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority);
// do something with the data here
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
Status = GetExceptionCode();
}
MmUnlockPages(pMdl);
IoFreeMdl(pMdl);
}
else
{
Status = STATUS_NO_MEMORY;
}
사용 요약 테이블
KSPROPERTY_SYNTH_DLS_UNLOAD 속성은 이전에 다운로드한 DLS 데이터 리소스를 언로드합니다.
가져오기 | 설정 | 대상 | 속성 설명자 형식 | 속성 값 형식 |
---|---|---|---|---|
아니요 |
예 |
Pin |
HANDLE |
속성 값(작업 데이터)은 HANDLE 형식이며 해제할 다운로드한 DLS 데이터 리소스의 핸들을 포함합니다. 이전 KSPROPERTY_SYNTH_DLS_DOWNLOADget-property 요청에서 DLS 데이터를 식별하기 위해 미니포트 드라이버가 생성한 핸들입니다.
반환 값
KSPROPERTY_SYNTH_DLS_UNLOAD 속성 요청은 STATUS_SUCCESS 반환하여 성공적으로 완료되었음을 나타냅니다. 그렇지 않으면 요청은 코드에 적절한 오류 상태 반환합니다. 다음 표에서는 몇 가지 가능한 오류 코드를 보여 줍니다.
상태 코드 | 의미 |
---|---|
STATUS_BUFFER_TOO_SMALL |
버퍼가 너무 작아서 작업을 완료할 수 없습니다. |
STATUS_UNSUCCESSFUL |
작업이 성공적으로 완료되지 않았습니다. |
STATUS_PENDING |
작업은 나중에 완료됩니다. |
미니포트 드라이버는 DLS 데이터를 사용하는 노트가 재생되지 않는 즉시 DLS 데이터를 언로드해야 합니다. synthesizer가 KSPROPERTY_SYNTH_DLS_UNLOAD set-property 요청 시 DLS 데이터 리소스와 연결된 메모리를 해제할 수 없는 경우 비동기 속성 완성을 사용하여 나중에 요청을 완료할 수 있습니다.
DLS 데이터 리소스를 언로드한 후 신시사이저가 리소스를 사용하는 메모 표시 이벤트를 수신하는 경우 미니포트 드라이버는 중간에 새 DLS 데이터 리소스를 다운로드하지 않는 한 이벤트를 무시해야 합니다.
자세한 내용은 Microsoft Windows SDK 설명서에서 IDirectMusicPort::UnloadInstrument 메서드에 대한 설명을 참조하세요.
사용량 요약 테이블
KSPROPERTY_SYNTH_DLS_WAVEFORMAT 속성은 출력 웨이브 형식에 대한 신시사이저를 쿼리하는 데 사용됩니다.
가져오기 | 설정 | 대상 | 속성 설명자 형식 | 속성 값 형식 |
---|---|---|---|---|
Yes |
아니요 |
Pin |
속성 값(작업 데이터)은 WAVEFORMATEX 형식이며 신시사이저 출력 스트림의 웨이브 형식을 지정합니다.
반환 값
KSPROPERTY_SYNTH_DLS_WAVEFORMAT 속성 요청은 성공적으로 완료되었음을 나타내는 STATUS_SUCCESS 반환합니다. 그렇지 않으면 요청은 코드에 적절한 오류 상태 반환합니다. 다음 표에서는 몇 가지 가능한 오류 코드를 보여 줍니다.
상태 코드 | 의미 |
---|---|
STATUS_BUFFER_TOO_SMALL |
버퍼가 너무 작아서 작업을 완료할 수 없습니다. |
sizeof(WAVEFORMATEX) 바이트의 속성 값 버퍼는 모든 웨이브 형식에 충분히 크지 않을 수 있습니다. 예를 들어 다중 채널 형식에는 sizeof(WAVEFORMATEXTENSIBLE) 바이트의 버퍼가 필요합니다. 속성 요청이 STATUS_BUFFER_TOO_SMALL 상태 코드를 반환하는 경우 클라이언트는 미니포트 드라이버가 출력하는 속성 값 크기를 검사 더 큰 버퍼를 할당한 다음 두 번째 요청을 제출할 수 있습니다.
자세한 내용은 Microsoft Windows SDK 설명서에서 IDirectMusicPort::GetFormat 메서드에 대한 설명을 참조하세요.