sound.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:4k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * sound.h
  3.  *
  4.  * Sound class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: sound.h,v $
  30.  * Revision 1.9  2000/05/01 05:59:11  robertj
  31.  * Added mutex to PSoundChannel buffer structure.
  32.  *
  33.  * Revision 1.8  1999/09/23 04:28:43  robertj
  34.  * Allowed some Win32 only access to wave format in sound channel
  35.  *
  36.  * Revision 1.7  1999/05/24 03:02:32  robertj
  37.  * Added include for compiling under different environments.
  38.  *
  39.  * Revision 1.6  1999/02/22 10:15:15  robertj
  40.  * Sound driver interface implementation to Linux OSS specification.
  41.  *
  42.  * Revision 1.5  1999/02/16 06:02:39  robertj
  43.  * Major implementation to Linux OSS model
  44.  *
  45.  * Revision 1.4  1998/11/30 02:55:33  robertj
  46.  * New directory structure
  47.  *
  48.  * Revision 1.3  1998/09/24 03:30:26  robertj
  49.  * Added open software license.
  50.  *
  51.  * Revision 1.2  1996/08/08 10:10:45  robertj
  52.  * Directory structure changes for common files.
  53.  *
  54.  * Revision 1.1  1994/04/12 08:21:52  robertj
  55.  * Initial revision
  56.  *
  57.  */
  58. #ifndef _PSOUND
  59. #include <mmsystem.h>
  60. ///////////////////////////////////////////////////////////////////////////////
  61. // PSound
  62. class PWaveFormat : public PObject
  63. {
  64.     PCLASSINFO(PWaveFormat, PObject)
  65.   public:
  66.     PWaveFormat();
  67.     ~PWaveFormat();
  68.     PWaveFormat(const PWaveFormat & fmt);
  69.     PWaveFormat & operator=(const PWaveFormat & fmt);
  70.     void PrintOn(ostream &) const;
  71.     void ReadFrom(istream &);
  72.     void SetFormat(unsigned numChannels, unsigned sampleRate, unsigned bitsPerSample);
  73.     void SetFormat(const void * data, PINDEX size);
  74.     BOOL           SetSize   (PINDEX sz);
  75.     PINDEX         GetSize   () const { return  size;       }
  76.     void         * GetPointer() const { return  waveFormat; }
  77.     WAVEFORMATEX * operator->() const { return  waveFormat; }
  78.     WAVEFORMATEX & operator *() const { return *waveFormat; }
  79.     operator   WAVEFORMATEX *() const { return  waveFormat; }
  80.   protected:
  81.     PINDEX         size;
  82.     WAVEFORMATEX * waveFormat;
  83. };
  84. class PSound;
  85. class PWaveBuffer : public PBYTEArray
  86. {
  87.   PCLASSINFO(PWaveBuffer, PBYTEArray);
  88.   private:
  89.     PWaveBuffer(PINDEX sz = 0);
  90.     ~PWaveBuffer();
  91.     PWaveBuffer & operator=(const PSound & sound);
  92.     DWORD Prepare(HWAVEOUT hWaveOut, PINDEX & count);
  93.     DWORD Prepare(HWAVEIN hWaveIn);
  94.     DWORD Release();
  95.     void PrepareCommon(PINDEX count);
  96.     HWAVEOUT hWaveOut;
  97.     HWAVEIN  hWaveIn;
  98.     WAVEHDR  header;
  99.   friend class PSoundChannel;
  100. };
  101. PARRAY(PWaveBufferArray, PWaveBuffer);
  102. #include "../../sound.h"
  103.   public:
  104.     // Overrides from class PChannel
  105.     virtual PString GetName() const;
  106.       // Return the name of the channel.
  107.       
  108.     virtual BOOL Read(void * buf, PINDEX len);
  109.       // Low level read from the channel. This function will block until the
  110.       // requested number of characters were read.
  111.     virtual BOOL Write(const void * buf, PINDEX len);
  112.       // Low level write to the channel. This function will block until the
  113.       // requested number of characters were written.
  114.     virtual BOOL Close();
  115.       // Close the channel.
  116.     PString GetErrorText() const;
  117.     // Get a text form of the last error encountered.
  118.     BOOL SetFormat(const PWaveFormat & format);
  119.   protected:
  120.     PString     deviceName;
  121.     Directions  direction;
  122.     HWAVEIN     hWaveIn;
  123.     HWAVEOUT    hWaveOut;
  124.     HANDLE      hEventDone;
  125.     PWaveFormat waveFormat;
  126.     PWaveBufferArray buffers;
  127.     PINDEX           bufferIndex;
  128.     PINDEX           bufferByteOffset;
  129.     PMutex           bufferMutex;
  130.   private:
  131.     BOOL OpenDevice(unsigned id);
  132. };
  133. #endif