DirectSound 학습 노트의 일괄 오디오 장치
오늘부터 우리의 첫걸음:
우선, 우리는 개발 라이브러리를 선택해야 한다.Delphi 아래에 여러 버전의 라이브러리가 있죠. JEDI의 DirectX 라이브러리가 있고 DsPack에도 DirectX 라이브러리가 있습니다. 그리고 DelphiX가 있습니다. 구체적인 수요는 여러분이 원하시는 대로 하겠습니다. 저는 Dspack의 개발 라이브러리를 선택했습니다.
응용 프로그램에서 만약 사용자가 기본 출력 장치를 사용하여 소리를 출력한다면, 우리는 모든 출력 장치를 일일이 열거할 필요가 없다.그러나 프로그램이 모든 출력 장치를 지원하지 않거나 프로그램에 두 개 이상의 장치가 필요할 때나 사용자 스스로 장치를 선택해야 할 때 우리는 각 장치를 일일이 열거해야 한다.
일괄 장치, 우선, 시스템의 모든 장치에 호출될 수 있는 리셋 함수를 정의해야 한다. 이 리셋 함수의 이름은 제한이 없지만, 함수의 성명 방식은 DSEnumCallBack을 원형으로 해야 한다. 이 유형의 스타일은 Delphi에서 다음과 같다.
DelphiCode:
function DsEnumProc(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PAnsiChar;
lpContext: Pointer): BOOL;stdcall;
이 함수는 열거 장치에 매개 변수로 전달되는 함수 DirectSoundEnumerate로, 이 함수의 원형은 Delphi에서 다음과 같이 선언됩니다.
DelphiCode:
function DirectSoundEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult;
stdcall; external DirectSoundDLL name 'DirectSoundEnumerateA';
첫 번째 매개 변수인 TDSEnumCallBack은 바로 위에서 제시한 리셋 함수의 양식이다.두 번째 파라미터는 당신이 전달하고자 하는 모든 것에 대한 지침입니다.
함수 호출 성공 여부를 판단할 수 있는 함수 반환 유형 HResult.
우리가 DirectSound Enumerate 함수를 사용할 때 이 함수의 실현 방식을 상상할 수 있다. 이 함수는 순환이 있는 것이 틀림없다. 한 장치에 일일이 들 때마다 우리가 준 리셋 함수인 DsEnum Call Back을 한 번 호출한다. 그러면 이 리셋 함수는 호출된 과정에서True로 되돌아오면 DirectSound Enumerate는 모든 장치가 일일이 열거될 때까지 다음 리셋을 계속할 것이다.함수가 되돌아옵니다. 그렇지 않으면, 이 리셋 함수가false로 되돌아오기만 하면, DirectSoundEnumerate는 다음 매거진을 계속하지 않고 바로 되돌아옵니다.
여기에 열거된 장치의 예를 보여 줍니다. 이 예에서는 열거된 모든 장치를 콤bobox에 추가하고 장치의 GUID도 콤box에 저장합니다. 코드는 다음과 같습니다.
DelphiCode:
function DsEnumProc(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PAnsiChar;lpContext: Pointer): BOOL;stdcall;
var
tempGuid: PGUID;
begin
Result := True;
if lpGuid <> nil then
begin
tempGuid := GetMemory(SizeOf(TGUID));
if tempGuid = nil then
begin
Result := true;
exit;
end;
CopyMemory(tempGuid,lpGuid,SizeOf(TGuid));
// lpContext DirectSoundEnumerate Combobox,
TComboBox(lpContext).Items.AddObject(string(lpcstrDescription),TObject(tempGuid));
//
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
DirectSoundEnumerate(DsEnumProc,self.ComboBox1);
end;
위에서 설명한 것은 매거 출력 설비이고 자연DirectSound도 매거 입력 설비(녹음 설비)를 제공한다. 조작 방식은 모두 같다. 매거 함수의 명칭이 다를 뿐이다. 출력 설비의 매거 함수는 다음과 같다.
DirectSoundCaptureEnumerate
따라서 매거 입력 장치는 위의 코드에 따라DirectSoundEnumerate만 사용합니다
DirectSound Capture Enumerate로 변경하면
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.