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