DirectSound 학습 노트의 일괄 오디오 장치

DirectX는 마이크로소프트의 멀티미디어 처리 분야의SDK 개발 라이브러리로 기능이 매우 강하다. 최근에 오디오를 수집하고 재생하는 몇 가지 물건이 필요하기 때문에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로 변경하면

좋은 웹페이지 즐겨찾기