OSDN Git Service

run loop input and output of wave
authorBreak <t_windbreak@yahoo.co.jp>
Sat, 12 Jun 2010 23:37:18 +0000 (08:37 +0900)
committerBreak <t_windbreak@yahoo.co.jp>
Thu, 17 Jun 2010 21:38:31 +0000 (06:38 +0900)
source/CInputWave.cpp
source/CInputWave.h
source/COutputWave.cpp
source/COutputWave.h
source/CWaveData.cpp
source/CWaveData.h
source/main.cpp

index aba1511..8e8a2be 100644 (file)
@@ -7,7 +7,6 @@
 #include <MMSystem.h>
 //#include <tchar.h>
 
-
 ////////////////////////////////////////////////////////////////////////////////
 // \83R\83\93\83X\83g\83\89\83N\83^
 ////////////////////////////////////////////////////////////////////////////////
@@ -25,8 +24,11 @@ CInputWave::CInputWave()
 
        // \83f\83o\83C\83X\82ð\83I\81[\83v\83\93\82µ\82Ä\82¢\82é
        m_isOpen = false;
-       // \8dÄ\90\92\86
+       // \93ü\97Í\92\86
        m_isInput = false;
+
+       m_MaxNumberOfBuffer = 3;
+       m_NumberOfBufferInQueue = 0;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -46,7 +48,44 @@ void CALLBACK CInputWave::waveInProc(HWAVEIN in_hWaveIn, UINT in_Message, DWORD
        // waveInOpen\8e\9e\82Éin_Instance\82É\83N\83\89\83X\82Ì\83|\83C\83\93\83^\82ð\8ai\94[\82µ\82Ä\82¨\82­
 
        CInputWave* a_pInputWave = reinterpret_cast<CInputWave*>(in_Instance);
-       a_pInputWave->procedureWave(in_hWaveIn, in_Message, in_Instance, in_Param1, in_Param2);
+       a_pInputWave->callbackWave(in_hWaveIn, in_Message, in_Instance, in_Param1, in_Param2);
+}
+
+void CInputWave::callbackWave(HWAVEIN in_hWaveIn, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2)
+{
+       // \83\81\83b\83Z\81[\83W\82Ì\8eí\97Þ\82²\82Æ\82Ì\8f\88\97\9d\82ð\8ds\82¤
+       switch(in_Message){
+       // \83f\83o\83C\83X\82ª waveInClose \8aÖ\90\94\82Å\83N\83\8d\81[\83Y\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
+       case WIM_CLOSE:
+               std::cout << "WIM_CLOSE" << std::endl;
+               break;
+
+       // \83f\83o\83C\83X\82ª\81AwaveInAddBuffer \8aÖ\90\94\82Å\91\97\90M\82³\82ê\82½\83f\81[\83^\83u\83\8d\83b\83N\82Ì\8f\88\97\9d\82ð\8fI\97¹\82µ\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
+       case WIM_DATA:
+               std::cout << "WIM_DATA" << std::endl;
+               // \98^\89¹\83t\83\89\83O\82ª\97§\82Á\82Ä\82¢\82é\8fê\8d\87\82Í\83o\83b\83t\83@\82ð\89Á\82¦\82é
+               m_NumberOfBufferInQueue--;
+               try{
+                       if(m_isInput){
+                               start();
+                       }
+                       else{
+                               m_isInput = false;
+                       }
+               }
+               catch(...){
+                       m_isInput = false;
+               }
+               break;
+
+       // \83f\83o\83C\83X\82ª waveInOpen \8aÖ\90\94\82Å\83I\81[\83v\83\93\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
+       case WIM_OPEN:
+               std::cout << "WIM_OPEN" << std::endl;
+               break;
+       default:
+               throw "error: WAVE Call Back";
+               break;
+       }
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -63,27 +102,23 @@ bool CInputWave::open()
 {
        // \98A\91±\82Å\8dÄ\90\82·\82é\8fê\8d\87\82Í\83_\83u\83\8b\83o\83b\83t\83@\82ð\8eg\97p\82·\82é\81H
 
-       // \83f\83o\83C\83X\82ð\8aJ\82­
-       // \8aJ\82­\83f\83o\83C\83X\82à\88ø\90\94\82Å\8ew\92è\82Å\82«\82é\82æ\82¤\82É\82·\82é
+       // open a wave device handle
+       // \81¦\8aJ\82­\83f\83o\83C\83X\82à\88ø\90\94\82Å\8ew\92è\82Å\82«\82é\82æ\82¤\82É\82·\82é
        if(waveInOpen(&m_hWaveIn, WAVE_MAPPER, m_pWaveData->getWaveFormat(), reinterpret_cast<DWORD>(waveInProc), reinterpret_cast<DWORD>(this), CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
-               //MessageBox(NULL, TEXT("WAVE\83f\83o\83C\83X\82Ì\83I\81[\83v\83\93\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B"), NULL, MB_ICONWARNING);
-               throw "WAVE\83f\83o\83C\83X\82Ì\83I\81[\83v\83\93\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B";
+               throw "failer open wave device handle";
                return false;
        }
 
-       // Wave\83w\83b\83_\81[
-       m_WaveHeader.lpData         = m_pWaveData->getWaveBuffer();
-       m_WaveHeader.dwBufferLength = m_pWaveData->getBufferSize();
+       // set wave header elements
+       // get new buffer of wave
+       m_WaveHeader.lpData         = m_pWaveData->getWriteBuffer();
+       m_WaveHeader.dwBufferLength = m_pWaveData->getWriteBufferSize();
        m_WaveHeader.dwFlags        = 0;
 
        if(m_WaveHeader.lpData == NULL){
                return false;
        }
 
-       // \83w\83b\83_\81[\82ð\8f\80\94õ\82·\82é
-       waveInPrepareHeader(m_hWaveIn, &m_WaveHeader, sizeof(WAVEHDR));
-       // \83o\83b\83t\83@\82ð\93n\82·
-       waveInAddBuffer(m_hWaveIn, &m_WaveHeader, sizeof(WAVEHDR));
        m_isOpen = true;
 
        return true;
@@ -98,83 +133,120 @@ bool CInputWave::close()
 
        if(m_isOpen){
                m_isOpen = false;
-               // \83w\83b\83_\81[\89ð\95ú\97p\8aÖ\90\94
-               waveInUnprepareHeader(m_hWaveIn, &m_WaveHeader, sizeof(WAVEHDR));
-               // \83f\83o\83C\83X\83N\83\8d\81[\83Y\8aÖ\90\94
+               // uninitialize a wave header
+               waveInUnprepareHeader(m_hWaveIn, m_pWaveData->getWriteWaveHeader(), sizeof(WAVEHDR));
+               // close a wave device handle
                waveInClose(m_hWaveIn);
        }
        return true;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+// add wave buffer in queue
+////////////////////////////////////////////////////////////////////////////////
+bool CInputWave::addWaveBuffer()
+{
+       while(m_NumberOfBufferInQueue < m_MaxNumberOfBuffer){
+               WAVEHDR* a_pWaveHeader        = m_pWaveData->getWriteWaveHeader();
+               a_pWaveHeader->lpData         = m_pWaveData->getWriteBuffer();
+               a_pWaveHeader->dwBufferLength = m_pWaveData->getWriteBufferSize();
+               a_pWaveHeader->dwFlags        = 0;
+
+               m_pWaveData->nextWriteBuffer();
+
+               // initialize a wave header
+               // must use this function for initialize, because not open wave header structure
+               switch(waveInPrepareHeader(m_hWaveIn, a_pWaveHeader, sizeof(WAVEHDR))){
+               // \90¬\8c÷
+               case MMSYSERR_NOERROR:
+                       break;
+
+               // \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é
+               case MMSYSERR_HANDLEBUSY:
+                       throw "waveInPrepareHeader: \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é ";
+                       break;
+               // \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é
+               case MMSYSERR_INVALHANDLE:
+                       throw "waveInPrepareHeader: \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é";
+                       break;
+               // \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢
+               case MMSYSERR_NODRIVER:
+                       throw "waveInPrepareHeader:\83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢";
+                       break;
+               // \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢
+               case MMSYSERR_NOMEM:
+                       throw "waveInPrepareHeader: \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢";
+                       break;
+               }
+
+               // take a buffer for wave
+               switch(waveInAddBuffer(m_hWaveIn, a_pWaveHeader, sizeof(WAVEHDR))){
+               // \90¬\8c÷
+               case MMSYSERR_NOERROR:
+                       break;
+
+               // \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é
+               case MMSYSERR_HANDLEBUSY:
+                       throw "waveInAddBuffer: \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é";
+                       break;
+
+               // \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é
+               case MMSYSERR_INVALHANDLE:
+                       throw "waveInAddBuffer: \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é";
+                       break;
+
+               // \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢
+               case MMSYSERR_NODRIVER:
+                       throw "waveInAddBuffer: \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢";
+                       break;
+
+               // \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢
+               case MMSYSERR_NOMEM:
+                       throw "waveInAddBuffer: \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢";
+                       break;
+
+               // \83o\83b\83t\83@\82ª\8f\80\94õ\82³\82ê\82Ä\82¢\82È\82¢
+               case WAVERR_UNPREPARED:
+                       throw "waveInAddBuffer: \83o\83b\83t\83@\82ª\8f\80\94õ\82³\82ê\82Ä\82¢\82È\82¢";
+                       break;
+
+               }
+               m_NumberOfBufferInQueue++;
+       }
+       return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
 // \93ü\97Í\81i\98^\89¹\81j\82ð\8aJ\8en\82·\82é
 ////////////////////////////////////////////////////////////////////////////////
 bool CInputWave::start()
 {
-       // \83f\83o\83C\83X\82ð\8aJ\82¢\82Ä\82¢\82È\82¢\82©\81A\98^\89¹\92\86\82È\82çfalse\82ð\95Ô\82·
-       if(!m_isOpen || m_isInput){
+       // \83f\83o\83C\83X\82ð\8aJ\82¢\82Ä\82¢\82È\82¢\82È\82çfalse\82ð\95Ô\82·
+       if(!m_isOpen){
                return false;
        }
 
-       // \83o\83b\83t\83@\82ð\8dÄ\82Ñ\93n\82³\82È\82¢\82Æ\90V\82½\82É\98^\89¹\82Å\82«\82È\82¢\82ç\82µ\82¢
-       // \83w\83b\83_\81[\82ð\8f\80\94õ\82·\82é
-       switch(waveInPrepareHeader(m_hWaveIn, &m_WaveHeader, sizeof(WAVEHDR))){
-       // \90¬\8c÷
-       case MMSYSERR_NOERROR:
-               break;
 
-       // \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é
-       case MMSYSERR_HANDLEBUSY:
-               throw "waveInPrepareHeader: \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é ";
-               break;
-       // \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é
-       case MMSYSERR_INVALHANDLE:
-               throw "waveInPrepareHeader: \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é";
-               break;
-       // \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢
-       case MMSYSERR_NODRIVER:
-               throw "waveInPrepareHeader:\83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢";
-               break;
-       // \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢
-       case MMSYSERR_NOMEM:
-               throw "waveInPrepareHeader: \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢";
-               break;
-       }
+       // \83o\83b\83t\83@\82ð\89Á\82¦\82é
+       addWaveBuffer();
 
-       // \83o\83b\83t\83@\82ð\93n\82·
-       switch(waveInAddBuffer(m_hWaveIn, &m_WaveHeader, sizeof(WAVEHDR))){
+       switch(waveInStart(m_hWaveIn)){
        // \90¬\8c÷
        case MMSYSERR_NOERROR:
                break;
 
-       // \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é
-       case MMSYSERR_HANDLEBUSY:
-               throw "waveInAddBuffer: \95Ê\82Ì\83X\83\8c\83b\83h\82ª\83n\83\93\83h\83\8b\82ð\8eg\97p\92\86\82Å\82 \82é";
-               break;
-
-       // \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é
+       // \8ew\92è\82³\82ê\82½\83f\83o\83C\83X\83n\83\93\83h\83\8b\82Í\96³\8cø\82Å\82·\81B
        case MMSYSERR_INVALHANDLE:
-               throw "waveInAddBuffer: \83f\83o\83C\83X\83n\83\93\83h\83\8b\82ª\96³\8cø\82Å\82 \82é";
                break;
 
-       // \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢
+       // \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\91\8dÝ\82µ\82Ü\82¹\82ñ\81B
        case MMSYSERR_NODRIVER:
-               throw "waveInAddBuffer: \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\82È\82¢";
                break;
 
-       // \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢
+       // \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\82©\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82Ü\82¹\82ñ\81B
        case MMSYSERR_NOMEM:
-               throw "waveInAddBuffer: \83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82È\82¢\81A\82Ü\82½\82Í\83\8d\83b\83N\82Å\82«\82È\82¢";
                break;
-
-       // \83o\83b\83t\83@\82ª\8f\80\94õ\82³\82ê\82Ä\82¢\82È\82¢
-       case WAVERR_UNPREPARED:
-               throw "waveInAddBuffer: \83o\83b\83t\83@\82ª\8f\80\94õ\82³\82ê\82Ä\82¢\82È\82¢";
-               break;
-
        }
-
-       waveInStart(m_hWaveIn);
        m_isInput = true;
        return true;
 }
@@ -196,28 +268,3 @@ bool CInputWave::stop()
        return true;
 }
 
-////////////////////////////////////////////////////////////////////////////////
-// \93ü\97Í\83f\83o\83C\83X\82Ì\8fó\91Ô\82ð\92m\82ç\82¹\82é\83R\81[\83\8b\83o\83b\83N\8aÖ\90\94
-////////////////////////////////////////////////////////////////////////////////
-void CInputWave::procedureWave(HWAVEIN in_hWaveIn, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2)
-{
-       // \83\81\83b\83Z\81[\83W\82Ì\8eí\97Þ\82²\82Æ\82Ì\8f\88\97\9d\82ð\8ds\82¤
-       switch(in_Message){
-       // \83f\83o\83C\83X\82ª waveInClose \8aÖ\90\94\82Å\83N\83\8d\81[\83Y\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
-       case WIM_CLOSE:
-               std::cout << "WIM_CLOSE" << std::endl;
-               break;
-       // \83f\83o\83C\83X\82ª\81AwaveInAddBuffer \8aÖ\90\94\82Å\91\97\90M\82³\82ê\82½\83f\81[\83^\83u\83\8d\83b\83N\82Ì\8f\88\97\9d\82ð\8fI\97¹\82µ\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
-       case WIM_DATA:
-               m_isInput = false;
-               std::cout << "WIM_DATA" << std::endl;
-               break;
-       // \83f\83o\83C\83X\82ª waveInOpen \8aÖ\90\94\82Å\83I\81[\83v\83\93\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
-       case WIM_OPEN:
-               std::cout << "WIM_OPEN" << std::endl;
-               break;
-       default:
-               throw "error: WAVE Call Back";
-               break;
-       }
-}
index 5510a5f..2f6ca98 100644 (file)
@@ -30,6 +30,10 @@ private:
        bool m_isOpen;
        // \98^\89¹\92\86
        bool m_isInput;
+       // \83L\83\85\81[\82É\89Á\82¦\82é\83o\83b\83t\83@\90\94
+       int m_MaxNumberOfBuffer;
+       // \83L\83\85\81[\82É\89Á\82¦\82Ä\82¢\82é\83o\83b\83t\83@\90\94
+       int m_NumberOfBufferInQueue;
 
        ////////////////////////////////////////////////////////////////////////////////
        // \83R\83\93\83X\83g\83\89\83N\83^
@@ -41,13 +45,14 @@ public:
        // \83f\83X\83g\83\89\83N\83^
        ////////////////////////////////////////////////////////////////////////////////
 public:
-       ~CInputWave();
+       virtual ~CInputWave();
 
        ////////////////////////////////////////////////////////////////////////////////
        // \83R\81[\83\8b\83o\83b\83N\95Ï\90\94
        ////////////////////////////////////////////////////////////////////////////////
        // \93ü\97Í\83f\83o\83C\83X\82Ì\8fó\91Ô\82ð\92m\82ç\82¹\82é\83R\81[\83\8b\83o\83b\83N\8aÖ\90\94
        static void CALLBACK waveInProc(HWAVEIN in_hWaveIn, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2);
+       void callbackWave(HWAVEIN in_hWaveIn, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2);
 
 
        ////////////////////////////////////////////////////////////////////////////////
@@ -60,12 +65,14 @@ public:
        bool open();
        // \83f\83o\83C\83X\82ð\95Â\82\82é
        bool close();
+protected:
+       // add wave buffer in queue
+       bool addWaveBuffer();
+public:
        // \93ü\97Í\81i\98^\89¹\81j\82ð\8aJ\8en\82·\82é
        bool start();
        // \93ü\97Í\81i\98^\89¹\81j\82ð\92â\8e~\82·\82é
        bool stop();
-       // \93ü\97Í\83f\83o\83C\83X\82Ì\8fó\91Ô\82ð\92m\82ç\82¹\82é\83R\81[\83\8b\83o\83b\83N\8aÖ\90\94
-       void procedureWave(HWAVEIN in_hWaveIn, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2);
 
        ////////////////////////////////////////////////////////////////////////////////
        // \91®\90«\83\81\83\\83b\83h
index 4691d15..52179df 100644 (file)
@@ -27,6 +27,9 @@ COutputWave::COutputWave()
        m_isOpen = false;
        // \8dÄ\90\92\86
        m_isOutput = false;
+
+       m_MaxNumberOfBuffer = 2;
+       m_NumberOfBufferInQueue = 0;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -46,9 +49,47 @@ void CALLBACK COutputWave::waveOutProc(HWAVEOUT in_hWaveOut, UINT in_Message, DW
        // waveInOpen\8e\9e\82Éin_Instance\82É\83N\83\89\83X\82Ì\83|\83C\83\93\83^\82ð\8ai\94[\82µ\82Ä\82¨\82­
 
        COutputWave* a_pOutputWave = reinterpret_cast<COutputWave*>(in_Instance);
-       a_pOutputWave->procedureWave(in_hWaveOut, in_Message, in_Instance, in_Param1, in_Param2);
+       a_pOutputWave->callbackWave(in_hWaveOut, in_Message, in_Instance, in_Param1, in_Param2);
+}
+
+void COutputWave::callbackWave(HWAVEOUT in_hWaveOut, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2)
+{
+       // \83\81\83b\83Z\81[\83W\82Ì\8eí\97Þ\82²\82Æ\82Ì\8f\88\97\9d\82ð\8ds\82¤
+       switch(in_Message){
+       // \83f\83o\83C\83X\82ª waveOutClose \8aÖ\90\94\82Å\83N\83\8d\81[\83Y\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
+       case WOM_CLOSE:
+               std::cout << "WOM_CLOSE" << std::endl;
+               break;
+
+       // \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\81AwaveOutWrite \8aÖ\90\94\82Å\91\97\90M\82³\82ê\82½\83f\81[\83^\83u\83\8d\83b\83N\82Ì\8f\88\97\9d\82ð\8fI\97¹\82µ\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
+       case WOM_DONE:
+               std::cout << "WOM_DATA" << std::endl;
+               // \8dÄ\90\83t\83\89\83O\82ª\97§\82Á\82Ä\82¢\82é\8fê\8d\87\82Í\83o\83b\83t\83@\82ð\89Á\82¦\82é
+               m_NumberOfBufferInQueue--;
+               try{
+                       if(m_isOutput){
+                               start();
+                       }
+                       else{
+                               m_isOutput = false;
+                       }
+               }
+               catch(...){
+                       m_isOutput = false;
+               }
+               break;
+
+       // \83f\83o\83C\83X\82ª waveOutOpen \8aÖ\90\94\82Å\83I\81[\83v\83\93\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
+       case WOM_OPEN:
+               std::cout << "WOM_OPEN" << std::endl;
+               break;
+       default:
+               throw "error: WAVE Call Back";
+               break;
+       }
 }
 
+
 ////////////////////////////////////////////////////////////////////////////////
 // \8f\89\8aú\89»
 ////////////////////////////////////////////////////////////////////////////////
@@ -61,8 +102,6 @@ void COutputWave::initialize()
 ////////////////////////////////////////////////////////////////////////////////
 bool COutputWave::open()
 {
-       // \98A\91±\82Å\8dÄ\90\82·\82é\8fê\8d\87\82Í\83_\83u\83\8b\83o\83b\83t\83@\82ð\8eg\97p\82·\82é\81H
-
        // \83f\83o\83C\83X\82ð\8aJ\82­
        // \8aJ\82­\83f\83o\83C\83X\82à\88ø\90\94\82Å\8ew\92è\82Å\82«\82é\82æ\82¤\82É\82·\82é
        if(waveOutOpen(&m_hWaveOut, WAVE_MAPPER, m_pWaveData->getWaveFormat(), reinterpret_cast<DWORD>(waveOutProc), reinterpret_cast<DWORD>(this), CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
@@ -71,18 +110,6 @@ bool COutputWave::open()
                return false;
        }
 
-       // Wave\83w\83b\83_\81[
-       m_WaveHeader.lpData         = m_pWaveData->getWaveBuffer();
-       m_WaveHeader.dwBufferLength = m_pWaveData->getBufferSize();
-       m_WaveHeader.dwFlags        = 0;
-
-       if(m_WaveHeader.lpData == NULL){
-               return false;
-       }
-
-
-       // \83w\83b\83_\81[\82ð\8f\80\94õ\82·\82é
-       waveOutPrepareHeader(m_hWaveOut, &m_WaveHeader, sizeof(WAVEHDR));
        m_isOpen = true;
 
        return true;
@@ -104,18 +131,60 @@ bool COutputWave::close()
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+// add wave buffer in queue
+////////////////////////////////////////////////////////////////////////////////
+bool COutputWave::addWaveBuffer()
+{
+       while(m_NumberOfBufferInQueue < m_MaxNumberOfBuffer){
+               WAVEHDR* a_pWaveHeader      = m_pWaveData->getReadWaveHeader();
+               m_WaveHeader.lpData         = m_pWaveData->getReadBuffer();
+               m_WaveHeader.dwBufferLength = m_pWaveData->getReadBufferSize();
+               m_WaveHeader.dwFlags        = 0;
+
+               m_pWaveData->nextReadBuffer();
+
+               if(m_WaveHeader.lpData == NULL){
+                       return false;
+               }
+
+               // \83w\83b\83_\81[\82ð\8f\80\94õ\82·\82é
+               waveOutPrepareHeader(m_hWaveOut, a_pWaveHeader, sizeof(WAVEHDR));
+
+               m_NumberOfBufferInQueue++;
+       }
+       return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
 // \8fo\97Í\81i\8dÄ\90\81j\82ð\8aJ\8en\82·\82é
 ////////////////////////////////////////////////////////////////////////////////
 bool COutputWave::start()
 {
-       // \83f\83o\83C\83X\82ð\8aJ\82¢\82Ä\82¢\82È\82¢\82©\81A\8dÄ\90\92\86\82È\82çfalse\82ð\95Ô\82·
-       if(!m_isOpen || m_isOutput){
+       // \83f\83o\83C\83X\82ð\8aJ\82¢\82Ä\82¢\82È\82¢\82È\82çfalse\82ð\95Ô\82·
+       if(!m_isOpen){
                return false;
        }
 
-       // \8fo\97Í\81i\8dÄ\90\81j\82ð\8aJ\8en\82·\82é
-       waveOutWrite(m_hWaveOut, &m_WaveHeader, sizeof(WAVEHDR));
-       m_isOutput = true;
+       while(m_NumberOfBufferInQueue < m_MaxNumberOfBuffer){
+               WAVEHDR* a_pWaveHeader        = m_pWaveData->getReadWaveHeader();
+               a_pWaveHeader->lpData         = m_pWaveData->getReadBuffer();
+               a_pWaveHeader->dwBufferLength = m_pWaveData->getReadBufferSize();
+               a_pWaveHeader->dwFlags        = 0;
+
+               if(a_pWaveHeader->lpData == NULL){
+                       return false;
+               }
+
+               m_pWaveData->nextReadBuffer();
+
+               // \83w\83b\83_\81[\82ð\8f\80\94õ\82·\82é
+               waveOutPrepareHeader(m_hWaveOut,a_pWaveHeader , sizeof(WAVEHDR));
+               // \8fo\97Í\81i\8dÄ\90\81j\82ð\8aJ\8en\82·\82é
+               waveOutWrite(m_hWaveOut, a_pWaveHeader, sizeof(WAVEHDR));
+               m_isOutput = true;
+
+               m_NumberOfBufferInQueue++;
+       }
 
        return true;
 }
@@ -130,34 +199,8 @@ bool COutputWave::stop()
                return false;
        }
 
-       m_isOutput = false;
        waveOutReset(m_hWaveOut);
+       m_isOutput = false;
 
        return true;
 }
-
-////////////////////////////////////////////////////////////////////////////////
-// \8fo\97Í\83f\83o\83C\83X\82Ì\8fó\91Ô\82ð\92m\82ç\82¹\82é\83R\81[\83\8b\83o\83b\83N\8aÖ\90\94
-////////////////////////////////////////////////////////////////////////////////
-void COutputWave::procedureWave(HWAVEOUT in_hWaveOut, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2)
-{
-       // \83\81\83b\83Z\81[\83W\82Ì\8eí\97Þ\82²\82Æ\82Ì\8f\88\97\9d\82ð\8ds\82¤
-       switch(in_Message){
-       // \83f\83o\83C\83X\82ª waveOutClose \8aÖ\90\94\82Å\83N\83\8d\81[\83Y\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
-       case WOM_CLOSE:
-               std::cout << "WOM_CLOSE" << std::endl;
-               break;
-       // \83f\83o\83C\83X\83h\83\89\83C\83o\82ª\81AwaveOutWrite \8aÖ\90\94\82Å\91\97\90M\82³\82ê\82½\83f\81[\83^\83u\83\8d\83b\83N\82Ì\8f\88\97\9d\82ð\8fI\97¹\82µ\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
-       case WOM_DONE:
-               m_isOutput = false;
-               std::cout << "WOM_DATA" << std::endl;
-               break;
-       // \83f\83o\83C\83X\82ª waveOutOpen \8aÖ\90\94\82Å\83I\81[\83v\83\93\82³\82ê\82½\82Æ\82«\82É\91\97\90M\82³\82ê\82Ü\82·\81B
-       case WOM_OPEN:
-               std::cout << "WOM_OPEN" << std::endl;
-               break;
-       default:
-               throw "error: WAVE Call Back";
-               break;
-       }
-}
index 3ea0f6d..9cffd0c 100644 (file)
@@ -30,6 +30,10 @@ private:
        bool m_isOpen;
        // \8dÄ\90\92\86
        bool m_isOutput;
+       // \83L\83\85\81[\82É\89Á\82¦\82é\83o\83b\83t\83@\90\94
+       int m_MaxNumberOfBuffer;
+       // \83L\83\85\81[\82É\89Á\82¦\82Ä\82¢\82é\83o\83b\83t\83@\90\94
+       int m_NumberOfBufferInQueue;
 
        ////////////////////////////////////////////////////////////////////////////////
        // \83R\83\93\83X\83g\83\89\83N\83^
@@ -41,13 +45,14 @@ public:
        // \83f\83X\83g\83\89\83N\83^
        ////////////////////////////////////////////////////////////////////////////////
 public:
-       ~COutputWave();
+       virtual ~COutputWave();
 
        ////////////////////////////////////////////////////////////////////////////////
        // \83R\81[\83\8b\83o\83b\83N\95Ï\90\94
        ////////////////////////////////////////////////////////////////////////////////
        // \8fo\97Í\83f\83o\83C\83X\82Ì\8fó\91Ô\82ð\92m\82ç\82¹\82é\83R\81[\83\8b\83o\83b\83N\8aÖ\90\94
        static void CALLBACK waveOutProc(HWAVEOUT in_hWaveOut, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2);
+       void callbackWave(HWAVEOUT in_hWaveOut, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2);
 
 
        ////////////////////////////////////////////////////////////////////////////////
@@ -60,12 +65,14 @@ public:
        bool open();
        // \83f\83o\83C\83X\82ð\95Â\82\82é
        bool close();
+protected:
+       // add wave buffer in queue
+       bool addWaveBuffer();
+public:
        // \8fo\97Í\81i\8dÄ\90\81j\82ð\8aJ\8en\82·\82é
        bool start();
        // \8fo\97Í\81i\8dÄ\90\81j\82ð\92â\8e~\82·\82é
        bool stop();
-       // \8fo\97Í\83f\83o\83C\83X\82Ì\8fó\91Ô\82ð\92m\82ç\82¹\82é\83R\81[\83\8b\83o\83b\83N\8aÖ\90\94
-       void procedureWave(HWAVEOUT in_hWaveOut, UINT in_Message, DWORD in_Instance, DWORD in_Param1, DWORD in_Param2);
 
        ////////////////////////////////////////////////////////////////////////////////
        // \91®\90«\83\81\83\\83b\83h
index c4030ee..1489d4c 100644 (file)
@@ -10,8 +10,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 CWaveData::CWaveData()
 {
-       // \83o\83b\83t\83@\82Ö\82Ì\83|\83C\83\93\83^
-       m_pWaveBuffer = NULL;
        // Wave\83t\83H\81[\83}\83b\83g
        m_WaveFormat.wFormatTag      = WAVE_FORMAT_PCM;
        m_WaveFormat.nChannels       = 1;
@@ -19,10 +17,6 @@ CWaveData::CWaveData()
        m_WaveFormat.wBitsPerSample  = 8;
        m_WaveFormat.nBlockAlign     = m_WaveFormat.wBitsPerSample / 8 * m_WaveFormat.nChannels;
        m_WaveFormat.nAvgBytesPerSec = m_WaveFormat.nSamplesPerSec * m_WaveFormat.nBlockAlign;
-       // \83o\83b\83t\83@\83T\83C\83Y [\95b]
-       m_RecordSecond = 10;
-       // \83o\83b\83t\83@\83T\83C\83Y [byte]
-       m_BufferSize = 0;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -45,27 +39,38 @@ void CWaveData::initialize()
        m_WaveFormat.wBitsPerSample  = 8;
        m_WaveFormat.nBlockAlign     = m_WaveFormat.wBitsPerSample / 8 * m_WaveFormat.nChannels;
        m_WaveFormat.nAvgBytesPerSec = m_WaveFormat.nSamplesPerSec * m_WaveFormat.nBlockAlign;
-
-       m_RecordSecond = 0;
-       m_BufferSize = 0;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // \83o\83b\83t\83@\82ð\8am\95Û
 ////////////////////////////////////////////////////////////////////////////////
-bool CWaveData::allocBuffer()
+bool CWaveData::allocBuffer(int in_BufferNumber, DWORD in_RecorMilliSecond)
 {
-       if(m_RecordSecond == 0){
+       if(in_BufferNumber < 1 || in_RecorMilliSecond == 0){
                return false;
        }
 
-       if(m_pWaveBuffer != NULL){
-               return true;
+       if(m_WaveBuffers.empty()){
+               // free
+               if(!freeBuffer()){
+                       return false;
+               }
+       }
+
+       for(int i = 0; i < in_BufferNumber; i++){
+               StructWaveBuffer tempWaveBuffer;
+               tempWaveBuffer.m_RecorMilliSecond = in_RecorMilliSecond;
+               tempWaveBuffer.m_BufferSize   = m_WaveFormat.nAvgBytesPerSec * in_RecorMilliSecond / 1000;
+               tempWaveBuffer.m_pWaveBuffer = new char[tempWaveBuffer.m_BufferSize];
+
+               m_WaveBuffers.push_back(tempWaveBuffer);
        }
 
-       m_pWaveBuffer = new char[m_BufferSize];
+       // \93Ç\82Ý\8eæ\82è\83o\83b\83t\83@\82Æ\8f\91\82«\8d\9e\82Ý\83o\83b\83t\83@\82ð\8ew\92è\82µ\82Ä\82¨\82­
+       m_ReadOfWaveBuffers = m_WaveBuffers.begin();
+       m_WriteOfWaveBuffers = m_WaveBuffers.begin();
 
-       return false;
+       return true;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -73,10 +78,12 @@ bool CWaveData::allocBuffer()
 ////////////////////////////////////////////////////////////////////////////////
 bool CWaveData::freeBuffer()
 {
-       if(m_pWaveBuffer != NULL){
-               delete m_pWaveBuffer;
-               m_pWaveBuffer = NULL;
-               return true;
+       if(!m_WaveBuffers.empty()){
+               WaveBufferTable::iterator tempIterator = m_WaveBuffers.begin();
+               while(tempIterator != m_WaveBuffers.end()){
+                       delete tempIterator->m_pWaveBuffer;
+                       tempIterator++;
+               }
        }
-       return false;
+       return true;
 }
index ab0bebf..65939fd 100644 (file)
@@ -3,7 +3,7 @@
 #define INC_CWaveData
 
 
-
+#include <list>
 #include <Windows.h>
 
 
 // \8aÖ\90\94\96¼\82Í\83\8d\81[\83\8f\83L\83\83\83\81\83\8b\83P\81[\83X\82Æ\82·\82é
 
 
+// wave buffer struct
+struct StructWaveBuffer
+{
+       // \83o\83b\83t\83@\82Ö\82Ì\83|\83C\83\93\83^
+       char* m_pWaveBuffer;
+       // Wave\83w\83b\83_\81[
+       WAVEHDR m_WaveHeader;
+       // \98^\89¹\8e\9e\8aÔ [\83~\83\8a\95b]
+       DWORD m_RecorMilliSecond;
+       // \83o\83b\83t\83@\83T\83C\83Y [byte]
+       DWORD m_BufferSize;
+};
+
 ////////////////////////////////////////////////////////////////////////////////
 // CWaveData
 // Wave\83f\81[\83^\82ð\88µ\82¤\83N\83\89\83X
 // \83o\83b\83t\83@\82Ì\8aÇ\97\9d\81i\8am\95Û\82Æ\89ð\95ú\81j\82ð\8ds\82¤
-// \83o\83b\83t\83@\83v\81[\83\8b\82ð\97p\82¢\82½\82Ù\82¤\82ª\82æ\82¢\82Æ\8ev\82¤\82ª\8c»\8fó\82Í\8am\95Û\82µ\82Á\82Ï\82È\82µ\82Æ\82·\82é
+// \83L\83\85\81[\82ð\97p\82¢\82Ä\83o\83b\83t\83@\8aÇ\97\9d\82ð\8ds\82¤
 ////////////////////////////////////////////////////////////////////////////////
 class CWaveData
 {
@@ -25,14 +38,19 @@ class CWaveData
        // \83\81\83\93\83o\95Ï\90\94
        ////////////////////////////////////////////////////////////////////////////////
 private:
-       // \83o\83b\83t\83@\82Ö\82Ì\83|\83C\83\93\83^
-       char* m_pWaveBuffer;
-       // Wave\83t\83H\81[\83}\83b\83g
+       // wave format
        WAVEFORMATEX m_WaveFormat;
-       // \98^\89¹\8e\9e\8aÔ [\95b]
-       DWORD m_RecordSecond;
-       // \83o\83b\83t\83@\83T\83C\83Y [byte]
-       DWORD m_BufferSize;
+
+
+       // typedef wave buffer table type
+       typedef std::list<StructWaveBuffer> WaveBufferTable;
+       // wave buffer table
+       WaveBufferTable m_WaveBuffers;
+
+       // read iterator
+       WaveBufferTable::iterator m_ReadOfWaveBuffers;
+       // write iterator
+       WaveBufferTable::iterator m_WriteOfWaveBuffers;
 
 
        ////////////////////////////////////////////////////////////////////////////////
@@ -57,7 +75,7 @@ public:
        // \8f\89\8aú\89»
        void initialize();
        // \83o\83b\83t\83@\82ð\8am\95Û
-       bool allocBuffer();
+       bool allocBuffer(int in_BufferNumber, DWORD in_RecorMilliSecond);
        // \83o\83b\83t\83@\82ð\89ð\95ú
        bool freeBuffer();
 
@@ -65,34 +83,90 @@ public:
        // \91®\90«\83\81\83\\83b\83h
        ////////////////////////////////////////////////////////////////////////////////
 public:
-       // \98^\89¹\8e\9e\8aÔ\82ð\83Z\83b\83g
-       bool setRecordSecond(DWORD in_RecordSecond)
+       bool empty()
        {
-               if(m_pWaveBuffer != NULL){
-                       // \83\81\83\82\83\8a\82ª\8am\95Û\82µ\82Ä\82 \82é\8aÔ\82Í\98^\89¹\8e\9e\8aÔ\82ð\95Ï\8dX\82µ\82È\82¢
-                       return false;
+               if(m_ReadOfWaveBuffers == m_WriteOfWaveBuffers){
+                       return true;
                }
-               m_RecordSecond = in_RecordSecond;
-               m_BufferSize = m_WaveFormat.nAvgBytesPerSec * m_RecordSecond;
-               return true;
+               return false;
        }
 
-       // Wave\83o\83b\83t\83@\82ð\8eæ\93¾\82·\82é
-       char* getWaveBuffer()
+       // Wave\83t\83H\81[\83}\83b\83g\82Ö\82Ì\83|\83C\83\93\83^\82ð\8eæ\93¾\82·\82é
+       const WAVEFORMATEX* getWaveFormat()
        {
-               return m_pWaveBuffer;
+               return &m_WaveFormat;
        }
 
-       // \83o\83b\83t\83@\83T\83C\83Y\82ð\8eæ\93¾\82·\82é
-       DWORD getBufferSize()
+       // \93Ç\82Ý\8eæ\82è\83o\83b\83t\83@\97p\8aÖ\90\94
+       // Wave\83o\83b\83t\83@\82Ì\93Ç\82Ý\8eæ\82è\83|\83C\83\93\83^\82ð\8eæ\93¾\82·\82é
+       char* getReadBuffer()
        {
-               return m_BufferSize;
+               // \83o\83b\83t\83@\82ª\8bó\82È\82çNULL\82ð\95Ô\82·
+               if(empty()){
+                       return NULL;
+               }
+
+               return m_ReadOfWaveBuffers->m_pWaveBuffer;
        }
 
-       // Wave\83t\83H\81[\83}\83b\83g\82Ö\82Ì\83|\83C\83\93\83^\82ð\8eæ\93¾\82·\82é
-       const WAVEFORMATEX* getWaveFormat()
+       // \8e\9f\82Ì\93Ç\82Ý\8eæ\82è\83o\83b\83t\83@\82ð\8eæ\93¾\82·\82é
+       char* nextReadBuffer()
        {
-               return &m_WaveFormat;
+               // \83o\83b\83t\83@\82ª\8bó\82È\82çNULL\82ð\95Ô\82·
+               if(empty()){
+                       return NULL;
+               }
+
+               m_ReadOfWaveBuffers++;
+               if(m_ReadOfWaveBuffers == m_WaveBuffers.end()){
+                       m_ReadOfWaveBuffers = m_WaveBuffers.begin();
+               }
+               return m_ReadOfWaveBuffers->m_pWaveBuffer;
+       }
+
+       // \93Ç\82Ý\8d\9e\82Ý\83o\83b\83t\83@\83T\83C\83Y\82ð\8eæ\93¾\82·\82é
+       DWORD getReadBufferSize()
+       {
+               return m_ReadOfWaveBuffers->m_BufferSize;
+       }
+
+       WAVEHDR* getReadWaveHeader()
+       {
+               return &m_ReadOfWaveBuffers->m_WaveHeader;
+       }
+
+       // \8f\91\82«\8d\9e\82Ý\83o\83b\83t\83@\97p\8aÖ\90\94
+       // Wave\83o\83b\83t\83@\82Ì\8f\91\82«\8d\9e\82Ý\83|\83C\83\93\83^\82ð\8eæ\93¾\82·\82é
+       char* getWriteBuffer()
+       {
+               return m_WriteOfWaveBuffers->m_pWaveBuffer;
+       }
+
+       // \8e\9f\82Ì\8f\91\82«\8d\9e\82Ý\83o\83b\83t\83@\82ð\8eæ\93¾\82·\82é
+       char* nextWriteBuffer()
+       {
+               WaveBufferTable::iterator a_NextWriteOfWaveBuffer = m_WriteOfWaveBuffers;
+               a_NextWriteOfWaveBuffer++;
+               if(a_NextWriteOfWaveBuffer == m_WaveBuffers.end()){
+                       a_NextWriteOfWaveBuffer = m_WaveBuffers.begin();
+               }
+               if(a_NextWriteOfWaveBuffer == m_ReadOfWaveBuffers){
+                       // \8f\91\82«\8d\9e\82Ý\83|\83C\83\93\83^\82ª\93Ç\82Ý\8d\9e\82Ý\83|\83C\83\93\83^\82É\92Ç\82¢\82Â\82­\82½\82ßNULL\82ð\95Ô\82·
+                       return NULL;
+               }
+               m_WriteOfWaveBuffers = a_NextWriteOfWaveBuffer;
+               return m_WriteOfWaveBuffers->m_pWaveBuffer;
+       }
+
+       // \8f\91\82«\8d\9e\82Ý\83o\83b\83t\83@\83T\83C\83Y\82ð\8eæ\93¾\82·\82é
+       DWORD getWriteBufferSize()
+       {
+               return m_WriteOfWaveBuffers->m_BufferSize;
+       }
+
+       WAVEHDR* getWriteWaveHeader()
+       {
+               return &m_WriteOfWaveBuffers->m_WaveHeader;
        }
 
        ////////////////////////////////////////////////////////////////////////////////
index 9284f4a..8a9dc68 100644 (file)
@@ -180,12 +180,26 @@ void keyboard(unsigned char in_Key, int in_x, int in_y)
        case 'i':
                g_InputWave.start();
                break;
+       case 'I':
+               g_InputWave.stop();
+               break;
        case 'o':
                g_OutputWave.start();
                break;
+       case 'O':
+               g_OutputWave.stop();
+               break;
        case 'q':
        case 'Q':
        case '\033':  /* '\033' \82Í ESC \82Ì ASCII \83R\81[\83h */
+               std::cout << "g_InputWave.stop" << std::endl;
+               g_InputWave.stop();
+               std::cout << "g_OutputWave.stop" << std::endl;
+               g_OutputWave.stop();
+               std::cout << "g_InputWave.close" << std::endl;
+               g_InputWave.close();
+               std::cout << "g_OutputWave.close" << std::endl;
+               g_OutputWave.close();
                std::cout << "end" << std::endl;
                exit(0);
        default:
@@ -268,12 +282,6 @@ void timer(int value)
        }
 
 
-       // \89¹\82É\8aÖ\82·\82é\8f\88\97\9d
-       if(isBeep){
-               isBeep = 0;
-               g_OutputWave.open();
-       }
-
        glutPostRedisplay();
 }
 
@@ -294,9 +302,8 @@ void reshape(int w, int h)
 int main(int argc, char* argv[])
 {
        g_WaveData.initialize();
-       g_WaveData.setRecordSecond(10);
-       g_WaveData.allocBuffer();
-
+       // \83o\83b\83t\83@\83T\83C\83Y1000\81A\98^\89¹\8e\9e\8aÔ100ms
+       g_WaveData.allocBuffer(1000, 100);
 
        g_InputWave.initialize();
        g_InputWave.setWaveData(&g_WaveData);