Pipe.cpp
上传用户:zjb_0001
上传日期:2007-01-11
资源大小:154k
文件大小:3k
源码类别:

Audio

开发平台:

Visual C++

  1. // Pipe.cpp: implementation of the CPipe class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "fister.h"
  6. #include "Pipe.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CPipe::CPipe()
  16. {
  17. m_SoundIn.DataFromSoundIn = DataFromSoundIn; // assign pointer to callback function
  18. m_SoundIn.m_pOwner = this;
  19. m_SoundOut.GetDataToSoundOut = GetDataToSoundOut;  // assign pointer to callback function
  20. m_SoundOut.m_pOwner = this;
  21. }
  22. CPipe::~CPipe()
  23. {
  24. }
  25. void CPipe::DataFromSoundIn(CBuffer* buffer, void* Owner)
  26. {
  27. ((CPipe*) Owner)->WriteSoundDataToFile(buffer);
  28. }
  29. void CPipe::WriteSoundDataToFile(CBuffer* buffer)
  30. {
  31. if(m_pFile)
  32. {
  33. if(!m_pFile->Write(buffer))
  34. {
  35. m_SoundIn.Stop();
  36. AfxMessageBox("Unable to write to file");
  37. }
  38. }
  39. /*
  40. TRACE("InTop: Full=%2d, Empty=%2dn", m_FifoFull.GetCount(), m_FifoEmpty.GetCount());
  41. // add to fifo buffer
  42. m_FifoFull.Add(buffer);
  43. buffer = (CBuffer*) m_FifoEmpty.Consume();
  44. TRACE("InEnd: Full=%2d, Empty=%2dn", m_FifoFull.GetCount(), m_FifoEmpty.GetCount());
  45. */
  46. }
  47. void CPipe::GetDataToSoundOut(CBuffer* buffer, void* Owner)
  48. {
  49. ((CPipe*) Owner)->ReadSoundDataFromFile(buffer);
  50. }
  51. void CPipe::ReadSoundDataFromFile(CBuffer* buffer)
  52. {
  53. if(m_pFile)
  54. {
  55. if(!m_pFile->Read(buffer))
  56. {
  57. // enf of file -> tell the GUI
  58. OnEndOfPlayingFile();
  59. delete m_pFile;
  60. }
  61. }
  62. /*
  63. TRACE("OutTop: Full=%2d, Empty=%2dn", m_FifoFull.GetCount(), m_FifoEmpty.GetCount());
  64. // consume from fifo buffer
  65. m_FifoEmpty.Add(buffer);
  66. buffer = (CBuffer*) m_FifoFull.Consume();
  67. TRACE("OutEnd: Full=%2d, Empty=%2dn", m_FifoFull.GetCount(), m_FifoEmpty.GetCount());
  68. */
  69. }
  70. void CPipe::StartRecordingToFile()
  71. {
  72. m_pFile = new CSoundFile("sound1.wav", m_SoundIn.GetFormat());
  73. if(m_pFile && m_pFile->IsOK())
  74. m_SoundIn.Start();
  75. }
  76. void CPipe::StopRecordingToFile()
  77. {
  78. m_SoundIn.Stop();
  79. // close output file
  80. if(m_pFile)
  81. delete m_pFile;
  82. }
  83. void CPipe::StartPlayingFromFile()
  84. {
  85. m_pFile = new CSoundFile("sound1.wav");
  86. if(m_pFile && m_pFile->IsOK())
  87. m_SoundOut.Start(m_pFile->GetFormat());
  88. else
  89. ErrorMsg("Unable to open file");
  90. }
  91. void CPipe::StopPlayingFromFile()
  92. {
  93. m_SoundOut.Stop();
  94. // close output file
  95. if(m_pFile)
  96. delete m_pFile;
  97. }
  98. void CPipe::OnEndOfPlayingFile()
  99. {
  100. // implement this function in the GUI to change things when EOF is reached
  101. }