waveOutSetVolume (coredll)
Last changed: -212.189.46.155

.
Summary
This function sets the output audio volume of the pocket pc device.

C# Signature:

[DllImport("coredll.dll", SetLastError=true)]
protected static extern int waveOutSetVolume(IntPtr device, uint volume);

VB Signature:

Declare Function waveOutSetVolume Lib "coredll.dll" (ByVal device As IntPtr, ByVal volume As Integer) As Integer

User-Defined Types:

None.

Notes:

values for 'volume' are between value between 0 (off) and 65536 (max)

if there is only one audio device, you can set 'device' to null (or IntPtr.Zero)

Tips & Tricks:

Please add some!

Sample Code:

// The volume to pass in (0xffff or 65535 equals max volume)

uint newVolume = (uint)0xffff;

// Set this value in the left and right channels

uint NewVolumeAllChannels = ((( uint )newVolume & 0x0000ffff) | (( uint )newVolume << 16));

// Call func to set volume.

waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);

[ RichardW: Fixed the example code. It didn't work because the range of

  volume values are 0 to 65535 and the value passed in the example was
  65536, which is set the right volume to 1 (out of 65535) and the left
  volume to 0. ]

But I create this example below.

public enum Volumes : int {

    OFF = 0,
    LOW = 858993459,
    NORMAL = 1717986918,
    MEDIUM = -1717986919,
    HIGH = -858993460,
    VERY_HIGH = -1

}

[DllImport("coredll.dll", SetLastError=true)]

internal static extern int waveOutSetVolume(IntPtr device, int volume);

[DllImport("coredll.dll", SetLastError=true)]

internal static extern int waveOutGetVolume(IntPtr device, ref int volume);

public static Volumes Volume {

    get {
    int v = (int)0;
    waveOutGetVolume(IntPtr.Zero, ref v);
    switch (v) {
        case (int)Volumes.OFF: return Volumes.OFF;
        case (int)Volumes.LOW: return Volumes.LOW;
        case (int)Volumes.NORMAL: return Volumes.NORMAL;
        case (int)Volumes.MEDIUM: return Volumes.MEDIUM;
        case (int)Volumes.HIGH: return Volumes.HIGH;
        case (int)Volumes.VERY_HIGH: return Volumes.VERY_HIGH;
        default: return Volumes.OFF;
    }
     }
     set { waveOutSetVolume(IntPtr.Zero, (int)value); }

}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation