1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
//Global:
LPDIRECTSOUNDBUFFER dsbSound[9];
//in Funktion:
if (dsbSound[iSoundBuffer] != NULL) {
dsbSound[iSoundBuffer]->Release();
dsbSound[iSoundBuffer] = NULL;
}
hWaveData = mmioOpen(Filename, 0, MMIO_READ | MMIO_ALLOCBUF);
if (hWaveData == NULL) return -6;
MMCKINFO parent;
memset(&parent, 0, sizeof(MMCKINFO));
parent.fccType = mmioFOURCC('W', 'A', 'V', 'E');
mmioDescend(hWaveData, &parent, 0, MMIO_FINDRIFF);
MMCKINFO child;
memset(&child, 0, sizeof(MMCKINFO));
child.fccType = mmioFOURCC('f', 'm', 't', ' ');
mmioDescend(hWaveData, &child, &parent, 0);
WAVEFORMATEX wavefmt;
mmioRead(hWaveData, (char*)&wavefmt, sizeof(wavefmt));
if (wavefmt.wFormatTag != WAVE_FORMAT_PCM) return -7;
mmioAscend(hWaveData, &child, 0);
child.ckid = mmioFOURCC('d', 'a', 't', 'a');
mmioDescend(hWaveData, &child, &parent, MMIO_FINDCHUNK);
DSBUFFERDESC bufdesc;
memset(&bufdesc, 0, sizeof(DSBUFFERDESC));
bufdesc.dwSize = sizeof(DSBUFFERDESC);
bufdesc.dwFlags = DSBCAPS_GLOBALFOCUS;
bufdesc.dwBufferBytes = child.cksize;
bufdesc.lpwfxFormat = &wavefmt;
if((lpDirectSound->CreateSoundBuffer(&bufdesc, &dsbSound[iSoundBuffer], NULL)) != DS_OK) return -8;
void *write1 = 0, *write2 = 0;
unsigned long length1, length2;
dsbSound[iSoundBuffer]->Lock(0, child.cksize, &write1, &length1, &write2, &length2, 0);
if (write1 > 0)
mmioRead(hWaveData, (char*)write1, length1);
if (write2 > 0)
mmioRead(hWaveData, (char*)write2, length2);
dsbSound[iSoundBuffer]->Unlock(write1, length1, write2, length2);
mmioClose(hWaveData, 0);
dsbSound[iSoundBuffer]->SetCurrentPosition(0);
dsbSound[iSoundBuffer]->Play(0, 0, 0);
|