### IMMConfigurableAudio

  The IMMConfigurableAudio class is the base class for all devices that support audio. It provides functions for setting and querying the audio formats, speed, and audio channels.

### IMMConfigurableAudio - Member Functions and Data by Group

### Constructors & Destructor

Derived classes can use these members to create objects of this class.

~IMMConfigurableAudio

      public:
      virtual ~IMMConfigurableAudio()

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

IMMConfigurableAudio

  Overload 1

      protected:
      IMMConfigurableAudio( const IString& deviceName,
                            bool openNow = true,
                            unsigned long instance = 0,
                            bool openShareable = true )

  A derived class can construct an IMMConfigurableAudio from the following:

  deviceName
    You must specify what device you want to construct.
  openNow
    If true, it causes the device to automatically open the device before returning from the constructor; otherwise, you would have to call one of the open functions to open the device yourself.
  instance
    You can provide your own instance number instead of letting IMMConfigurableAudio generate one.
  openShareable
    If true, it allows the hardware device to be shared by different programs; otherwise, the hardware cannot be shared.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

  Overload 2

      protected:
      IMMConfigurableAudio( unsigned long deviceIdentifier,
                            const IString& newAlias = IString ( ) )

  A derived class can construct an IMMConfigurableAudio from the following:

  deviceIdentifier
    The value the system uses to identify the device.
  newAlias
    The name you can use to associate a string to the device. Optional.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

### Audio Attributes

Use these members to query and set the audio attributes for the current device.

bitsPerSample

      public:
      unsigned long bitsPerSample(CallType call = wait) const

  Returns the number of bits-per-sample. This is the number of bits of data used to represent each sample of each channel. The standard values are 4, 8, and 16.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

blockAlignment

      public:
      unsigned long blockAlignment(CallType call = wait) const

  Returns the block alignment of data in bytes. The system processes a multiple of block-aligned bytes of data at a time. For example, if you have a 24-byte buffer, then you can only set a block alignment of 2, 3, 4, 6, 8, or 12.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

bytesPerSecond

      public:
      unsigned long bytesPerSecond(CallType call = wait) const

  Returns the average number of bytes-per-second played or recorded. This is the rate the data is transferred to the hardware.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

channels

      public:
      unsigned long channels(CallType call = wait) const

  Returns the number of audio channels set. For example, mono is 1; stereo is 2.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

format

      public:
      IMMAudioBuffer::Format format(CallType call = wait) const

  Returns the interpretation of the audio format. See IMMAudioBuffer::Format for more information.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

samplesPerSecond

      public:
      unsigned long samplesPerSecond(CallType call = wait) const

  Returns the number of samples-per-second played or recorded. This is the sampling rate, in kilohertz, that each channel should use. Standard values are 11025, 22050, and 44100.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

setBitsPerSample

      public:
      virtual IMMConfigurableAudio&
        setBitsPerSample( unsigned long bitsPerSample,
                          CallType call = wait )

  Sets the bits-per-sample to be played or recorded. This is the number of bits of data used to represent each sample of each channel. The standard values are 4, 8, and 16. You must set an audio format using setFormat before calling this function. The file is saved in this format.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.
  IAccessError | The value is out of range.
  IAccessError | A audio format has not been set before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

setBlockAlignment

      public:
      virtual IMMConfigurableAudio&
        setBlockAlignment( unsigned long alignment,
                           CallType call = wait )

  Sets the block alignment of the data. The system processes a multiple of block-aligned bytes of data at a time. For example, if you have a 24-byte buffer, then you can only set a block alignment of 2, 3, 4, 6, 8, or 12. You must set an audio format using setFormat before calling this function. The file is saved in this format.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.
  IAccessError | The value is out of range.
  IAccessError | An audio format has not been set before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

setBytesPerSecond

      public:
      virtual IMMConfigurableAudio&
        setBytesPerSecond( unsigned long averageBytes,
                           CallType call = wait )

  Sets the average bytes-per-second to be played or recorded. This is the rate the data is transferred to the hardware. You must set an audio format using setFormat before calling this function. The file is saved in this format.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.
  IAccessError | The value is out of range.
  IAccessError | An audio format has not been set before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

setChannels

      public:
      virtual IMMConfigurableAudio&
        setChannels( unsigned long channels,
                     CallType call = wait )

  Sets the number of audio channels for playing and recording. Monaural is 1; stereo is 2. You must set an audio format using setFormat before calling this function. The file is saved in this format.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.
  IAccessError | The value is out of range.
  IAccessError | An audio format has not been set before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

setFormat

      public:
      virtual IMMConfigurableAudio&
        setFormat( IMMAudioBuffer::Format tag = IMMAudioBuffer::pcm,
                   CallType call = wait )

  Sets the audio format for playing and recording. See IMMAudioBuffer::Format for more information. The file is saved in this format.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.
  IAccessError | The value is out of range.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

setSamplesPerSecond

      public:
      virtual IMMConfigurableAudio&
        setSamplesPerSecond( unsigned long samplesPerSecond,
                             CallType call = wait )

  Sets the sampling rate for playing and recording. This is the sampling rate, in kilohertz, which each channel should use. Standard values are 11025, 22050, and 44100. You must set an audio format using setFormat before calling this function. The file is saved in this format.

Exception

  IAccessError | The device identifier is not valid; possibly the device is closed.
  IAccessError | The device cannot acquire access to the hardware device; possibly another device of this same type was acquired for exclusive use in this or another process.
  IAccessError | An internal driver error occurred.
  IInvalidRequest | The device must be in the open state before calling this function.
  IAccessError | The value is out of range.
  IAccessError | An audio format has not been set before calling this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

setVolume

      public:
      virtual IMMConfigurableAudio&
        setVolume( unsigned long volume,
                   AudioChannel channel = all,
                   const IMMMillisecondTime& over = IMMMillisecondTime ( ),
                   CallType call = wait )

  Sets the volume of the audio channel for the device, where 0 is the least amount of volume and 100 is the most amount of volume.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

Portability Considerations

  This member is overridden in this derived class for specific operating system behavior.

volume

      public:
      virtual unsigned long
        volume( AudioChannel channel = left,
                CallType call = wait ) const

  Returns the volume of the audio channel for the device, where 0 is the least amount of volume and 100 is the most amount of volume.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

Portability Considerations

  This member is overridden in this derived class for specific operating system behavior.

### Implementation

These members translate the audio command to device-specific values.

restoreDeviceSettings

      protected:
      virtual IMMConfigurableAudio&
        restoreDeviceSettings( bool newRecordMode = false )

  Restores settings for the current device. Derived classes should override this function, handle class-specific settings, and call the corresponding inherited function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | No | No

saveDeviceSettings

      protected:
      virtual IMMConfigurableAudio& saveDeviceSettings()

  Saves settings for the current device. Derived classes should override this function, handle class-specific settings, and call the corresponding inherited function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | No | No

translateAudioFlag

      protected:
      virtual unsigned long
        translateAudioFlag( unsigned long ) const

  Allows derived classes to map the general audio commands to the device-specific values. For example, the digital video and the wave audio device both support setting the bytes-per-second, but the actual system values are different. By allowing the mapping of the wave audio values to the digital video values, the digital video player does not have to override all of the audio functions because they call this function.

Supported Platforms

  Windows | OS/2 | AIX
  Yes | Yes | No

### IMMConfigurableAudio - Inherited Member Functions and Data

#### Inherited Public Functions

  IMMDevice

  -     virtual ~IMMDevice()

  -     virtual IMMDevice&
          acquire( ShareMode acquire = shareable,
                   bool queuedForResources = false,
                   CallType call = wait )

  -     IString aliasName() const

  -     virtual IMMDevice& close(CallType call = wait)

  -     unsigned long
          connectedDeviceId( ConnectorType type,
                             CallType call = wait ) const

  -     virtual IMMDevice&
          deletePendingEvents( EventType event = allEvents )

  -     IString description(CallType call = wait) const

  -     unsigned long deviceId() const

  -     IString deviceName() const

  -     unsigned long deviceType(CallType call = wait) const

  -     virtual IMMDevice&
          disableAudio( AudioChannel channel = all,
                        const IMMMillisecondTime& over = IMMMillisecondTime ( ),
                        CallType call = wait )

  -     virtual IMMDevice&
          disableConnector( ConnectorType type,
                            CallType call = wait )

  -     virtual IMMDevice&
          enableAudio( bool enable = true,
                       AudioChannel channel = all,
                       const IMMMillisecondTime& over = IMMMillisecondTime ( ),
                       CallType call = wait )

  -     virtual IMMDevice&
          enableConnector( ConnectorType type,
                           bool enable = true,
                           CallType call = wait )

  -     virtual IMMDevice& enableNotification(bool enabled = true)

  -     bool isAcquired(CallType call = wait) const

  -     bool
          isAudioEnabled( AudioChannel channel = all,
                          CallType call = wait )

  -     bool isCloseOnDestroy() const

  -     bool
          isConnectionSupported( ConnectorType type,
                                 CallType call = wait ) const

  -     bool
          isConnectorEnabled( ConnectorType type,
                              CallType call = wait ) const

  -     bool isOpen() const

  -     virtual Mode mode(CallType call = wait) const

  -     virtual IMMDevice&
          open( const IString& fileOrDevice = IString ( ),
                bool shareable = true,
                CallType call = wait )

  -     virtual IMMDevice&
          openOnThread( const IString& fileOrDevice = IString ( ),
                        bool shareable = true,
                        CallType call = wait )

  -     IMMTime prerollTime(CallType call = wait) const

  -     PrerollType prerollType(CallType call = wait) const

  -     virtual IMMDevice& release(CallType call = wait)

  -     bool requiresFiles(CallType call = wait) const

  -     IMMDevice& setCloseOnDestroy(bool close = true)

  -     virtual IMMDevice&
          setSpeedFormat( IMMSpeed::Format format,
                          CallType call = wait )

  -     virtual IMMDevice&
          setTimeFormat( IMMTime::Format format,
                         CallType call = wait )

  -     virtual IMMDevice&
          setVolume( unsigned long volume,
                     AudioChannel channel = all,
                     const IMMMillisecondTime& over = IMMMillisecondTime ( ),
                     CallType call = wait )

  -     IMMSpeed::Format speedFormat(CallType call = wait) const

  -     bool supportsAudio(CallType call = wait) const

  -     bool
          supportsCommand( IMMNotifyEvent::Command command,
                           CallType call = wait ) const

  -     bool supportsDigitalTransfer(CallType call = wait) const

  -     bool supportsDisableEject(CallType call = wait) const

  -     bool supportsEject(CallType call = wait) const

  -     bool supportsPlay(CallType call = wait) const

  -     bool supportsRecord(CallType call = wait) const

  -     bool supportsRecordInsertion(CallType call = wait) const

  -     bool supportsSave(CallType call = wait) const

  -     bool supportsStreaming(CallType call = wait) const

  -     bool supportsVideo(CallType call = wait) const

  -     bool supportsVolumeAdjustment(CallType call = wait) const

  -     IMMTime::Format timeFormat(CallType call = wait) const

  IMMFileMedia

  -     virtual ~IMMFileMedia()

  -     IString filename(CallType call = wait) const

  -     virtual bool isWriteable() const

  -     virtual IMMFileMedia&
          load( const IString& filename,
                bool readOnly = false,
                CallType call = wait )

  -     virtual IMMFileMedia&
          loadOnThread( const IString& filename,
                        bool readOnly = false )

  -     virtual IMMFileMedia&
          open( const IString& fileOrDevice = IString ( ),
                bool shareable = true,
                CallType call = wait )

  -     virtual IMMFileMedia&
          openOnThread( const IString& fileOrDevice = IString ( ),
                        bool shareable = true,
                        CallType call = wait )

  IMMPlayableDevice

  -     virtual ~IMMPlayableDevice()

  -     virtual IMMPlayableDevice&
          addCuePoint( const IMMTime& time,
                       CallType call = wait )

  -     virtual IMMPlayableDevice&
          cueForPlayback( CallType call = wait )

  -     unsigned long length(CallType call = wait) const

  -     virtual IMMPlayableDevice& pause(CallType call = wait)

  -     virtual IMMPlayableDevice&
          play( const IMMTime& from = IMMTime ( ),
                const IMMTime& to = IMMTime ( ),
                bool resumeIfPaused = true,
                CallType call = nowait )

  -     unsigned long position(CallType call = wait) const

  -     virtual IMMPlayableDevice&
          removeCuePoint( const IMMTime& time,
                          CallType call = wait )

  -     virtual IMMPlayableDevice&
          resume( bool resume = true,
                  CallType call = wait )

  -     virtual IMMPlayableDevice&
          seek( const IMMTime& to,
                CallType call = wait )

  -     virtual IMMPlayableDevice& seekToEnd(CallType call = wait)

  -     virtual IMMPlayableDevice&
          seekToStart( CallType call = wait )

  -     virtual IMMPlayableDevice&
          startPositionTracking( const IMMTime& timeInterval,
                                 CallType call = wait )

  -     virtual IMMPlayableDevice&
          stepFrame( unsigned long frames = 1,
                     bool forward = true,
                     CallType call = wait )

  -     virtual IMMPlayableDevice& stop(CallType call = wait)

  -     virtual IMMPlayableDevice&
          stopPositionTracking( CallType call = wait )

  IMMRecordable

  -     virtual ~IMMRecordable()

  -     bool canRedo() const

  -     bool canUndo() const

  -     virtual IMMRecordable&
          copy( const IMMTime& from = IMMTime ( ),
                const IMMTime& to = IMMTime ( ),
                CallType call = wait ) const

  -     virtual IMMRecordable&
          cueForRecording( CallType call = nowait )

  -     virtual IMMRecordable&
          cut( const IMMTime& from = IMMTime ( ),
               const IMMTime& to = IMMTime ( ),
               CallType call = wait )

  -     virtual IMMRecordable&
          deleteSelection( const IMMTime& from = IMMTime ( ),
                           const IMMTime& to = IMMTime ( ),
                           CallType call = wait )

  -     virtual IMMRecordable&
          paste( const IMMTime& from = IMMTime ( ),
                 const IMMTime& to = IMMTime ( ),
                 bool convert = true,
                 CallType call = wait )

  -     virtual IMMRecordable&
          record( bool insert = true,
                  const IMMTime& begin = IMMTime ( ),
                  const IMMTime& end = IMMTime ( ),
                  bool resumeIfPaused = true,
                  CallType call = nowait )

  -     virtual IMMRecordable& redo(CallType call = wait)

  -     virtual IMMRecordable& save(CallType call = nowait)

  -     virtual IMMRecordable&
          saveAs( const IString& filename,
                  CallType call = nowait )

  -     virtual IMMRecordable& undo(CallType call = wait)

  INotifier

  -     virtual ~INotifier()

  -     virtual INotifier& disableNotification() = 0

  -     virtual INotifier&
          enableNotification( bool enable = true ) = 0

  -     INotifier()

  -     virtual bool isEnabledForNotification() const = 0

  -     virtual INotifier&
          notifyObservers( const INotificationEvent& event ) = 0

  -     virtual INotifier&
          notifyObserversAsync( const INotificationEvent& event )

  -     const IThreadId& threadId() const

  IStandardNotifier

  -     virtual ~IStandardNotifier()

  -     virtual IStandardNotifier& disableNotification()

  -     virtual IStandardNotifier&
          enableNotification( bool enable = true )

  -     virtual bool isEnabledForNotification() const

  -     IStandardNotifier()

  -     IStandardNotifier(const IStandardNotifier& copy)

  -     virtual INotifierAddress notifierAddress() const

  -     virtual IStandardNotifier&
          notifyObservers( const INotificationEvent& anEvent )

  -     virtual IStandardNotifier&
          notifyObserversAsync( const INotificationEvent& anEvent )

  -     IStandardNotifier&
          operator =( const IStandardNotifier& aStandardNotifier )

#### Inherited Public Data

  INotifier

  -     static INotificationId const allChangesId

  -     static INotificationId const deleteId

  IMMDevice

  -     static const unsigned long allDevices

  -     static const unsigned long ampMixer

  -     static const unsigned long animation

  -     static const unsigned long audioCD

  -     static const unsigned long audioTape

  -     static const unsigned long cdxa

  -     static INotificationId const commandNotifyId

  -     static INotificationId const cuePointId

  -     static const unsigned long dat

  -     static INotificationId const deviceEventId

  -     static const unsigned long digitalVideo

  -     static const unsigned long headphone

  -     static const unsigned long microphone

  -     static const unsigned long monitor

  -     static const unsigned long other

  -     static const unsigned long overlay

  -     static INotificationId const passDeviceId

  -     static INotificationId const positionChangeId

  -     static const unsigned long sequencer

  -     static const unsigned long speaker

  -     static const unsigned long videoDisc

  -     static const unsigned long videoTape

  -     static const unsigned long waveAudio

#### Inherited Protected Functions

  IStandardNotifier

  -     virtual IStandardNotifier&
          addObserver( IObserver& observer,
                       const IInterest& interest )

  -     virtual IStandardNotifier&
          notifyObservers( const INotificationId& nId )

  -     virtual IObserverList&
          observerList( const IInterest* anInterest = 0 ) const

  -     virtual IStandardNotifier& removeAllObservers()

  -     virtual IStandardNotifier&
          removeObserver( IObserver& observer )

  -     virtual IStandardNotifier&
          removeObserver( IObserver& observer,
                          const IInterest& interest )

  INotifier

  -     virtual INotifier&
          addObserver( IObserver& observer,
                       const IInterest& interest )

  -     virtual INotifier&
          notifyObservers( const INotificationId& id ) = 0

  -     virtual IObserverList&
          observerList( const IInterest* anInterest = 0 ) const = 0

  -     virtual INotifier& removeAllObservers() = 0

  -     virtual INotifier& removeObserver(IObserver& observer) = 0

  -     virtual INotifier&
          removeObserver( IObserver& observer,
                          const IInterest& interest )

  IMMDevice

  -     IMMMessageWindow& deviceWindow() const

  -     IMMDevice( unsigned long deviceIdentifier,
                   const IString& newAlias = IString ( ) )

  -     IMMDevice(const IString& fileOrDevice)

  -     virtual bool
          isOpenStringValid( const IString& deviceName ) const

  -     unsigned long
          itemCapability( unsigned long item,
                          CallType call ) const

  -     unsigned long
          itemStatus( unsigned long item,
                      unsigned long value = 0,
                      CallType call = wait ) const

  -     unsigned long lastError() const

  -     virtual bool
          mixerControlValues( unsigned long dwComponentType,
                              unsigned long dwControlType,
                              unsigned long* ulDetails,
                              bool uniform = true,
                              unsigned long multipleItems = 0,
                              unsigned long hmx = NULL )

  -     virtual bool
          mixerControlValues( unsigned long dwComponentType,
                              unsigned long dwControlType,
                              unsigned short* usDetails,
                              bool uniform = true,
                              unsigned long multipleItems = 0,
                              unsigned long hmx = NULL )

  -     IMMDeviceNotifyHandler* notificationHandler() const

  -     virtual IMMDevice&
          open( unsigned long instanceNumber,
                bool shareable = true,
                CallType call = nowait )

  -     virtual IMMDevice&
          openOnThread( unsigned long instanceNumber,
                        bool shareable = true )

  -     OpenStatus openStatus() const

  -     virtual IMMDevice&
          restoreDeviceSettings( bool newRecordMode = false )

  -     virtual IMMDevice& saveDeviceSettings()

  -     IMMDevice&
          sendCommand( unsigned short message,
                       unsigned long param1,
                       void* param2,
                       unsigned short userParm )

  -     IMMDevice&
          sendCommand( unsigned short message,
                       unsigned long param1,
                       void* param2 )

  -     IString
          sendCommand( const IString& command,
                       unsigned short userParm )

  -     IString sendCommand(const IString& command)

  -     IMMDevice& setLastError(unsigned long errorId)

  -     virtual bool
          setMixerControlValues( unsigned long dwComponentType,
                                 unsigned long dwControlType,
                                 unsigned short* usDetails,
                                 bool uniform = true,
                                 unsigned long multipleItems = 0,
                                 unsigned long hmx = NULL )

  -     virtual bool
          setMixerControlValues( unsigned long dwComponentType,
                                 unsigned long dwControlType,
                                 unsigned long* ulDetails,
                                 bool uniform = true,
                                 unsigned long multipleItems = 0,
                                 unsigned long hmx = NULL )

  -     IMMDevice&
          setNotificationHandler( IMMDeviceNotifyHandler* notifyHandler )

  -     IMMDevice& setOpenStatus(OpenStatus status)

  -     IMMDevice& setPassDeviceRequested(bool sawPassDevice)

  -     IMMDevice& setSystemMixerHandle(unsigned long hmx)

  -     IMMDevice& setUserParameter(unsigned short userParm = 0)

  -     unsigned long systemMixerHandle() const

  -     unsigned short userParameter() const

  -     bool wasPassDeviceRequested() const

  IMMFileMedia

  -     virtual IMMFileMedia& enableDataUpdate(bool update = true)

  -     IMMFileMedia( unsigned long deviceIdentifier,
                      const IString& newAlias = IString ( ) )

  -     IMMFileMedia( const IString& deviceName,
                      bool openNow,
                      unsigned long instance,
                      bool openShareable )

  -     virtual IMMFileMedia&
          open( unsigned long instanceNumber,
                bool shareable = true,
                CallType call = nowait )

  -     virtual IMMFileMedia&
          openOnThread( unsigned long instanceNumber,
                        bool shareable = true )

  -     virtual IMMFileMedia&
          restoreDeviceSettings( bool newRecordMode = false )

  -     virtual IMMFileMedia& saveDeviceSettings()

  IMMPlayableDevice

  -     IMMPlayableDevice( unsigned long deviceIdentifier,
                           const IString& newAlias = IString ( ) )

  -     IMMPlayableDevice( const IString& deviceOrFileName,
                           bool openNow = true,
                           unsigned long instance = 0,
                           bool openShareable = true )

  -     virtual IMMPlayableDevice&
          restoreDeviceSettings( bool newRecordMode = false )

  -     virtual IMMPlayableDevice& saveDeviceSettings()

  IMMRecordable

  -     IMMRecordable( const IString& deviceName,
                       bool openNow,
                       unsigned long instance,
                       bool openShareable )

  -     IMMRecordable( unsigned long deviceIdentifier,
                       const IString& newAlias = IString ( ) )

  -     virtual IMMRecordable&
          restoreDeviceSettings( bool newRecordMode = false )

  -     virtual IMMRecordable& saveDeviceSettings()

#### Inherited Protected Data

  - None