numeric oscilloscope

  1. /*--------------------------------------------------------------------------------
  2. 'Nom du projet : Oscilloscope
  3. 'Outil : Visual C++ 6
  4. 'Nom du fichier: WavePlay.cpp : implementation file
  5. 'Realisation:Mathieu Texier et Emmanuel Traineau
  6. 'Date: Juin 2003
  7. 'Responsable: Eric Meleiro
  8. '--------------------------------------------------------------------------------
  9.  
  10. Explications : Ouverture et enregistrement des fichiers sons
  11.  
  12. */
  13.  
  14. #include "stdafx.h"
  15. #include "WavePlay.h"
  16.  
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. CWavePlay::CWavePlay()
  24. {
  25.         m_hwo = NULL;
  26. }
  27.  
  28. CWavePlay::~CWavePlay()
  29. {
  30.         Stop();
  31. }
  32.  
  33. // test le WavePlayer
  34. BOOL CWavePlay::IsActive (void)
  35. {       if (m_hwo)
  36.                 return TRUE;
  37.         else
  38.                 return FALSE;
  39. }
  40.  
  41. // Arret de la lecture du fichier WAV
  42. void CWavePlay::Stop (void)
  43. {
  44.         m_hwo = 0;
  45. }
  46.  
  47. // Enregistrement d'un fichier WAV
  48. void CWavePlay::MakeWaveFile (WORD channels, DWORD frequency, WORD bps,
  49.                                    void* data, DWORD length, LPSTR fname)
  50. {
  51.         BYTE wavehead[] = {'R','I','F','F',
  52.                                                 0, 0, 0, 0,                       // DWORD: Filelaenge - 8
  53.                                                 'W','A','V','E',
  54.                                                 'f','m','t',' ',
  55.                                                 16, 0, 0, 0,              // Konstant
  56.                                                 1, 0,                             // Konstant
  57.                                                 0, 0,                             // WORD: Kanaele
  58.                                                 0, 0, 0, 0,                       // DWORD: Sample Freqenz
  59.                                                 0, 0, 0, 0,                       // DWORD: Average
  60.                                                 0, 0,                             // WORD: Bytes pro Sample
  61.                                                 0, 0,                             // WORD: format-specific
  62.                                                 'd','a','t','a',
  63.                                                 0, 0, 0, 0};              // DWORD: Laenge Samplingdaten
  64.  
  65.         // Entête du fichier
  66.         *(DWORD *)(&wavehead[4]) = length + sizeof(wavehead) - 8;
  67.         *(WORD *)(&wavehead[22]) = channels;
  68.         *(DWORD *)(&wavehead[24]) = frequency;
  69.         *(DWORD *)(&wavehead[28]) = channels * bps/8 * frequency;
  70.         *(WORD *)(&wavehead[32]) = bps/8;
  71.         *(WORD *)(&wavehead[34]) = bps;
  72.         *(DWORD *)(&wavehead[40]) = length;
  73.  
  74.         // File anlegen und Header schreiben
  75.         CFile cf (fname, CFile::modeCreate | CFile::modeReadWrite);
  76.         cf.Write (wavehead, sizeof (wavehead));
  77.  
  78.         // ... und Daten hinterher
  79.         cf.Write (data, length);
  80. }
  81.  

contact - link to this site