directsound 예제

비슷한 방식으로 Timer 개체를 사용하는 모든 개체는 정적 멤버 함수인 콜백을 제공하고 이 포인터를 콜백에 대한 사용자 제공 데이터로 제공해야 합니다. 예를 들어, 다음은 타이머 개체를 만드는 AudioStream::Play의 코드입니다: IDirectSound 개체를 성공적으로 만든 후 초기화 코드는 DSSCL_NORMAL 플래그를 지정하는 SetCooperativeLevel 멤버 함수를 호출하여 일반 플래그를 설정합니다. 협력 수준. 이 수준은 가장 낮은 협동 수준이며 DirectSound의 버퍼를 더 많이 제어해야 하는 경우 다른 수준을 사용할 수 있습니다. 예를 들어, 일반적인 협동 수준에서 오디오 출력의 형식은 항상 8비트 22kHz 모노입니다. 다른 출력 형식으로 변경하려면 우선 순위 협동 수준(DSSCL_PRIORITY)을 설정하고 SetFormat 함수를 호출해야 합니다. 단일 버퍼 스트리밍을 사용하면 응용 프로그램은 드라이버가 데이터를 재생하기 전에 사운드 데이터를 버퍼에 기록해야 합니다. 응용 프로그램은 사운드 재생이 중단되지 않도록 버퍼를 가능한 한 가득 유지해야 합니다. 이러한 버퍼에 대한 DirectSound 이름은 보조 버퍼입니다. 이러한 각 보조 버퍼는 서로 다른 형식을 가질 수 있습니다. 재생 중에 DirectSound는 모든 보조 버퍼의 데이터를 기본 버퍼로 혼합합니다. 기본 버퍼는 하나뿐이며 해당 형식은 출력 형식을 결정합니다.

응용 프로그램은 웨이브 데이터를 기본 버퍼에 직접 쓰지 않습니다. GetMaxWriteSize 읽기 및 쓰기 커서를 관리 하는 방법에 대 한 좋은 그림을 제공 합니다. 앞에서 설명한 WriteWaveData 메서드를 살펴보고 m_cbBufOffset가 IDirectSoundBuffer::Lock 메서드와 함께 어떻게 사용되는지 확인하여 사운드 버퍼에서 실제 쓰기 포인터를 얻을 수도 있습니다. 다이렉트사운드 인터페이스는 IDirectSound와 IDirectSoundBuffer의 두 개체로 구성됩니다. IDirectSound 개체는 단일 창에 대한 DirectSound 서비스를 나타냅니다. 서비스는 창이 입력 포커스를 잃을 때 사운드 스트림을 음소거하기 위해 창별로 배분됩니다. 나는 IDirectSound 개체를 래핑하는 AudioStreamServices 클래스를 만들었습니다 : DirectSound3D (DS3D)는 윈도우에서 3D 오디오를 표준화하기 위한 목적으로 1996 년에 DirectX 3로 도입 된 DirectSound의 확장입니다. DirectSound3D를 사용하면 소프트웨어 개발자가 각 오디오 카드 공급업체에 대해 작동하도록 코드를 여러 번 다시 작성하는 대신 단일 오디오 API에 대해 한 번 작성하여 오디오를 활용할 수 있습니다. 나는 코드가 여기에 자신을 말하는 것처럼 느낀다 (그래서 나는이 모든 것을 다소 긴 루틴을 포함시켰습니다).

©2019 DemiJohn

Log in with your credentials

Forgot your details?