hxausvc.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:47k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _HXAUSVC_H_
  36. #define _HXAUSVC_H_
  37. #define     HX_MAX_VOLUME  100
  38. #define     HX_INIT_VOLUME 50
  39. #define     HX_MIN_VOLUME  0
  40. /****************************************************************************
  41.  *
  42.  * Forward declarations of some interfaces defined here-in.
  43.  */
  44. typedef _INTERFACE   IHXAudioPlayer     IHXAudioPlayer;
  45. typedef _INTERFACE   IHXAudioPlayerResponse     IHXAudioPlayerResponse;
  46. typedef _INTERFACE   IHXAudioStream     IHXAudioStream;
  47. typedef _INTERFACE   IHXAudioStream2     IHXAudioStream2;
  48. typedef _INTERFACE   IHXAudioDevice     IHXAudioDevice;
  49. typedef _INTERFACE   IHXAudioDeviceResponse     IHXAudioDeviceResponse;
  50. typedef _INTERFACE   IHXAudioHook     IHXAudioHook;
  51. typedef _INTERFACE   IHXAudioStreamInfoResponse    IHXAudioStreamInfoResponse;
  52. // $Private:
  53. typedef _INTERFACE   IHXMultiPlayPauseSupport     IHXMultiPlayPauseSupport;
  54. typedef _INTERFACE   IHXAudioDeviceManager2     IHXAudioDeviceManager2;
  55. typedef _INTERFACE   IHXAudioResampler     IHXAudioResampler;
  56. typedef _INTERFACE   IHXAudioResamplerManager     IHXAudioResamplerManager;
  57. typedef _INTERFACE   IHXAudioPushdown2     IHXAudioPushdown2;
  58. // $EndPrivate.
  59. typedef _INTERFACE   IHXVolume     IHXVolume;
  60. typedef _INTERFACE   IHXVolumeAdviseSink     IHXVolumeAdviseSink;
  61. typedef _INTERFACE   IHXDryNotification     IHXDryNotification;
  62. typedef _INTERFACE   IHXBuffer     IHXBuffer;
  63. typedef _INTERFACE   IHXValues     IHXValues;
  64. /****************************************************************************
  65.  *
  66.  * Audio Services Data Structures
  67.  */
  68. typedef struct _HXAudioFormat
  69. {
  70.     UINT16 uChannels; /* Num. of Channels (1=Mono, 2=Stereo, etc. */
  71.     UINT16 uBitsPerSample; /* 8 or 16     */
  72.     UINT32 ulSamplesPerSec;/* Sampling Rate     */
  73.     UINT16 uMaxBlockSize; /* Max Blocksize     */
  74. } HXAudioFormat;
  75. typedef enum _AudioStreamType
  76. {
  77.     STREAMING_AUDIO = 0,
  78.     INSTANTANEOUS_AUDIO = 1,
  79.     TIMED_AUDIO = 2,
  80.     STREAMING_INSTANTANEOUS_AUDIO = 3
  81. } AudioStreamType;
  82. typedef struct _HXAudioData
  83. {
  84.     IHXBuffer*     pData; /* Audio data     */ 
  85.     ULONG32     ulAudioTime; /* Start time in milliseconds     */
  86.     AudioStreamType uAudioStreamType;
  87. } HXAudioData;
  88. /****************************************************************************
  89.  * 
  90.  *  Interface:
  91.  * 
  92.  *  IHXAudioPlayer
  93.  * 
  94.  *  Purpose:
  95.  * 
  96.  *  This interface provides access to the Audio Player services. Use this
  97.  *  interface to create audio streams, "hook" post-mixed audio data, and to
  98.  *  control volume levels.
  99.  * 
  100.  *  IID_IHXAudioPlayer:
  101.  * 
  102.  *  {00000700-0901-11d1-8B06-00A024406D59}
  103.  * 
  104.  */
  105. DEFINE_GUID(IID_IHXAudioPlayer, 0x00000700, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  106.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  107. #undef  INTERFACE
  108. #define INTERFACE   IHXAudioPlayer
  109. DECLARE_INTERFACE_(IHXAudioPlayer, IUnknown)
  110. {
  111.     /*
  112.      *  IUnknown methods
  113.      */
  114.     STDMETHOD(QueryInterface)       (THIS_
  115.                     REFIID riid,
  116.                     void** ppvObj) PURE;
  117.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  118.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  119.     /*
  120.      *  IHXAudioPlayer methods
  121.      */
  122.     /************************************************************************
  123.     *  Method:
  124.     *      IHXAudioPlayer::CreateAudioStream
  125.     *  Purpose:
  126.     * Call this to create an audio stream.
  127.     */
  128.     STDMETHOD(CreateAudioStream)    (THIS_
  129.     IHXAudioStream** /*OUT*/ pAudioStream
  130.     ) PURE;
  131.     /************************************************************************
  132.     *  Method:
  133.     *      IHXAudioPlayer::AddPostMixHook
  134.     *  Purpose:
  135.     * Call this to hook audio data after all audio streams in this
  136.     * have been mixed.
  137.     */
  138.     STDMETHOD(AddPostMixHook) (THIS_
  139. IHXAudioHook*     /*IN*/ pHook,
  140. const BOOL     /*IN*/ bDisableWrite,
  141. const BOOL     /*IN*/ bFinal
  142. ) PURE;
  143.     /************************************************************************
  144.     *  Method:
  145.     *      IHXAudioPlayer::RemovePostMixHook
  146.     *  Purpose:
  147.     * Call this to remove an already added post hook.
  148.     */
  149.     STDMETHOD(RemovePostMixHook)    (THIS_
  150.     IHXAudioHook*    /*IN*/ pHook
  151.     ) PURE;
  152.     /************************************************************************
  153.     *  Method:
  154.     *      IHXAudioPlayer::GetAudioStreamCount
  155.     *  Purpose:
  156.     * Get the number of audio streams currently active in the 
  157.     * audio player. Since streams can be added mid-presentation
  158.     * this function may return different values on different calls.
  159.     * If the user needs to know about all the streams as they get
  160.     * get added to the player, IHXAudioStreamInfoResponse should
  161.     * be implemented and passed in SetStreamInfoResponse.
  162.     */
  163.     STDMETHOD_(UINT16,GetAudioStreamCount) (THIS) PURE;
  164.     /************************************************************************
  165.     *  Method:
  166.     *      IHXAudioPlayer::GetAudioStream
  167.     *  Purpose:
  168.     * Get an audio stream at position given. 
  169.     */
  170.     STDMETHOD_(IHXAudioStream*,GetAudioStream) (THIS_
  171. UINT16 /*IN*/ uIndex
  172. ) PURE;
  173.     /************************************************************************
  174.     *  Method:
  175.     *      IHXAudioPlayer::SetStreamInfoResponse
  176.     *  Purpose:
  177.     * Set a stream info response interface. A client must implement
  178.     * an IHXAudioStreamInfoResponse and then call this method with
  179.     * the IHXAudioStreamInfoResponse as the parameter. The audio
  180.     * player will call IHXAudioStreamInfoResponse::OnStreamsReady
  181.     * with the total number of audio streams associated with this 
  182.     * audio player.
  183.     */
  184.     STDMETHOD(SetStreamInfoResponse) (THIS_
  185. IHXAudioStreamInfoResponse* /*IN*/ pResponse
  186. ) PURE;
  187.     /************************************************************************
  188.     *  Method:
  189.     *      IHXAudioPlayer::RemoveStreamInfoResponse
  190.     *  Purpose:
  191.     * Remove stream info response that was added earlier
  192.     */
  193.     STDMETHOD(RemoveStreamInfoResponse) (THIS_
  194. IHXAudioStreamInfoResponse* /*IN*/ pResponse
  195. ) PURE;
  196.     /************************************************************************
  197.     *  Method:
  198.     *      IHXAudioPlayer::GetAudioVolume
  199.     *  Purpose:
  200.     * Get the audio player's volume interface. This volume controls
  201.     * the volume level of all the mixed audio streams for this 
  202.     * audio player.
  203.     */
  204.     STDMETHOD_(IHXVolume*,GetAudioVolume) (THIS) PURE;
  205.     /************************************************************************
  206.     *  Method:
  207.     *      IHXAudioPlayer::GetDeviceVolume
  208.     *  Purpose:
  209.     * Get the audio device volume interface. This volume controls
  210.     * the audio device volume levels.
  211.     */
  212.     STDMETHOD_(IHXVolume*,GetDeviceVolume) (THIS) PURE;
  213. };
  214. /****************************************************************************
  215.  * 
  216.  *  Interface:
  217.  * 
  218.  *  IHXAudioPlayerResponse
  219.  * 
  220.  *  Purpose:
  221.  * 
  222.  *  This interface provides access to the Audio Player Response. Use this 
  223.  *  to receive audio player playback notifications. Your implementation of
  224.  *  OnTimeSync() is called with the current audio playback time (millisecs).
  225.  *  This interface is currently to be used ONLY by the RMA engine internally.
  226.  * 
  227.  *  IID_IHXAudioPlayerResponse:
  228.  * 
  229.  *  {00000701-0901-11d1-8B06-00A024406D59}
  230.  * 
  231.  */
  232. DEFINE_GUID(IID_IHXAudioPlayerResponse, 0x00000701, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  233.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  234. #undef  INTERFACE
  235. #define INTERFACE   IHXAudioPlayerResponse
  236. DECLARE_INTERFACE_(IHXAudioPlayerResponse, IUnknown)
  237. {
  238.     /*
  239.      *  IUnknown methods
  240.      */
  241.     STDMETHOD(QueryInterface)       (THIS_
  242.                     REFIID riid,
  243.                     void** ppvObj) PURE;
  244.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  245.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  246.     /*
  247.      *  IHXAudioPlayerResponse methods
  248.      */
  249.     /************************************************************************
  250.      *  Method:
  251.      *      IHXAudioPlayerResponse::OnTimeSync
  252.      *  Purpose:
  253.      *     This method is called with the current audio playback time.
  254.      */
  255.     STDMETHOD(OnTimeSync)   (THIS_
  256.     ULONG32 /*IN*/ ulTimeEnd
  257.     ) PURE;
  258. };
  259. /****************************************************************************
  260.  * 
  261.  *  Interface:
  262.  * 
  263.  *      IHXAudioStream
  264.  * 
  265.  *  Purpose:
  266.  * 
  267.  *  This interface provides access to an Audio Stream. Use this to play
  268.  *  audio, "hook" audio stream data, and to get audio stream information.
  269.  * 
  270.  *  IID_IHXAudioStream:
  271.  * 
  272.  *      {00000702-0901-11d1-8B06-00A024406D59}
  273.  * 
  274.  */
  275. DEFINE_GUID(IID_IHXAudioStream, 0x00000702, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  276.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  277. #undef  INTERFACE
  278. #define INTERFACE   IHXAudioStream
  279. DECLARE_INTERFACE_(IHXAudioStream, IUnknown)
  280. {
  281.     /*
  282.      *  IUnknown methods
  283.      */
  284.     STDMETHOD(QueryInterface) (THIS_
  285. REFIID riid,
  286. void** ppvObj) PURE;
  287.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  288.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  289.     
  290.     /*
  291.      *  IHXAudioStream methods
  292.      */
  293.     /************************************************************************
  294.      *  Method:
  295.      *      IHXAudioStream::Init
  296.      *  Purpose:
  297.      *     Initialize an audio stream with the given audio format. The 
  298.      *     IHXValues contains stream identification information. 
  299.      */
  300.     STDMETHOD(Init) (THIS_
  301. const HXAudioFormat* /*IN*/ pAudioFormat,
  302. IHXValues* /*IN*/  pValues
  303. ) PURE;
  304.     /************************************************************************
  305.      *  Method:
  306.      *      IHXAudioStream::Write
  307.      *  Purpose:
  308.      *     Write audio data to Audio Services. 
  309.      *     
  310.      *     NOTE: If the renderer loses packets and there is no loss
  311.      *     correction, then the renderer should write the next packet 
  312.      *     using a meaningful start time.  Audio Services will play 
  313.      *      silence where packets are missing.
  314.      */
  315.     STDMETHOD(Write) (THIS_
  316. HXAudioData* /*IN*/ pAudioData
  317. ) PURE;
  318.     /************************************************************************
  319.     *  Method:
  320.     *      IHXAudioStream::AddPreMixHook
  321.     *  Purpose:
  322.     * Use this to "hook" audio stream data prior to the mixing.
  323.     * Set bDisableWrite to TRUE to prevent this audio stream data
  324.     * from being mixed with other audio stream data associated
  325.     * with this audio player.
  326.     */
  327.     STDMETHOD(AddPreMixHook) (THIS_
  328.                              IHXAudioHook*     /*IN*/ pHook,
  329.      const BOOL        /*IN*/ bDisableWrite
  330.      ) PURE;
  331.     /************************************************************************
  332.     *  Method:
  333.     *      IHXAudioStream::RemovePreMixHook
  334.     *  Purpose:
  335.     * Use this to remove an already added "hook".
  336.     */
  337.     STDMETHOD(RemovePreMixHook) (THIS_
  338.                              IHXAudioHook*     /*IN*/ pHook
  339.       ) PURE;
  340.     /************************************************************************
  341.     *  Method:
  342.     *      IHXAudioStream::AddDryNotification
  343.     *  Purpose:
  344.     *     Use this to add a notification response object to get 
  345.     *     notifications when audio stream is running dry.
  346.     */
  347.     STDMETHOD(AddDryNotification)   (THIS_
  348.                                  IHXDryNotification* /*IN*/ pNotification
  349.           ) PURE;
  350.     /************************************************************************
  351.     *  Method:
  352.     *      IHXAudioStream::GetStreamInfo
  353.     *  Purpose:
  354.     * Use this to get information specific to this audio stream.
  355.     */
  356.     STDMETHOD_(IHXValues*,GetStreamInfo)       (THIS) PURE;
  357.     /************************************************************************
  358.     *  Method:
  359.     *      IHXAudioStream::GetAudioVolume
  360.     *  Purpose:
  361.     * Get the audio stream's volume interface. This volume controls
  362.     * the volume level for this audio stream.
  363.     */
  364.     STDMETHOD_(IHXVolume*,GetAudioVolume) (THIS) PURE;
  365. };
  366. /****************************************************************************
  367.  * 
  368.  *  Interface:
  369.  * 
  370.  * IHXAudioDevice
  371.  * 
  372.  *  Purpose:
  373.  * 
  374.  * Object that exports audio device API
  375.  * This interface is currently to be used ONLY by the RMA engine 
  376.  * internally.
  377.  * 
  378.  *  IID_IHXAudioDevice:
  379.  * 
  380.  * {00000703-0901-11d1-8B06-00A024406D59}
  381.  * 
  382.  */
  383. DEFINE_GUID(IID_IHXAudioDevice, 0x00000703, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  384.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  385. #undef  INTERFACE
  386. #define INTERFACE   IHXAudioDevice
  387. DECLARE_INTERFACE_(IHXAudioDevice, IUnknown)
  388. {
  389.     /*
  390.      *  IUnknown methods
  391.      */
  392.     STDMETHOD(QueryInterface)       (THIS_
  393.                     REFIID riid,
  394.                     void** ppvObj) PURE;
  395.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  396.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  397.     /*
  398.      *  IHXAudioDevice methods
  399.      */
  400.     /************************************************************************
  401.     *  Method:
  402.     *     IHXAudioDevice::Open
  403.     *  Purpose:
  404.     *     The caller calls this to open the audio device using the audio
  405.     *     format given.
  406.     */
  407.     STDMETHOD(Open) (THIS_
  408.     const HXAudioFormat* /*IN*/ pAudioFormat,
  409.     IHXAudioDeviceResponse* /*IN*/ pStreamResponse) PURE;
  410.     /************************************************************************
  411.     *  Method:
  412.     *      IHXAudioDevice::Close
  413.     *  Purpose:
  414.     * The caller calls this to close the audio device.
  415.     */
  416.     STDMETHOD(Close) (THIS_
  417. const BOOL  /*IN*/ bFlush ) PURE;
  418.     /************************************************************************
  419.     *  Method:
  420.     *     IHXAudioDevice::Resume
  421.     *  Purpose:
  422.     *     The caller calls this to start or resume audio playback.
  423.     */
  424.     STDMETHOD(Resume)         (THIS) PURE;
  425.     /************************************************************************
  426.     *  Method:
  427.     *     IHXAudioDevice::Pause
  428.     *  Purpose:
  429.     *     The caller calls this to pause the audio device. If bFlush is
  430.     *     TRUE, any buffers in the audio device will be flushed; otherwise,
  431.     *     the buffers are played.
  432.     */
  433.     STDMETHOD(Pause)         (THIS) PURE;
  434.     /************************************************************************
  435.     *  Method:
  436.     *     IHXAudioDevice::Write
  437.     *  Purpose:
  438.     *     The caller calls this to write an audio buffer.
  439.     */
  440.     STDMETHOD(Write)         (THIS_
  441.      const HXAudioData* /*IN*/ pAudioData) PURE;
  442.     /************************************************************************
  443.     *  Method:
  444.     *      IHXAudioDevice::InitVolume
  445.     *  Purpose:
  446.     *     The caller calls this to inform the audio stream of the client's
  447.     *     volume range. The audio stream maps the client's volume range
  448.     *     into the audio device volume range. 
  449.     *     NOTE: This function returns TRUE if volume is supported by this 
  450.     *     audio device.
  451.     */
  452.     STDMETHOD_(BOOL,InitVolume)  (THIS_
  453.  const UINT16 /*IN*/ uMinVolume,
  454.  const UINT16 /*IN*/ uMaxVolume) PURE;
  455.     /************************************************************************
  456.     *  Method:
  457.     *     IHXAudioDevice::SetVolume
  458.     *  Purpose:
  459.     *     The caller calls this to set the audio device volume level.
  460.     */
  461.     STDMETHOD(SetVolume)         (THIS_
  462.  const UINT16    /*IN*/ uVolume) PURE;
  463.     /************************************************************************
  464.     *  Method:
  465.     *     IHXAudioDevice::GetVolume
  466.     *  Purpose:
  467.     *     The caller calls this to get the audio device volume level.
  468.     */
  469.     STDMETHOD_(UINT16,GetVolume) (THIS) PURE;
  470.     /************************************************************************
  471.     *  Method:
  472.     *     IHXAudioDevice::Reset
  473.     *  Purpose:
  474.     *     The caller calls this to reset the audio device.
  475.     */
  476.     STDMETHOD(Reset) (THIS) PURE;
  477.     /************************************************************************
  478.     *  Method:
  479.     *     IHXAudioDevice::Drain
  480.     *  Purpose:
  481.     *     The caller calls this to drain the audio device.
  482.     */
  483.     STDMETHOD(Drain) (THIS) PURE;
  484.     /************************************************************************
  485.     *  Method:
  486.     *     IHXAudioDevice::CheckFormat
  487.     *  Purpose:
  488.     *     The caller calls this to check the input format with the
  489.     *     audio device format.
  490.     */
  491.     STDMETHOD(CheckFormat)  (THIS_
  492.     const HXAudioFormat* /*IN*/ pAudioFormat ) PURE;
  493.     /************************************************************************
  494.     *  Method:
  495.     *     IHXAudioDevice::GetCurrentAudioTime
  496.     *  Purpose:
  497.     *     The caller calls this to get current system audio time.
  498.     */
  499.     STDMETHOD(GetCurrentAudioTime)  (THIS_
  500.     REF(ULONG32) /*OUT*/ ulCurrentTime) PURE;
  501. };
  502. /****************************************************************************
  503.  * 
  504.  *  Interface:
  505.  * IHXAudioDeviceResponse
  506.  * 
  507.  *  Purpose:
  508.  * 
  509.  * Object that exports audio device Response API
  510.  * This interface is currently to be used ONLY by the RMA engine 
  511.  * internally.
  512.  * 
  513.  *  IID_IHXAudioDeviceResponse:
  514.  * 
  515.  *  {00000704-0901-11d1-8B06-00A024406D59}
  516.  * 
  517.  */
  518. DEFINE_GUID(IID_IHXAudioDeviceResponse, 0x00000704, 0x901, 0x11d1, 0x8b, 0x6, 
  519.     0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  520. #undef  INTERFACE
  521. #define INTERFACE   IHXAudioDeviceResponse
  522. DECLARE_INTERFACE_(IHXAudioDeviceResponse, IUnknown)
  523. {
  524.     /*
  525.      *  IUnknown methods
  526.      */
  527.     STDMETHOD(QueryInterface)       (THIS_
  528.                     REFIID riid,
  529.                     void** ppvObj) PURE;
  530.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  531.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  532.     /*
  533.      *  IHXAudioDeviceResponse methods
  534.      */
  535.     /************************************************************************
  536.      *  Method:
  537.      *      IHXAudioDeviceResponse::OnTimeSync
  538.      *  Purpose:
  539.      *      Notification interface provided by users of the IHXAudioDevice
  540.      *      interface. This method is called by the IHXAudioDevice when
  541.      *      audio playback occurs.
  542.      */
  543.     STDMETHOD(OnTimeSync)         (THIS_
  544.                      ULONG32          /*IN*/ ulTimeEnd) PURE;
  545. };
  546. /****************************************************************************
  547.  * 
  548.  *  Interface:
  549.  * 
  550.  *  IHXAudioHook
  551.  * 
  552.  *  Purpose:
  553.  * 
  554.  *  Clients must implement this interface to access pre- or post-mixed 
  555.  *  audio data. Use this interface to get post processed audio buffers and
  556.  *  their associated audio format.
  557.  *
  558.  *  IID_IHXAudioHook:
  559.  * 
  560.  *  {00000705-0901-11d1-8B06-00A024406D59}
  561.  * 
  562.  */
  563. DEFINE_GUID(IID_IHXAudioHook, 0x00000705, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  564.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  565. #undef  INTERFACE
  566. #define INTERFACE   IHXAudioHook
  567. DECLARE_INTERFACE_(IHXAudioHook, IUnknown)
  568. {
  569.     /*
  570.      *  IUnknown methods!
  571.      */
  572.     STDMETHOD(QueryInterface) (THIS_
  573.                     REFIID riid,
  574.                     void** ppvObj) PURE;
  575.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  576.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  577.     /*
  578.      *  IHXAudioHook methods
  579.      */
  580.     /************************************************************************
  581.      *  Method:
  582.      *      IHXAudioHook::OnInit
  583.      *  Purpose:
  584.      *      Audio Services calls OnInit() with the audio data format of the
  585.      *     audio data that will be provided in the OnBuffer() method.
  586.      */
  587.     STDMETHOD(OnInit) (THIS_
  588.                      HXAudioFormat* /*IN*/ pFormat) PURE;
  589.     /************************************************************************
  590.      *  Method:
  591.      *      IHXAudioHook::OnBuffer
  592.      *  Purpose:
  593.      *      Audio Services calls OnBuffer() with audio data packets. The
  594.      *     renderer should not modify the data in the IHXBuffer part of
  595.      *     pAudioInData.  If the renderer wants to write a modified
  596.      *     version of the data back to Audio Services, then it should 
  597.      *     create its own IHXBuffer, modify the data and then associate 
  598.      *     this buffer with the pAudioOutData->pData member.
  599.      */
  600.     STDMETHOD(OnBuffer) (THIS_
  601.                      HXAudioData* /*IN*/   pAudioInData,
  602.                      HXAudioData* /*OUT*/  pAudioOutData) PURE;
  603. };
  604. /****************************************************************************
  605.  * 
  606.  *  Interface:
  607.  * 
  608.  *  IHXAudioStreamInfoResponse
  609.  * 
  610.  *  Purpose:
  611.  * 
  612.  *  Clients must implement this interface when interested in receiving
  613.  *  notification of the total number of streams associated with this
  614.  *  audio player.
  615.  *
  616.  *  IID_IHXAudioStreamInfoResponse:
  617.  * 
  618.  *  {00000706-0901-11d1-8B06-00A024406D59}
  619.  * 
  620.  */
  621. DEFINE_GUID(IID_IHXAudioStreamInfoResponse, 0x00000706, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  622.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  623. #undef  INTERFACE
  624. #define INTERFACE   IHXAudioStreamInfoResponse
  625. DECLARE_INTERFACE_(IHXAudioStreamInfoResponse, IUnknown)
  626. {
  627.     /*
  628.      *  IUnknown methods
  629.      */
  630.     STDMETHOD(QueryInterface)       (THIS_
  631.                     REFIID riid,
  632.                     void** ppvObj) PURE;
  633.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  634.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  635.     /*
  636.      *  IHXAudioStreamInfoResponse methods
  637.      */
  638.     /************************************************************************
  639.      *  Method:
  640.      *      IHXAudioStreamInfoResponse::OnStream
  641.      *  Purpose:
  642.      *     The client implements this to get notification of streams 
  643.      *     associated with this player. Use 
  644.      *     AudioPlayer::SetStreamInfoResponse() to register your 
  645.      *     implementation with the AudioPlayer. Once player has been 
  646.      *     initialized, it will call OnStream() multiple times to pass all 
  647.      *     the streams. Since a stream can be added mid-presentation, 
  648.      *     IHXAudioStreamInfoResponse object should be written to handle 
  649.      *     OnStream() in the midst of the presentation as well.
  650.      */
  651.     STDMETHOD(OnStream) (THIS_
  652. IHXAudioStream* /*IN*/ pAudioStream) PURE;
  653. };
  654. /****************************************************************************
  655.  * 
  656.  *  Interface:
  657.  * 
  658.  *  IHXVolume
  659.  * 
  660.  *  Purpose:
  661.  * 
  662.  *  This interface provides access to Audio Services volume control. Use this
  663.  *  interface to get, set, or receive notifications of volume changes. Audio
  664.  *  Services implements IHXVolume for IHXAudioPlayer, IHXAudioStream and 
  665.  *  for the audio device. Clients can use the IHXVolume interface to get/set
  666.  *  volume levels of each audio stream, to get/set volume levels for the 
  667.  *  audio player's mixed data, or to get/set the volume levels of the audio 
  668.  *  device. See AudioStream::GetStreamVolume() (TBD), AudioPlayer::
  669.  *  GetAudioVolume() and AudioPlayer::GetDeviceVolume().
  670.  *
  671.  *  IID_IHXVolume:
  672.  * 
  673.  *  {00000707-0901-11d1-8B06-00A024406D59}
  674.  * 
  675.  */
  676. DEFINE_GUID(IID_IHXVolume, 0x00000707, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  677.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  678. #undef  INTERFACE
  679. #define INTERFACE   IHXVolume
  680. DECLARE_INTERFACE_(IHXVolume, IUnknown)
  681. {
  682.     /*
  683.      *  IUnknown methods
  684.      */
  685.     STDMETHOD(QueryInterface)       (THIS_
  686.                     REFIID riid,
  687.                     void** ppvObj) PURE;
  688.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  689.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  690.     /*
  691.      *  IHXVolume methods
  692.      */
  693.     /************************************************************************
  694.      *  Method:
  695.      *      IHXVolume::SetVolume
  696.      *  Purpose:
  697.      *     Call this to set the volume level.
  698.      */
  699.     STDMETHOD(SetVolume) (THIS_
  700.                          const UINT16 /*IN*/ uVolume ) PURE;
  701.     /************************************************************************
  702.      *  Method:
  703.      *      IHXVolume::GetVolume
  704.      *  Purpose:
  705.      *     Call this to get the current volume level.
  706.      */
  707.     STDMETHOD_(UINT16,GetVolume)   (THIS) PURE;
  708.      /************************************************************************
  709.      *  Method:
  710.      *      IHXVolume::SetMute
  711.      *  Purpose:
  712.      *     Call this to mute the volume.
  713.      */
  714.     STDMETHOD(SetMute)   (THIS_
  715.                          const BOOL /*IN*/ bMute ) PURE;
  716.      /************************************************************************
  717.      *  Method:
  718.      *      IHXVolume::GetMute
  719.      *  Purpose:
  720.      *     Call this to determine if the volume is muted.
  721.      *   
  722.      */
  723.     STDMETHOD_(BOOL,GetMute)       (THIS) PURE;
  724.      /************************************************************************
  725.      *  Method:
  726.      *      IHXVolume::AddAdviseSink
  727.      *  Purpose:
  728.      *     Call this to register an IHXVolumeAdviseSink. The advise sink
  729.      *     methods: OnVolumeChange() and OnMuteChange() are called when
  730.      *     ever IHXVolume::SetVolume() and IHXVolume::SetMute() are
  731.      *     called.
  732.      */
  733.     STDMETHOD(AddAdviseSink) (THIS_
  734.  IHXVolumeAdviseSink* /*IN*/ pSink
  735. ) PURE;
  736.      /************************************************************************
  737.      *  Method:
  738.      *      IHXVolume::RemoveAdviseSink
  739.      *  Purpose:
  740.      *     Call this to unregister an IHXVolumeAdviseSink. Use this when
  741.      *     you are no longer interested in receiving volume or mute change
  742.      *     notifications.
  743.      */
  744.     STDMETHOD(RemoveAdviseSink) (THIS_
  745.  IHXVolumeAdviseSink* /*IN*/ pSink
  746. ) PURE;
  747. };
  748. /****************************************************************************
  749.  * 
  750.  *  Interface:
  751.  * 
  752.  *  IHXVolumeAdviseSink
  753.  * 
  754.  *  Purpose:
  755.  * 
  756.  *  This interface provides access to notifications of volume changes. A 
  757.  *  client must implement this interface if they are interested in receiving 
  758.  *  notifications of volume level changes or mute state changes. A client must 
  759.  *  register their volume advise sink using IHXVolume::AddAdviseSink().
  760.  *  See the IHXVolume interface.
  761.  * 
  762.  *  IID_IHXVolumeAdviseSink:
  763.  * 
  764.  *  {00000708-0901-11d1-8B06-00A024406D59}
  765.  * 
  766.  */
  767. DEFINE_GUID(IID_IHXVolumeAdviseSink, 0x00000708, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  768.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  769. #undef  INTERFACE
  770. #define INTERFACE   IHXVolumeAdviseSink
  771. DECLARE_INTERFACE_(IHXVolumeAdviseSink, IUnknown)
  772. {
  773.     /*
  774.      *  IUnknown methods
  775.      */
  776.     STDMETHOD(QueryInterface)       (THIS_
  777.                     REFIID riid,
  778.                     void** ppvObj) PURE;
  779.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  780.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  781.     /*
  782.      *  IHXVolumeAdviseSink methods
  783.      */
  784.     /************************************************************************
  785.      *  Method:
  786.      *      IHXVolumeAdviseSink::OnVolumeChange
  787.      *  Purpose:
  788.      *     This interface is called whenever the associated IHXVolume
  789.      *     SetVolume() is called.
  790.      */
  791.     STDMETHOD(OnVolumeChange) (THIS_ 
  792. const UINT16 uVolume
  793. ) PURE;
  794.     /************************************************************************
  795.      *  Method:
  796.      *      IHXVolumeAdviseSink::OnMuteChange
  797.      *  Purpose:
  798.      *     This interface is called whenever the associated IHXVolume
  799.      *     SetMute() is called.
  800.      *    
  801.      */
  802.     STDMETHOD(OnMuteChange)     (THIS_
  803. const BOOL bMute
  804. ) PURE;
  805. };
  806. /****************************************************************************
  807.  * 
  808.  *  Interface:
  809.  * 
  810.  *  IHXDryNotification
  811.  * 
  812.  *  Purpose:
  813.  * 
  814.  *  Audio Renderer should implement this if it needs notification when the 
  815.  *  audio stream is running dry. 
  816.  *
  817.  *  IID_IHXDryNotification:
  818.  * 
  819.  *  {00000709-0901-11d1-8B06-00A024406D59}
  820.  * 
  821.  */
  822. DEFINE_GUID(IID_IHXDryNotification, 0x00000709, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  823.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  824. #undef  INTERFACE
  825. #define INTERFACE   IHXDryNotification
  826. DECLARE_INTERFACE_(IHXDryNotification, IUnknown)
  827. {
  828.     /*
  829.      *  IUnknown methods
  830.      */
  831.     STDMETHOD(QueryInterface)       (THIS_
  832.     REFIID riid,
  833.     void** ppvObj) PURE;
  834.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  835.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  836.     /*
  837.      *  IHXDryNotification methods
  838.      */
  839.     /************************************************************************
  840.      *  Method:
  841.      *      IHXDryNotification::OnDryNotification
  842.      *  Purpose:
  843.      *     This function is called when it is time to write to audio device 
  844.      *     and there is not enough data in the audio stream. The renderer can
  845.      *     then decide to add more data to the audio stream. This should be 
  846.      *     done synchronously within the call to this function.
  847.      *     It is OK to not write any data. Silence will be played instead.
  848.      */
  849.     STDMETHOD(OnDryNotification)    (THIS_
  850.     UINT32 /*IN*/ ulCurrentStreamTime,
  851.     UINT32 /*IN*/ ulMinimumDurationRequired
  852.     ) PURE;
  853. };
  854. /****************************************************************************
  855.  * 
  856.  *  Interface:
  857.  * 
  858.  *  IHXAudioDeviceManager
  859.  * 
  860.  *  Purpose:
  861.  * 
  862.  *  Allows the default audio device to be replaced.
  863.  *
  864.  *  IID_IHXAudioDeviceManager:
  865.  * 
  866.  *  {0000070A-0901-11d1-8B06-00A024406D59}
  867.  * 
  868.  */
  869. DEFINE_GUID(IID_IHXAudioDeviceManager, 0x0000070A, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  870.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  871. #undef  INTERFACE
  872. #define INTERFACE   IHXAudioDeviceManager
  873. DECLARE_INTERFACE_(IHXAudioDeviceManager, IUnknown)
  874. {
  875.     /*
  876.      *  IUnknown methods
  877.      */
  878.     STDMETHOD(QueryInterface)       (THIS_
  879.     REFIID riid,
  880.     void** ppvObj) PURE;
  881.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  882.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  883.     /*
  884.      *  IHXAudioDeviceManager methods
  885.      */
  886.     /**********************************************************************
  887.      *  Method:
  888.      *      IHXAudioDeviceManager::Replace
  889.      *  Purpose:
  890.      *  This is used to replace the default implementation of the audio
  891.      *  device by the given audio device interface. 
  892.      */
  893.     STDMETHOD(Replace)         (THIS_
  894.     IHXAudioDevice*    /*IN*/ pAudioDevice) PURE;
  895.     /**********************************************************************
  896.      *  Method:
  897.      *      IHXAudioDeviceManager::Remove
  898.      *  Purpose:
  899.      *  This is used to remove the audio device given to the manager in
  900.      *  the earlier call to Replace.
  901.      */
  902.     STDMETHOD(Remove)         (THIS_
  903.     IHXAudioDevice*    /*IN*/ pAudioDevice) PURE;
  904.     /************************************************************************
  905.     *  Method:
  906.     *   IHXAudioDeviceManager::AddFinalHook
  907.     *  Purpose:
  908.     * One last chance to modify data being written to the audio device.
  909.     * This hook allows the user to change the audio format that
  910.     *   is to be written to the audio device. This can be done in call
  911.     *   to OnInit() in IHXAudioHook.
  912.     */
  913.     STDMETHOD(SetFinalHook) (THIS_
  914. IHXAudioHook*     /*IN*/ pHook
  915. ) PURE;
  916.     /************************************************************************
  917.     *  Method:
  918.     *   IHXAudioDeviceManager::RemoveFinalHook
  919.     *  Purpose:
  920.     * Remove final hook
  921.     */
  922.     STDMETHOD(RemoveFinalHook) (THIS_
  923. IHXAudioHook*    /*IN*/ pHook
  924. ) PURE;
  925.    /************************************************************************
  926.     *  Method:
  927.     *   IHXAudioDeviceManager::GetAudioFormat
  928.     *  Purpose:
  929.     * Returns the audio format in which the audio device is opened.
  930.     * This function will fill in the pre-allocated HXAudioFormat 
  931.     * structure passed in.
  932.     */
  933.     STDMETHOD(GetAudioFormat)   (THIS_
  934.         HXAudioFormat* /*IN/OUT*/pAudioFormat) PURE;
  935. };
  936. /****************************************************************************
  937.  * 
  938.  *  Interface:
  939.  * 
  940.  *      IHXAudioCrossFade
  941.  * 
  942.  *  Purpose:
  943.  *
  944.  *  This interface can be used to cross-fade two audio streams. It is exposed 
  945.  *  by IHXAudioPlayer
  946.  * 
  947.  *  IID_IHXAudioCrossFade:
  948.  * 
  949.  *  {0000070B-0901-11d1-8B06-00A024406D59}
  950.  * 
  951.  */
  952. DEFINE_GUID(IID_IHXAudioCrossFade, 0x0000070B, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  953.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  954. #undef  INTERFACE
  955. #define INTERFACE   IHXAudioCrossFade
  956. DECLARE_INTERFACE_(IHXAudioCrossFade, IUnknown)
  957. {
  958.     /*
  959.      *  IUnknown methods
  960.      */
  961.     STDMETHOD(QueryInterface) (THIS_
  962. REFIID riid,
  963. void** ppvObj) PURE;
  964.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  965.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  966.     
  967.     /*
  968.      *  IHXAudioCrossFade methods
  969.      */
  970.     /************************************************************************
  971.      *  Method:
  972.      *      IHXAudioCrossFade::CrossFade
  973.      *  Purpose:
  974.      *     Cross-fade two audio streams.
  975.      *     pStreamFrom     - Stream to be cross faded from
  976.      *     pStreamTo     - Stream to be cross faded to
  977.      *     ulFromCrossFadeStartTime- "From" Stream time when cross fade is 
  978.      *       to be started
  979.      *     ulToCrossFadeStartTime  - "To" Stream time when cross fade is to 
  980.      *       be started
  981.      *     ulCrossFadeDuration     - Duration over which cross-fade needs
  982.      *       to be done
  983.      *     
  984.      */
  985.     STDMETHOD(CrossFade) (THIS_
  986. IHXAudioStream* pStreamFrom,
  987. IHXAudioStream* pStreamTo,
  988. UINT32  ulFromCrossFadeStartTime,
  989. UINT32  ulToCrossFadeStartTime,
  990. UINT32  ulCrossFadeDuration) PURE;
  991. };
  992. /****************************************************************************
  993.  * 
  994.  *  Interface:
  995.  * 
  996.  *      IHXAudioStream2
  997.  * 
  998.  *  Purpose:
  999.  *
  1000.  *  This interface contains some last-minute added audio stream functions
  1001.  * 
  1002.  *  IID_IHXAudioStream2:
  1003.  * 
  1004.  *  {0000070C-0901-11d1-8B06-00A024406D59}
  1005.  * 
  1006.  */
  1007. DEFINE_GUID(IID_IHXAudioStream2, 0x0000070C, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1008.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1009. #undef  INTERFACE
  1010. #define INTERFACE   IHXAudioStream2
  1011. DECLARE_INTERFACE_(IHXAudioStream2, IUnknown)
  1012. {
  1013.     /*
  1014.      *  IUnknown methods
  1015.      */
  1016.     STDMETHOD(QueryInterface) (THIS_
  1017. REFIID riid,
  1018. void** ppvObj) PURE;
  1019.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1020.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1021.     
  1022.     /*
  1023.      *  IHXAudioStream2 methods
  1024.      */
  1025.    /************************************************************************
  1026.     *  Method:
  1027.     *      IHXAudioStream2::RemoveDryNotification
  1028.     *  Purpose:
  1029.     *     Use this to remove itself from the notification response object
  1030.     *     during the stream switching.
  1031.     */
  1032.     STDMETHOD(RemoveDryNotification)   (THIS_
  1033.    IHXDryNotification* /*IN*/ pNotification
  1034.       ) PURE;
  1035.    /************************************************************************
  1036.     *  Method:
  1037.     *      IHXAudioStream2::GetAudioFormat
  1038.     *  Purpose:
  1039.     *     Returns the input audio format of the data written by the 
  1040.     *     renderer. This function will fill in the pre-allocated 
  1041.     *     HXAudioFormat structure passed in.
  1042.     */
  1043.     STDMETHOD(GetAudioFormat)   (THIS_
  1044.         HXAudioFormat* /*IN/OUT*/pAudioFormat) PURE;
  1045. };
  1046. /****************************************************************************
  1047.  * 
  1048.  *  Interface:
  1049.  * 
  1050.  *      IHXAudioPushdown
  1051.  * 
  1052.  *  Purpose:
  1053.  *
  1054.  *  This interface can be used to setup the audio pushdown time.
  1055.  * 
  1056.  *  IID_IHXAudioPushdown:
  1057.  * 
  1058.  *  {0000070D-0901-11d1-8B06-00A024406D59}
  1059.  * 
  1060.  */
  1061. DEFINE_GUID(IID_IHXAudioPushdown, 0x0000070D, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1062.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1063. #undef  INTERFACE
  1064. #define INTERFACE   IHXAudioPushdown
  1065. DECLARE_INTERFACE_(IHXAudioPushdown, IUnknown)
  1066. {
  1067.     /*
  1068.      *  IUnknown methods
  1069.      */
  1070.     STDMETHOD(QueryInterface) (THIS_
  1071. REFIID riid,
  1072. void** ppvObj) PURE;
  1073.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1074.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1075.     
  1076.     /*
  1077.      *  IHXAudioPushdown methods
  1078.      */
  1079.    /************************************************************************
  1080.     *  Method:
  1081.     *      IHXAudioPushdown::SetAudioPushdown
  1082.     *  Purpose:
  1083.     *     Use this to set the minimum audio pushdown value in ms.
  1084.     *     This is the amount of audio data that is being written 
  1085.     *     to the audio device before starting playback.
  1086.     */
  1087.     STDMETHOD(SetAudioPushdown)   (THIS_
  1088.    UINT32 /*IN*/ ulAudioPushdown
  1089.         ) PURE;
  1090. };
  1091. /****************************************************************************
  1092.  * 
  1093.  *  Interface:
  1094.  * 
  1095.  *      IHXAudioHookManager
  1096.  * 
  1097.  *  Purpose:
  1098.  *
  1099.  *  This interface can be used to add a hook at the audio device layer.
  1100.  * 
  1101.  *  IID_IHXAudioHookManager:
  1102.  * 
  1103.  *  {0000070E-0901-11d1-8B06-00A024406D59}
  1104.  * 
  1105.  */
  1106. DEFINE_GUID(IID_IHXAudioHookManager, 0x0000070E, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1107.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1108. #undef  INTERFACE
  1109. #define INTERFACE   IHXAudioHookManager
  1110. DECLARE_INTERFACE_(IHXAudioHookManager, IUnknown)
  1111. {
  1112.     /*
  1113.      *  IUnknown methods
  1114.      */
  1115.     STDMETHOD(QueryInterface) (THIS_
  1116. REFIID riid,
  1117. void** ppvObj) PURE;
  1118.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1119.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1120.     
  1121.    /*
  1122.     *  IHXAudioHookManager methods
  1123.     */
  1124.    /************************************************************************
  1125.     *  Method:
  1126.     *      IHXAudioHookManager::AddHook
  1127.     *  Purpose:
  1128.     *     Use this to add a hook 
  1129.     */
  1130.     STDMETHOD(AddHook)   (THIS_
  1131.   IHXAudioHook* /*IN*/ pHook
  1132.   ) PURE;
  1133.    /************************************************************************
  1134.     *  Method:
  1135.     *      IHXAudioHookManager::RemoveHook
  1136.     *  Purpose:
  1137.     *     Use this to remove a hook 
  1138.     */
  1139.     STDMETHOD(RemoveHook) (THIS_
  1140.   IHXAudioHook* /*IN*/ pHook
  1141.   ) PURE;
  1142. };
  1143. // $Private:
  1144. /****************************************************************************
  1145.  * 
  1146.  *  Interface:
  1147.  * 
  1148.  *      IHXMultiPlayPauseSupport
  1149.  * 
  1150.  *  Purpose:
  1151.  *
  1152.  *  This interface can be used to control whether audio services handles multi-player pause / rewind support
  1153.  * 
  1154.  *  IID_IHXMultiPlayPauseSupport:
  1155.  * 
  1156.  *  {0000070F-0901-11d1-8B06-00A024406D59}
  1157.  * 
  1158.  */
  1159. DEFINE_GUID(IID_IHXMultiPlayPauseSupport, 
  1160.     0x0000070F, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1161. #undef  INTERFACE
  1162. #define INTERFACE   IHXMultiPlayPauseSupport
  1163. DECLARE_INTERFACE_(IHXMultiPlayPauseSupport, IUnknown)
  1164. {
  1165.     /*
  1166.      *  IUnknown methods
  1167.      */
  1168.     STDMETHOD(QueryInterface) (THIS_
  1169. REFIID riid,
  1170. void** ppvObj) PURE;
  1171.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1172.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1173.     
  1174.    /*
  1175.     *  IHXMultiPlayPauseSupport methods
  1176.     */
  1177.     STDMETHOD_(BOOL,GetDisableMultiPlayPauseSupport) (THIS) PURE;
  1178. };
  1179. /****************************************************************************
  1180.  * 
  1181.  *  Interface:
  1182.  * 
  1183.  *  IHXAudioDeviceManager2
  1184.  * 
  1185.  *  Purpose:
  1186.  * 
  1187.  *  Audio Device Manager extension
  1188.  *
  1189.  *  IID_IHXAudioDeviceManager2:
  1190.  * 
  1191.  *  {00000710-0901-11d1-8B06-00A024406D59}
  1192.  * 
  1193.  */
  1194. DEFINE_GUID(IID_IHXAudioDeviceManager2, 0x00000710, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1195.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1196. #undef  INTERFACE
  1197. #define INTERFACE   IHXAudioDeviceManager2
  1198. DECLARE_INTERFACE_(IHXAudioDeviceManager2, IUnknown)
  1199. {
  1200.     /*
  1201.      *  IUnknown methods
  1202.      */
  1203.     STDMETHOD(QueryInterface)       (THIS_
  1204.     REFIID riid,
  1205.     void** ppvObj) PURE;
  1206.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  1207.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  1208.     /*
  1209.      *  IHXAudioDeviceManager2 methods
  1210.      */
  1211.     /**********************************************************************
  1212.      *  Method:
  1213.      *      IHXAudioDeviceManager2::IsReplacedDevice
  1214.      *  Purpose:
  1215.      *  This is used to determine if the audio device has been replaced.
  1216.      */
  1217.     STDMETHOD_(BOOL, IsReplacedDevice)         (THIS) PURE;
  1218. };
  1219. /****************************************************************************
  1220.  * 
  1221.  *  Interface:
  1222.  * 
  1223.  *  IHXAudioResampler
  1224.  * 
  1225.  *  Purpose:
  1226.  * 
  1227.  *  Audio Resampler
  1228.  *
  1229.  *  IID_IHXAudioResampler:
  1230.  * 
  1231.  *  {00000711-0901-11d1-8B06-00A024406D59}
  1232.  * 
  1233.  */
  1234. DEFINE_GUID(IID_IHXAudioResampler, 0x00000711, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1235.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1236. #undef  INTERFACE
  1237. #define INTERFACE   IHXAudioResampler
  1238. DECLARE_INTERFACE_(IHXAudioResampler, IUnknown)
  1239. {
  1240.     /*
  1241.      *  IUnknown methods
  1242.      */
  1243.     STDMETHOD(QueryInterface)       (THIS_
  1244.     REFIID riid,
  1245.     void** ppvObj) PURE;
  1246.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  1247.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  1248.     /*
  1249.      *  IHXAudioResampler methods
  1250.      */
  1251.     /**********************************************************************
  1252.      *  Method:
  1253.      *      IHXAudioResampler::Resample
  1254.      *  Purpose:
  1255.      *  Will produce 1 output frame for every (upFactor/downFactor) inputs
  1256.      *  frames, straddling if not an integer.  Works down to 1 sample/call.
  1257.      * 
  1258.      *  Returns actual number of output frames.
  1259.      ***********************************************************************/
  1260.     STDMETHOD_(UINT32, Resample)    (   THIS_
  1261.                                         UINT16* pInput, 
  1262.                                         UINT32 ulInputBytes, 
  1263.                                         UINT16* pOutput) PURE;
  1264.     /**********************************************************************
  1265.      *  Method:
  1266.      *      IHXAudioResampler::Requires
  1267.      *  Purpose:
  1268.      *  Returns number of input frames required to produce this number
  1269.      *  of output frames, given the current state of the filter.
  1270.      */
  1271.     STDMETHOD_(UINT32, Requires)    (   THIS_
  1272.                                         UINT32 ulOutputFrames) PURE;
  1273. };
  1274. /****************************************************************************
  1275.  * 
  1276.  *  Interface:
  1277.  * 
  1278.  *  IHXAudioResamplerManager
  1279.  * 
  1280.  *  Purpose:
  1281.  * 
  1282.  *  Audio Resampler Manager
  1283.  *
  1284.  *  IID_IHXAudioResamplerManager:
  1285.  * 
  1286.  *  {00000712-0901-11d1-8B06-00A024406D59}
  1287.  * 
  1288.  */
  1289. DEFINE_GUID(IID_IHXAudioResamplerManager, 0x00000712, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1290.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1291. #undef  INTERFACE
  1292. #define INTERFACE   IHXAudioResamplerManager
  1293. DECLARE_INTERFACE_(IHXAudioResamplerManager, IUnknown)
  1294. {
  1295.     /*
  1296.      *  IUnknown methods
  1297.      */
  1298.     STDMETHOD(QueryInterface)       (THIS_
  1299.     REFIID riid,
  1300.     void** ppvObj) PURE;
  1301.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  1302.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  1303.     /*
  1304.      *  IHXAudioResamplerManager methods
  1305.      *
  1306.      */
  1307.     STDMETHOD(CreateResampler) (THIS_
  1308. HXAudioFormat     inAudioFormat,
  1309. REF(HXAudioFormat)     outAudioFormat,
  1310. REF(IHXAudioResampler*)    pResampler) PURE;
  1311. };
  1312. /****************************************************************************
  1313.  * 
  1314.  *  Interface:
  1315.  * 
  1316.  *  IHXAudioPushdown2
  1317.  * 
  1318.  *  Purpose:
  1319.  * 
  1320.  *  Audio PushDown access methods
  1321.  *
  1322.  *  IID_IHXAudioPushdown2:
  1323.  * 
  1324.  *  {00000713-0901-11d1-8B06-00A024406D59}
  1325.  * 
  1326.  */
  1327. DEFINE_GUID(IID_IHXAudioPushdown2, 0x00000713, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1328.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1329. #undef  INTERFACE
  1330. #define INTERFACE   IHXAudioPushdown2
  1331. DECLARE_INTERFACE_(IHXAudioPushdown2, IHXAudioPushdown)
  1332. {
  1333.     /*
  1334.      *  IUnknown methods
  1335.      */
  1336.     STDMETHOD(QueryInterface)       (THIS_
  1337.     REFIID riid,
  1338.     void** ppvObj) PURE;
  1339.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  1340.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  1341.    /************************************************************************
  1342.     *  Method:
  1343.     *      IHXAudioPushdown::SetAudioPushdown
  1344.     *  Purpose:
  1345.     *     Use this to set the minimum audio pushdown value in ms.
  1346.     *     This is the amount of audio data that is being written 
  1347.     *     to the audio device before starting playback.
  1348.     */
  1349.     STDMETHOD(SetAudioPushdown) (THIS_
  1350. UINT32 /*IN */ ulAudioPushdown) PURE;
  1351.    /************************************************************************
  1352.     *  Method:
  1353.     *      IHXAudioPushdown2::GetAudioPushdown
  1354.     *  Purpose:
  1355.     *     Use this to get the minimum audio pushdown value in ms.
  1356.     *     This is the amount of audio data that is being written 
  1357.     *     to the audio device before starting playback.
  1358.     */
  1359.     STDMETHOD(GetAudioPushdown) (THIS_
  1360. REF(UINT32) /*OUT*/ ulAudioPushdown) PURE;
  1361.    /************************************************************************
  1362.     *  Method:
  1363.     *      IHXAudioPushdown2::GetCurrentAudioDevicePushdown
  1364.     *  Purpose:
  1365.     *     Use this to get the audio pushed down to the audio device and haven't
  1366.     *     been played yet
  1367.     */
  1368.     STDMETHOD(GetCurrentAudioDevicePushdown)   (THIS_
  1369. REF(UINT32) /*OUT*/ ulAudioPusheddown) PURE;
  1370. };
  1371. /****************************************************************************
  1372.  * 
  1373.  *  Interface:
  1374.  * 
  1375.  *  IHXAudioMultiChannel
  1376.  * 
  1377.  *  Purpose:
  1378.  * 
  1379.  *  Multi-channel audio support
  1380.  *
  1381.  *  IID_IHXAudioMultiChannel:
  1382.  * 
  1383.  *  {00000714-0901-11d1-8B06-00A024406D59}
  1384.  * 
  1385.  */
  1386. DEFINE_GUID(IID_IHXAudioMultiChannel, 0x00000714, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1387.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  1388. #undef  INTERFACE
  1389. #define INTERFACE   IHXAudioMultiChannel
  1390. DECLARE_INTERFACE_(IHXAudioMultiChannel, IUnknown)
  1391. {
  1392.     /*
  1393.      *  IUnknown methods
  1394.      */
  1395.     STDMETHOD(QueryInterface)       (THIS_
  1396.     REFIID riid,
  1397.     void** ppvObj) PURE;
  1398.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  1399.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  1400.    /*
  1401.     *  IHXAudioMultiChannel methods
  1402.     */
  1403.     STDMETHOD_(BOOL,GetMultiChannelSupport)    (THIS) PURE;
  1404. };
  1405. // $EndPrivate.
  1406. #endif  /* _HXAUSVC_H_ */