WAVEX.CPP
上传用户:chinamans
上传日期:2013-03-17
资源大小:202k
文件大小:14k
源码类别:

TAPI编程

开发平台:

Visual C++

  1. // Source for wave functions for the talker32 app
  2. // (c) Dialogic corp 1995, 1996
  3. #include "stdafx.h"
  4. #include <mmsystem.h>
  5. #include <mmreg.h>                   
  6.                    
  7. #include "wavstate.h"
  8. #include "wavex.h" 
  9. IMPLEMENT_DYNAMIC(CTapiWave, CObject)
  10. // Do initialization as needed
  11. WAVEFORMATEX CTapiWave::wfDialogicFormats[] = {{WAVE_FORMAT_DIALOGIC_OKI_ADPCM, 1, 6000, 3000, 1,4},
  12. {WAVE_FORMAT_DIALOGIC_OKI_ADPCM, 1, 8000, 4000, 1,4},
  13. {WAVE_FORMAT_MULAW, 1, 6000, 6000, 1,8},
  14. {WAVE_FORMAT_MULAW, 1, 8000, 8000, 1,8},
  15. {WAVE_FORMAT_MULAW, 1, 11025, 11025, 1,8},
  16. {WAVE_FORMAT_ALAW, 1, 6000, 6000, 1,8},
  17. {WAVE_FORMAT_ALAW, 1, 8000, 8000, 1,8},
  18. {WAVE_FORMAT_ALAW, 1, 11025, 11025, 1,8},
  19. {WAVE_FORMAT_PCM, 1, 6000, 6000, 1,8},
  20. {WAVE_FORMAT_PCM, 1, 8000, 8000, 1,8},
  21. {WAVE_FORMAT_PCM, 1, 11025, 11025, 1,8},
  22. {0,0,0,0,0,0}};
  23. CTapiWave::CTapiWave()
  24. {
  25. m_hWaveIn = NULL;
  26. m_hWaveOut = NULL;
  27. m_lpvLine = NULL;
  28. m_lpvCall = NULL;
  29. ctwSetState(WAVE_IDLE);
  30. }
  31. // Constructor
  32. CTapiWave::CTapiWave(LPVOID lpvLine, LPVOID lpvCall, DWORD dwLineID)
  33. {
  34. // Note that there is no direct reference to any of the TAPI-related classes
  35. m_lpvLine = lpvLine;
  36. m_lpvCall = lpvCall;
  37. m_dwLineID = dwLineID;
  38. if(m_lpvLine != NULL)      // one file name per line ONLY
  39. sprintf(m_szRecFileName, "record%.2d.wav", m_dwLineID);
  40. else 
  41. sprintf(m_szRecFileName, "%8.8x.wav", (LPVOID) this);
  42. m_hWaveIn = NULL;
  43. m_hWaveOut = NULL;
  44. m_lpvLine = NULL;
  45. m_lpvCall = NULL;
  46. m_dwVolume = MAX_ABS_VOLUME; //default=full volume
  47. ctwSetState(WAVE_IDLE);
  48. }
  49. // Public wrapper around the real play
  50. BOOL CTapiWave::ctwPlay(HWND hWnd, UINT nID, LPSTR lpFileName)
  51. if(WAVE_IDLE != ctwGetState()) return FALSE;
  52.   ctwSetState(PREPARING_TO_PLAY);
  53. m_hWaveOut = WavexPlay(hWnd, nID, lpFileName);
  54. if(m_hWaveOut != NULL) ctwSetState(PLAYING);
  55. else ctwSetState(WAVE_IDLE);
  56. return (m_hWaveOut != NULL);
  57. }
  58.                       
  59. // Play the WAVE file specified on input                      
  60. HWAVEOUT CTapiWave::WavexPlay(HWND hWnd, UINT nID, LPSTR lpFileName)
  61. WAVEFORMATEX *lpwfWaveFormat = NULL;
  62. WAVEHDR *lpwhWaveHdr = NULL;
  63. HMMIO hmmH;      
  64. HWAVEOUT hWave = NULL;
  65. MMCKINFO mmParent, mmSubchunk;
  66. DWORD dwFmtSize, dwDataSize, dwFlags;
  67. HPSTR lpWaveData = NULL;
  68. char szErr[128];
  69. MMRESULT mmrc;
  70. TRACE("*** TALKER32 ***: enter Playn");
  71.     // Open wave file 
  72.     hmmH = mmioOpen(lpFileName, NULL, MMIO_READ); //| MMIO_ALLOCBUF);
  73.     if(!hmmH)
  74.     {   
  75.      MessageBox(NULL, "Input WAVE file open failed", NULL, MB_ICONSTOP);
  76.         return FALSE;
  77.     }                 
  78.     
  79.     // Locate a 慠IFF