Hello!
im writing along at this episode (008 directsoud squarewave).
but i can't get the sound to work.
i've debugged and went through the code and the problem seem to be that GetCurrentPosition(); fails.
| DWORD playCursor;
DWORD writeCursor;
hr = global_pDsSecondaryBuffer->GetCurrentPosition(&playCursor, &writeCursor);
if(SUCCEEDED(hr)) // <---- this returns 0x88780046 (seems to be DSERR_PRIOLEVELNEEDED)
|
it returns and HRESULT written in hex 0x88780046, which after some searching seemed to correspond to DSERR_PRIOLEVELNEEDED.
however, in my initSound() function i manage to set the cooperativelevel successfully.
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
53
54
55 | void initDSound(HWND hwnd, int samplesPerSecond, int secBufferSize)
{
LPDIRECTSOUND pDSound = {};
DSBUFFERDESC dsSecondaryBufferDesc = {}; // SECONDARY BUFFER
DSBUFFERDESC dsPrimaryBufferDesc = {}; // PRIMARY BUFFER
LPDIRECTSOUNDBUFFER pDsPrimaryBuffer = {};
WAVEFORMATEX waveFormat = {}; // WAVEFORMAT
waveFormat.wFormatTag = WAVE_FORMAT_PCM;
waveFormat.nChannels = 2;
waveFormat.nSamplesPerSec = samplesPerSecond;
waveFormat.wBitsPerSample = 16;
waveFormat.nBlockAlign = (waveFormat.nChannels * waveFormat.wBitsPerSample) / 8;
waveFormat.nAvgBytesPerSec = (waveFormat.nSamplesPerSec * waveFormat.nBlockAlign);
HRESULT hr;
if(SUCCEEDED(hr = DirectSoundCreate(0, &pDSound, 0)))
{
OutputDebugString("DirectSound created successfully!");
if(SUCCEEDED(hr = pDSound->SetCooperativeLevel(hwnd, DSSCL_PRIORITY)))
{
OutputDebugString("\nSet CooperativeLevel successfully!");
}
dsPrimaryBufferDesc.dwSize = sizeof(dsPrimaryBufferDesc);
dsPrimaryBufferDesc.dwFlags = DSBCAPS_PRIMARYBUFFER;
if (SUCCEEDED(hr = pDSound->CreateSoundBuffer(&dsPrimaryBufferDesc, &pDsPrimaryBuffer, 0)))
{
OutputDebugString("\nCreate Primary Sound Buffer successfully!");
if (SUCCEEDED(hr = pDsPrimaryBuffer->SetFormat(&waveFormat)))
{
OutputDebugString("\nPrim Buffer Format set Success!");
}
}
dsSecondaryBufferDesc.dwSize = sizeof(dsSecondaryBufferDesc);
dsSecondaryBufferDesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2;
dsSecondaryBufferDesc.dwBufferBytes = secBufferSize;
dsSecondaryBufferDesc.guid3DAlgorithm = GUID_NULL;
if (SUCCEEDED(hr = pDSound->CreateSoundBuffer(&dsPrimaryBufferDesc, &global_pDsSecondaryBuffer, 0)))
{
OutputDebugString("\nCreate Secondary Sound Buffer successfully!");
}
}
}
|
does anyone have an idea of what the problem might be?
I know there could be many reasons for why this doesn't work but do you have any suggestions? :)
i don't wanna post the code in the "game-loop" cuz i don't wanna bother you with to much code.
but if you would like to look at that aswell. please let me know!
cheers!