| 樣本1 | 樣本2 | ...n | |
| 8位單聲道 | 0聲道 | 0聲道 | |
| 8位立體聲 | 0聲道L 1聲道R | 0聲道L 1聲R道 | |
| 16位單聲道 | 0聲道(低字節) 0聲道(高字節) | 0聲道(低字節) 0聲道(高字節) | |
| 16位立體聲 | 0聲道(低字節)0聲道(高字節)1聲道(低) 1聲道(高) | 同左 |
LPDIRECTSOUND8 lpDirectSound;
HRESULT hr = DirectSoundCreate8(NULL,&lpDirectSound, NULL));
LPDIRECTSOUNDBUFFER8 g_pDSBuffer8 = NULL; //buffer
LPDIRECTSOUND8 g_pDsd = NULL; //dsound
CWaveFile *g_pWaveFile= NULL;
//初始化DirectSound工作
HRESULT hr;
if(FAILED(hr = DirectSoundCreate8(NULL,&g_pDsd,NULL)))
return FALSE;
//設置設備的協作度
if(FAILED(hr = g_pDsd->SetCooperativeLevel(m_hWnd,DSSCL_PRIORITY)))
return FALSE;
g_pWaveFile = new CWaveFile;
g_pWaveFile->Open(_T("c:\\test.wav"), NULL, WAVEFILE_READ);
DSBUFFERDESC dsbd;
ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
dsbd.dwSize = sizeof(DSBUFFERDESC);
dsbd.dwFlags = DSBCAPS_GLOBALFOCUS //設置主播
| DSBCAPS_CTRLFX
| DSBCAPS_CTRLPOSITIONNOTIFY
| DSBCAPS_GETCURRENTPOSITION2;
dsbd.dwBufferBytes = g_pWaveFile->GetSize();
dsbd.lpwfxFormat = g_pWaveFile->m_pwfx;
LPDIRECTSOUNDBUFFER lPBuffer;
//創建輔助緩沖區對象
if(FAILED(hr = g_pDsd->CreateSoundBuffer(&dsbd,&lpbuffer,NULL)))
return ;
if( FAILED(hr = lpbuffer->QueryInterface( IID_IDirectSoundBuffer8, (LPVOID*) &g_pDSBuffer8) ) )
return ;
lpbuffer->Release();
//播放
LPVOID lplockbuf;
DWORD len;
DWORD dwWrite;
g_pDSBuffer8->Lock(0,0, &lplockbuf, &len, NULL, NULL, DSBLOCK_ENTIREBUFFER);
//g_pWaveFile 聲音寫入到lplockbuf所指地址
g_pWaveFile->Read((BYTE*)lplockbuf, len, &dwWrite);
g_pDSBuffer8->Unlock(lplockbuf,len,NULL,0);
g_pDSBuffer8->SetCurrentPosition(0);
g_pDSBuffer8->Play(0,0,DSBPLAY_LOOPING);| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |