Voor een winamp output plugin heb ik het volgende stukje code. Ik wil gebruik maken van directsound om de pcm-wave-data die uit winamp komt naar de geluidskaart te sturen, dat moet niet overdreven moeilijk zijn zou je denken...
Ik hoop dat het zo een beetje duidelijk is wat mijn bedoeling is en waar het fout gaat. Dat deze code niets doet met een deel van buf en dus eigenlijk functioneel gezien niet uitermate nuttig is moet je even niet op letten, dat kan ik als dit werkt namelijk wel aanpassen, maar ik wil eerst uberhaupt _iets_ in de buffer gestopt krijgen.
link naar msdn in ongeveer de juiste sectie:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/directx_cpp/htm/_dx_idirectsoundbuffer8_play_dxaudio.asp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| int write(char *buf, int len) // buf bevat raw audio data, die zo naar de geluidskaart mag, len is de langte van die data
{
LPVOID ppvAudioPtr1;
LPDWORD pdwAudioBytes1 = NULL;
LPVOID ppvAudioPtr2;
LPDWORD pdwAudioBytes2 = NULL;
DWORD dwOffset;
writtentime += len; // niet relevant
//priBuf is een LPDIRECTSOUNDBUFFER
priBuf->GetCurrentPosition(NULL, &dwOffset); // zet de plaats waar we in de buffer mogen gaan schrijven in dwOffset
priBuf->Lock(dwOffset, 256, &ppvAudioPtr1, pdwAudioBytes1, &ppvAudioPtr2, pdwAudioBytes2, NULL); // verkrijg de lock op de buffer
memcpy(ppvAudioPtr1, &buf, (int)pdwAudioBytes1); // kopieer wat data naar de buffer
MessageBox(out.hMainWindow, "debug message!", "ok", MB_OK); // deze krijg ik te zien
Sleep(1000); // dit gaat ook nog goed
priBuf->Unlock(ppvAudioPtr1, *pdwAudioBytes1, ppvAudioPtr2, 0); // op deze regel krijg ik een "winamp has encountered an error and needs to close" mededeling
return 0;
} |
Ik hoop dat het zo een beetje duidelijk is wat mijn bedoeling is en waar het fout gaat. Dat deze code niets doet met een deel van buf en dus eigenlijk functioneel gezien niet uitermate nuttig is moet je even niet op letten, dat kan ik als dit werkt namelijk wel aanpassen, maar ik wil eerst uberhaupt _iets_ in de buffer gestopt krijgen.
link naar msdn in ongeveer de juiste sectie:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/directx_cpp/htm/_dx_idirectsoundbuffer8_play_dxaudio.asp