掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
bluetooth マイクからの音声入力 (ID:70966)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
// VoiceRecording.hの追加修正(部分のみ) class CVoiceRecording : public CVoiceBase { public: virtual void RecordFinished(); BOOL IsOpen(); BOOL Close(); BOOL Open(); BOOL Record(); HWAVEIN hWaveIn; BOOL bRecorded; BOOL IsRecorded(); CVoiceRecording(); virtual ~CVoiceRecording(); }; // VoiceRecording.cppの追加修正(部分のみ) CVoiceRecording::CVoiceRecording() { hWaveIn=NULL; bRecorded = FALSE; } BOOL CVoiceRecording::Record() { bRecorded = FALSE; res=waveInPrepareHeader(hWaveIn,&WaveHeader,sizeof(WAVEHDR)); GetMMResult(res); if (res!=MMSYSERR_NOERROR) return FALSE; res=waveInAddBuffer(hWaveIn,&WaveHeader,sizeof(WAVEHDR)); GetMMResult(res); if (res!=MMSYSERR_NOERROR) return FALSE; res=waveInStart(hWaveIn) ; GetMMResult(res); if (res!=MMSYSERR_NOERROR) return FALSE; else return TRUE; } BOOL CVoiceRecording::IsRecorded() { return bRecorded; } void CVoiceRecording::RecordFinished() { //write your handler here bRecorded = TRUE; //or create your own classes that derived from this class //and override this virtual function } // VoicePlaying.hの追加修正(部分のみ) class CVoicePlaying : public CVoiceBase { public: void PlayFinished(); BOOL IsOpen(); BOOL Close(); BOOL Open(); BOOL Play(); HWAVEOUT hWaveOut; BOOL bPlayed; BOOL IsPlayed(); CVoicePlaying(); virtual ~CVoicePlaying(); }; // VoicePlaying.cppの追加修正(部分のみ) CVoicePlaying::CVoicePlaying() { hWaveOut=NULL; bPlayed=FALSE; } BOOL CVoicePlaying::Play() { bPlayed = FALSE; res=waveOutPrepareHeader (hWaveOut,&WaveHeader,sizeof(WAVEHDR)); GetMMResult(res); if (res!=MMSYSERR_NOERROR) return FALSE; res=waveOutWrite(hWaveOut,&WaveHeader,sizeof(WAVEHDR)); GetMMResult(res); if (res!=MMSYSERR_NOERROR) return FALSE; else return TRUE; } BOOL CVoicePlaying::IsPlayed() { return bPlayed; } void CVoicePlaying::PlayFinished() { //write your own handler here bPlayed = TRUE; //or simply create your own class and override this virtual function } // MAIN int _tmain(int argc, _TCHAR* argv[]) { BOOL bRet; CVoiceRecording m_Record; CVoicePlaying m_Play; bRet = m_Record.Open(); if(bRet){ m_Record.PrepareBuffer(10); //prepare buffer for recording 10 seconds. if (m_Record.IsOpen()){ printf("Please speak at the microphone. \n"); bRet = m_Record.Record(); printf("The voice will be announced soon. \n"); } do{ ::Sleep(100); }while(!m_Record.IsRecorded()); m_Record.Close(); } if(bRet){ bRet = m_Play.Open(); if (bRet){ bRet = m_Play.PrepareBuffer(10); //prepare buffer for playing of 10 seconds of data if(bRet){ m_Play.CopyBuffer(m_Record.buffer, 10); if (m_Play.IsOpen()){ m_Play.Play(); } } } do{ ::Sleep(100); }while(!m_Play.IsPlayed()); m_Play.Close(); } m_Record.DestroyBuffer(); m_Play.DestroyBuffer(); return 0; } こんなもんかナ〜 最低限の動作できるようにしか改造してません。 あしからず。(決してうまい方法だとは思わないんです) フラグ処理ではなく、イベント処理で行うのがCPU負荷 食わないでいいのですが・・・ ※ 録音時のボリューム調整が、このサンプルにはありません。 再生時も・・・ ミキサーデバイスをオープして・・・ ボリューム調整をプログラムから行えるようにすれば、一応 完成かナ〜 頑張って下さい! 以上。参考まで
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.