Er der nogle her der har rigtigt godt styr på DirectSound? Hjælp :)
Jeg har at gøre med en "LPDIRECTSOUNDBUFFER8". Først ville jeg hente noget
data fra en wave-fil, men det er vist ikke helt trivielt, så nu ville jeg
prøve at syntetisere noget PCM-lyd.
Så jeg gjorde det her:
1) Jeg åbnede min lyd-editor.
2) Lavede 3 sekunders lyd med en ren 440Hz tone.
3) Gemte som PCM. 8bit, mono, 22050Hz
4) Åbnede i en hex-editor og fandt data.
Data ser ud som i array'et neden for. Jeg har prøvet at plotte værdierne og
det giver en fin sinus-kurve
Nu vil jeg så skrive disse værdier, igen og igen, ned i min buffer så alle 3
sekunders lyd bliver fyldt ud. Jeg har kaldt Lock() på min sound buffer og
jeg har fået (går jeg ud fra) en valid adresse hvortil jeg må skrive (i
dette tilfælde har jeg bedt om at skrive fra starten af bufferen). Det er
variablen "writeAddr" nedenfor. Det virker bare ikke. Kan nogle gennemskue
det? Skulle det ikke kunne lade sig gøre sådan her?
int index = 0;
byte wave[] = {0xC0, 0xBF, 0xBD, 0xBA, 0xB6, 0xB1, 0xAC, 0xA6, 0x9F, 0x97,
0x90, 0x88, 0x80, 0x78, 0x70, 0x68, 0x61, 0x5A, 0x54, 0x4E, 0x4A, 0x46,
0x43, 0x41, 0x40, 0x3F, 0x40, 0x42, 0x45, 0x49, 0x4E, 0x53, 0x59, 0x60,
0x67, 0x6F, 0x77, 0x7F, 0x87, 0x8F, 0x96, 0x9E, 0xA4, 0xAB, 0xB0, 0xB5,
0xB9, 0xBC, 0xBE, 0xBF};
unsigned int fourBytes = 0;
BYTE* writeHere = (BYTE*)writeAddr;
for(int i=0; i<numBytesToWrite; i+=4)
{
fourBytes = wave[index];
for(int j=1; j<4; j++)
{
fourBytes = fourBytes << 8;
fourBytes += wave[index+j];
}
*(writeHere+i) = fourBytes;
index = (index+4)%50;
}
--
Jacob Jensen
E-mail: jacob@etlivmedsle.dk
Hjemmeside:
www.etlivmedsle.dk