Share via


IDirectSound::SetCooperativeLevel

[The feature associated with this page, DirectSound, is a legacy feature. It has been superseded by WASAPI and Audio Graphs. Media Casting have been optimized for Windows 10 and Windows 11. Microsoft strongly recommends that new code use Media Casting instead of DirectSound, when possible. Microsoft suggests that existing code that uses the legacy APIs be rewritten to use the new APIs if possible.]

This method sets the cooperative level of the application for this sound device.

Syntax

HRESULT SetCooperativeLevel( HWND hwnd, DWORD dwLevel );

Parameters

  • hwnd
    Window handle to the application. See Remarks.
  • dwLevel
    Requested priority level. Specify one of the following values.
    Value Description
    DSSCL_EXCLUSIVE Sets the application to the exclusive level. When it has the input focus, the application will be the only one audible (sounds from applications with the DSBCAPS_GLOBALFOCUS flag set will be muted). With this level, it also has all the privileges of the DSSCL_PRIORITY level. DirectSound will restore the hardware format, as specified by the most recent call to the IDirectSoundBuffer::SetFormat method, once the application gains the input focus. (Note that DirectSound will always restore the wave format no matter what priority level is set.)
    DSSCL_NORMAL Sets the application to a fully cooperative status. This level has the smoothest multitasking and resource-sharing behavior, but because it does not allow the primary buffer format to change, output is restricted to the default 44kHz, 16-bit, stereo format.
    DSSCL_PRIORITY Sets the application to the priority level. Applications with this cooperative level can call the IDirectSoundBuffer::SetFormat and IDirectSound::Compact methods.
    DSSCL_WRITEPRIMARY This is the highest priority level. The application has write access to the primary sound buffers. No secondary sound buffers can be played. This level cannot be set if the DirectSound driver is being emulated for the device; that is, if the IDirectSound::GetCaps method returns the DSCAPS_EMULDRIVER flag in the DSCAPS structure.

Return Value

If the method succeeds, the return value is DS_OK.

If the method fails, the return value may be one of the following error values:

Return Code
DSERR_ALLOCATED
DSERR_INVALIDPARAM
DSERR_UNINITIALIZED
DSERR_UNSUPPORTED

Remarks

The application must set the cooperative level by calling this method before its buffers can be played. The recommended cooperative level is DSSCL_PRIORITY; use other priority levels when necessary.

The hwnd parameter should be the top-level application window handle. If you are also using DirectDraw, it must be the same handle passed to the IDirectDraw7::SetCooperativeLevel method.

If your application cannot easily supply a window handle, you can obtain one by using the following code.

HWND hWnd = GetForegroundWindow();
if (hWnd == NULL)
{
  hWnd = GetDesktopWindow();
}

Requirements

Header: Declared in DSound.h.

Library: Use Dsound.lib.

See Also

IDirectSound::Compact
IDirectSoundBuffer::GetFormat
IDirectSoundBuffer::GetVolume
IDirectSoundBuffer::Lock
IDirectSoundBuffer::Play
IDirectSoundBuffer::Restore
IDirectSoundBuffer::SetFormat