//-------------------------------- // DirectSound用バッファの確保 //-------------------------------- LPDIRECTSOUNDBUFFER Sound::creatBuffer() { LPDIRECTSOUNDBUFFER pDSBuffer = NULL; if(m_pDirectSound) { DSBUFFERDESC Desc; ZeroMemory(&Desc,sizeof(DSBUFFERDESC)); Desc.dwSize = sizeof(DSBUFFERDESC); Desc.dwFlags = DSBCAPS_STATIC|DSBCAPS_LOCSOFTWARE|DSBCAPS_GLOBALFOCUS; Desc.dwBufferBytes = getWaveData()->getDataSize(); Desc.lpwfxFormat = getWaveData()->getFormat(); m_pDirectSound->CreateSoundBuffer(&Desc,&pDSBuffer,NULL); if(pDSBuffer) { LPVOID pData1; DWORD dwBytes1; pDSBuffer->Lock(0,getWaveData()->getDataSize(),&pData1,&dwBytes1,NULL,NULL,0); CopyMemory(pData1,getWaveData()->getWaveData(),dwBytes1); pDSBuffer->Unlock(pData1,dwBytes1,NULL,0); } } return pDSBuffer; }
//-------------------------------- // 同時発音用バッファの確保 //-------------------------------- void Sound::createList(int nCount,int bFlag) { int i; if(!getWaveData()->isData()) return; release(); m_ppDSBuffer = NEW LPDIRECTSOUNDBUFFER[nCount]; m_nCount = nCount; // if(bFlag == 0) { m_ppDSBuffer[0] = creatBuffer(); for(i=1;i<m_nCount;i++) m_pDirectSound->DuplicateSoundBuffer(m_ppDSBuffer[0],&m_ppDSBuffer[i]); } }
void DisplayWave::draw() { sf::Vector2i windowSize = Globals::Window->getSize(); float * wave = getWaveData(windowSize.x); OpenGLUtils::Enable2d(); float y, lastY; for (int i = 0; i < windowSize.x - 2; i += 2) { y = (windowSize.y / 2) + (windowSize.y / 3) * wave[i]; if (i != 0) OpenGLUtils::DrawLine(i - 2, lastY, i, y, sf::Color(140, 25, 25)); lastY = y; } delete wave; }
//-------------------------------- // WAVファイルを読む //-------------------------------- BOOL Sound::open(LPCSTR pName,LPCSTR pType) { getWaveData()->open(pName,pType); createList(3); return TRUE; }