1 #include "mof/sound/StreamingSoundLoader.hpp"
\r
2 #include "mof/ConsoleIO.hpp"
\r
5 mof::StreamingSoundLoader::StreamingSoundLoader(LPDIRECTSOUNDBUFFER8 pBuffer , LPDIRECTSOUNDNOTIFY8 pNotify , SoundFile* pResource){
\r
8 ZeroMemory(&caps, sizeof(DSBCAPS));
\r
9 caps.dwSize = sizeof(DSBCAPS);
\r
10 m_pBuffer->GetCaps(&caps);
\r
11 m_bufferSize = caps.dwBufferBytes;
\r
12 m_pNotify = pNotify;
\r
14 m_pResource = pResource;
\r
17 mof::StreamingSoundLoader::StreamingSoundLoader(const StreamingSoundLoader& obj){
\r
19 m_pBuffer = obj.m_pBuffer;
\r
20 m_bufferSize = obj.m_bufferSize;
\r
22 m_pNotify = obj.m_pNotify;
\r
27 mof::StreamingSoundLoader::~StreamingSoundLoader(void)
\r
29 for(int i = 0 ; i < 3 ; i++)CloseHandle(m_hEvents[i]);
\r
33 bool mof::StreamingSoundLoader::initialize(){
\r
35 m_hEvents = new HANDLE[3];
\r
36 for(int i = 0 ; i < 3 ; i++){
\r
37 m_hEvents[i] = CreateEvent(NULL , FALSE , FALSE , NULL);
\r
40 DSBPOSITIONNOTIFY pn[3];
\r
42 pn[0].hEventNotify = m_hEvents[0];
\r
43 pn[1].dwOffset = m_bufferSize / 2;
\r
44 pn[1].hEventNotify = m_hEvents[1];
\r
45 pn[2].dwOffset = DSBPN_OFFSETSTOP;
\r
46 pn[2].hEventNotify = m_hEvents[2];
\r
49 HRESULT hr = m_pNotify->SetNotificationPositions(3 , pn);
\r
51 if(hr == DSERR_INVALIDPARAM)*ConsoleOut::getInstance() << m_pNotify << std::endl;
\r
52 *ConsoleOut::getInstance() << "Failed --- SetNotificationPosition" << std::endl;
\r
63 void mof::StreamingSoundLoader::operator()(){
\r
67 DWORD i = WaitForMultipleObjects(3 , m_hEvents , FALSE , INFINITE);
\r
68 //m_pBuffer->GetCurrentPosition(
\r
73 case WAIT_OBJECT_0 + 1:
\r
76 case WAIT_OBJECT_0 + 2:
\r
88 void mof::StreamingSoundLoader::copyBlock(int blockID){
\r
89 boost::mutex::scoped_lock lock(m_mutex);
\r
91 long updateSize = m_bufferSize / 2;
\r
93 LPVOID pMem1 , pMem2;
\r
94 DWORD dwSize1 , dwSize2;
\r
95 //*ConsoleOut::getInstance() << blockID << "
\82ð
\8dX
\90V" << std::endl;
\r
96 hr = m_pBuffer->Lock(blockID * updateSize , updateSize , &pMem1 , &dwSize1 , &pMem2 , &dwSize2 , 0);
\r
98 *ConsoleOut::getInstance() << _T("Failed --- LockSoundBuffer") << std::endl;
\r
102 m_pResource->read((BYTE*)pMem1 , dwSize1 , (BYTE*)pMem2 , dwSize2);
\r
103 m_pBuffer->Unlock(pMem1 , dwSize1 , pMem2 , dwSize2);
\r