diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj b/server/2015Remote/2015Remote_vs2015.vcxproj index 9007844..921c1dd 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj +++ b/server/2015Remote/2015Remote_vs2015.vcxproj @@ -136,10 +136,10 @@ + - @@ -166,9 +166,9 @@ + - diff --git a/server/2015Remote/Audio.cpp b/server/2015Remote/Audio.cpp deleted file mode 100644 index d9fd567..0000000 --- a/server/2015Remote/Audio.cpp +++ /dev/null @@ -1,235 +0,0 @@ -// Audio.cpp: implementation of the CAudio class. -// -////////////////////////////////////////////////////////////////////// - -#include "stdafx.h" -#include "Audio.h" -#include - -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// - -CAudio::CAudio() -{ - m_bExit = FALSE; - m_hThreadCallBack = false; - m_bIsWaveInUsed = FALSE; - m_bIsWaveOutUsed = FALSE; - m_nWaveInIndex = 0; - m_nWaveOutIndex = 0; - m_hEventWaveIn = CreateEvent(NULL, TRUE, FALSE, NULL); - m_hStartRecord = CreateEvent(NULL, TRUE, FALSE, NULL); - memset(&m_GSMWavefmt, 0, sizeof(GSM610WAVEFORMAT)); - - m_GSMWavefmt.wfx.wFormatTag = WAVE_FORMAT_GSM610; - m_GSMWavefmt.wfx.nChannels = 1; - m_GSMWavefmt.wfx.nSamplesPerSec = 8000; - m_GSMWavefmt.wfx.nAvgBytesPerSec = 1625; - m_GSMWavefmt.wfx.nBlockAlign = 65; - m_GSMWavefmt.wfx.wBitsPerSample = 0; - m_GSMWavefmt.wfx.cbSize = 2; - m_GSMWavefmt.wSamplesPerBlock = 320; - - m_ulBufferLength = 1000; - - for (int i = 0; i < 2; ++i) - { - m_InAudioData[i] = new BYTE[m_ulBufferLength]; - m_InAudioHeader[i] = new WAVEHDR; - - m_OutAudioData[i] = new BYTE[m_ulBufferLength]; - m_OutAudioHeader[i] = new WAVEHDR; - } -} - -CAudio::~CAudio() -{ - m_bExit = TRUE; - if (m_bIsWaveInUsed) - { - waveInStop(m_hWaveIn); - waveInReset(m_hWaveIn); - for (int i = 0; i < 2; ++i) - waveInUnprepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR)); - - waveInClose(m_hWaveIn); - WAIT (m_hThreadCallBack, 30); - if (m_hThreadCallBack) - printf("没有成功关闭waveInCallBack.\n"); - } - - for (int i = 0; i < 2; ++i) - { - delete [] m_InAudioData[i]; - m_InAudioData[i] = NULL; - delete [] m_InAudioHeader[i]; - m_InAudioHeader[i] = NULL; - } - if (m_hEventWaveIn) - { - SetEvent(m_hEventWaveIn); - CloseHandle(m_hEventWaveIn); - m_hEventWaveIn = NULL; - } - if (m_hStartRecord) - { - SetEvent(m_hStartRecord); - CloseHandle(m_hStartRecord); - m_hStartRecord = NULL; - } - - if (m_bIsWaveOutUsed) - { - waveOutReset(m_hWaveOut); - for (int i = 0; i < 2; ++i) - waveOutUnprepareHeader(m_hWaveOut, m_InAudioHeader[i], sizeof(WAVEHDR)); - waveOutClose(m_hWaveOut); - } - - for (int i = 0; i < 2; ++i) - { - delete [] m_OutAudioData[i]; - m_OutAudioData[i] = NULL; - delete [] m_OutAudioHeader[i]; - m_OutAudioHeader[i] = NULL; - } -} - -BOOL CAudio::InitializeWaveIn() -{ - MMRESULT mmResult; - DWORD dwThreadID = 0; - - HANDLE h = NULL; - m_hThreadCallBack = h = CreateThread(NULL, 0, - (LPTHREAD_START_ROUTINE)waveInCallBack, (LPVOID)this, - CREATE_SUSPENDED, &dwThreadID); - - //打开录音设备COM 1 指定声音规格 2 支持通过线程回调 换缓冲 - mmResult = waveInOpen(&m_hWaveIn, (WORD)WAVE_MAPPER, - &(m_GSMWavefmt.wfx), (LONG)dwThreadID, (LONG)0, CALLBACK_THREAD); - - //m_hWaveIn 录音机句柄 - if (mmResult != MMSYSERR_NOERROR) - { - return FALSE; - } - - //录音设备 需要的两个缓冲 - for (int i=0; i<2; ++i) - { - m_InAudioHeader[i]->lpData = (LPSTR)m_InAudioData[i]; //m_lpInAudioData 指针数组 - m_InAudioHeader[i]->dwBufferLength = m_ulBufferLength; - m_InAudioHeader[i]->dwFlags = 0; - m_InAudioHeader[i]->dwLoops = 0; - waveInPrepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR)); - } - - waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR)); - - ResumeThread(h); - CloseHandle(h); - waveInStart(m_hWaveIn); //录音 - - m_bIsWaveInUsed = TRUE; - - return true; -} - -LPBYTE CAudio::GetRecordBuffer(LPDWORD dwBufferSize) -{ - //录音机 - if(m_bIsWaveInUsed==FALSE && InitializeWaveIn()==FALSE) - { - return NULL; - } - if (dwBufferSize == NULL) - { - return NULL; - } - SetEvent(m_hStartRecord); - WaitForSingleObject(m_hEventWaveIn, INFINITE); - *dwBufferSize = m_ulBufferLength; - return m_InAudioData[m_nWaveInIndex]; //返出真正数据 -} - -DWORD WINAPI CAudio::waveInCallBack(LPVOID lParam) -{ - CAudio *This = (CAudio *)lParam; - - MSG Msg; - - while (GetMessage(&Msg, NULL, 0, 0)) - { - if (This->m_bExit) - break; - if (Msg.message == MM_WIM_DATA) - { - SetEvent(This->m_hEventWaveIn); - WaitForSingleObject(This->m_hStartRecord, INFINITE); - - Sleep(1); - This->m_nWaveInIndex = 1 - This->m_nWaveInIndex; - - //更新缓冲 - MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn, - This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR)); - if (mmResult != MMSYSERR_NOERROR) - return -1; - } - - if (Msg.message == MM_WIM_CLOSE) - { - break; - } - - TranslateMessage(&Msg); - DispatchMessage(&Msg); - } - - std::cout<<"waveInCallBack end\n"; - This->m_hThreadCallBack = false; - - return 0; -} - -BOOL CAudio::PlayBuffer(LPBYTE szBuffer, DWORD dwBufferSize) -{ - if (!m_bIsWaveOutUsed && !InitializeWaveOut()) //1 音频格式 2 播音设备 - return NULL; - - for (int i = 0; i < dwBufferSize; i += m_ulBufferLength) - { - memcpy(m_OutAudioData[m_nWaveOutIndex], szBuffer, m_ulBufferLength); - waveOutWrite(m_hWaveOut, m_OutAudioHeader[m_nWaveOutIndex], sizeof(WAVEHDR)); - m_nWaveOutIndex = 1 - m_nWaveOutIndex; - } - return true; -} - -BOOL CAudio::InitializeWaveOut() -{ - if (!waveOutGetNumDevs()) - return FALSE; - int i; - for (i = 0; i < 2; ++i) - memset(m_OutAudioData[i], 0, m_ulBufferLength); //声音数据 - - MMRESULT mmResult; - mmResult = waveOutOpen(&m_hWaveOut, (WORD)WAVE_MAPPER, &(m_GSMWavefmt.wfx), (LONG)0, (LONG)0, CALLBACK_NULL); - if (mmResult != MMSYSERR_NOERROR) - return false; - - for (i = 0; i < 2; ++i) - { - m_OutAudioHeader[i]->lpData = (LPSTR)m_OutAudioData[i]; - m_OutAudioHeader[i]->dwBufferLength = m_ulBufferLength; - m_OutAudioHeader[i]->dwFlags = 0; - m_OutAudioHeader[i]->dwLoops = 0; - waveOutPrepareHeader(m_hWaveOut, m_OutAudioHeader[i], sizeof(WAVEHDR)); - } - - m_bIsWaveOutUsed = TRUE; - return TRUE; -} diff --git a/server/2015Remote/Audio.h b/server/2015Remote/Audio.h deleted file mode 100644 index 0f9d32d..0000000 --- a/server/2015Remote/Audio.h +++ /dev/null @@ -1,44 +0,0 @@ -// Audio.h: interface for the CAudio class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_AUDIO_H__56854DE7_5FE4_486F_9AFC_CE3726EF7CBC__INCLUDED_) -#define AFX_AUDIO_H__56854DE7_5FE4_486F_9AFC_CE3726EF7CBC__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -#include -#include - - -class CAudio -{ -public: - CAudio(); - virtual ~CAudio(); - GSM610WAVEFORMAT m_GSMWavefmt; - ULONG m_ulBufferLength; - LPWAVEHDR m_InAudioHeader[2]; //两个头 - LPBYTE m_InAudioData[2]; //两个数据 保持声音的连续 - HANDLE m_hEventWaveIn; - HANDLE m_hStartRecord; //两个事件 - HWAVEIN m_hWaveIn; //设备句柄 - DWORD m_nWaveInIndex; - bool m_hThreadCallBack; - static DWORD WINAPI waveInCallBack(LPVOID lParam); //发送到主控端 - LPBYTE GetRecordBuffer(LPDWORD dwBufferSize); - BOOL InitializeWaveIn(); - BOOL m_bIsWaveInUsed; - - HWAVEOUT m_hWaveOut; - BOOL m_bExit; - BOOL m_bIsWaveOutUsed; - DWORD m_nWaveOutIndex; - LPWAVEHDR m_OutAudioHeader[2]; //两个头 - LPBYTE m_OutAudioData[2]; //两个数据 保持声音的连续 - BOOL PlayBuffer(LPBYTE szBuffer, DWORD dwBufferSize); - BOOL InitializeWaveOut(); -}; - -#endif // !defined(AFX_AUDIO_H__56854DE7_5FE4_486F_9AFC_CE3726EF7CBC__INCLUDED_) diff --git a/server/2015Remote/AudioDlg.h b/server/2015Remote/AudioDlg.h index 13e275c..862faf1 100644 --- a/server/2015Remote/AudioDlg.h +++ b/server/2015Remote/AudioDlg.h @@ -1,7 +1,7 @@ #pragma once #include "IOCPServer.h" -#include "Audio.h" +#include "../../client/Audio.h" // CAudioDlg 对话框