Omdat ik wil dat er tijdens het afspelen van mijn geluid geen ander geluid doorheen kan worden afgespeeld en omdat ik zoveel mogelijk controle wil hebben wil ik een primary directsound buffer gebruiken. Nu heb ik een probleem met IDirectSoundBuffer8::SetFormat. Eeen stukje uit msdn:
van: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/directx_cpp/htm/_dx_idirectsoundbuffer8_setformat_dxaudio.asp
Nu mijn code:
Ik krijg dus de onderste messagebox te zien. Wat ik niet helemaal snap is de zin "Since primary sound buffers do not support the IDirectSoundBuffer8 interface, this method must be called on IDirectSoundBuffer." uit msdn. Wat bedoelen ze hier precies mee, en wat moet ik ermee? Het enige verschil is dat er geen 8 achter staat. Maar je gebruikt toch sowieso alle namen zonder die 8 erbij? Kan iemand die uitleggen, en natuurlijk ook kijken wat er nu precies fout is in mijn code.
code:
1
2
3
| The SetFormat method sets the format of the primary buffer. Whenever this application has the input focus, DirectSound will set the primary buffer to the specified format. Since primary sound buffers do not support the IDirectSoundBuffer8 interface, this method must be called on IDirectSoundBuffer. |
van: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/directx_cpp/htm/_dx_idirectsoundbuffer8_setformat_dxaudio.asp
Nu mijn code:
code:
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
| ZeroMemory(&waveFormat, sizeof(waveFormat));
waveFormat.wFormatTag = WAVE_FORMAT_PCM;
waveFormat.nChannels = (WORD)numchannels;
waveFormat.nSamplesPerSec = (DWORD)samplerate;
waveFormat.nAvgBytesPerSec = (DWORD)(samplerate * bitspersamp * numchannels / 8);
waveFormat.nBlockAlign = (WORD)(bitspersamp * numchannels / 8);
waveFormat.wBitsPerSample = (WORD)bitspersamp;
ZeroMemory(&priBufSet, sizeof(priBufSet));
priBufSet.dwSize = sizeof(DSBUFFERDESC);
priBufSet.dwFlags = DSBCAPS_GLOBALFOCUS;
priBufSet.dwBufferBytes = 26460;
priBufSet.lpwfxFormat = &waveFormat;
HRESULT temp2;
HRESULT temp;
if (DirectSoundCreate(NULL, &soundcard, NULL) == DS_OK) //create direct sound object
{
//ok, DirectSound Object created, let's take control now...
if (soundcard->SetCooperativeLevel(out.hMainWindow, DSSCL_WRITEPRIMARY) == DS_OK)
{
if (soundcard->CreateSoundBuffer(&priBufSet, &priBuf, NULL) != DS_OK)
{
MessageBox(out.hMainWindow, "createsoundbuffer mislukt!", "mooizo!", MB_OK);
return -1;
}
priBuf->Stop();
temp = priBuf->SetFormat(&waveFormat);
if (temp == DSERR_INVALIDCALL)
{
MessageBox(out.hMainWindow, "Set primary buffer format didn't Work1!", "BAD!!", MB_OK);
return -1;
} |
Ik krijg dus de onderste messagebox te zien. Wat ik niet helemaal snap is de zin "Since primary sound buffers do not support the IDirectSoundBuffer8 interface, this method must be called on IDirectSoundBuffer." uit msdn. Wat bedoelen ze hier precies mee, en wat moet ik ermee? Het enige verschil is dat er geen 8 achter staat. Maar je gebruikt toch sowieso alle namen zonder die 8 erbij? Kan iemand die uitleggen, en natuurlijk ook kijken wat er nu precies fout is in mijn code.