Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

1

21.10.2006, 12:39

Secondary Buffer wird nicht erstellt....

Hallo liebe Community!
Wie es aussieht habe ich mal wieder ein problem. Diesmal mit DirectSound. Irgendwie will er mir in der Funktion keinen secondary sound buffer erstellen. Danke schon mal im voraus jedwede Hilfe! ;)

C-/C++-Quelltext

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
void anSound::LoadWave(LPDIRECTSOUND8 lpdd8, char *filename, DWORD dwFlags, LPDIRECTSOUNDBUFFER8* ppOut)
{
    WAVEFORMATEX WaveFmt;
    void *pData=NULL;
    DWORD dwDataSize=0;
    //Datei öffnen

    FILE *pFile=fopen(filename,"rb");
    //Existiert die Datei?

    if(!pFile)
    {
        //Error....

    }
    //Riff-Header einlesen

    SRIFFHeader RIFFHeader;
    fread(&RIFFHeader,sizeof(SRIFFHeader),1,pFile);
    //Prüfen ob Riff

    if(strnicmp(RIFFHeader.acRIFF,"RIFF",4))
    {
        //Error...

    }
    //Wenn Format!= Wave

    else if(strnicmp(RIFFHeader.acFormat,"WAVE",4))
    {
        //Error...

    }
    //Alle Daten auslesen

    while(TRUE)
    {
        SWAVChunkHeader ChunkHeader;
        //Können Daten ausgelesen werden???

        if(fread(&ChunkHeader,sizeof(ChunkHeader),1,pFile))break;
        else
        {
            //Prüfen auf verschiedene Chunk-Typen

            //1. ?FormatChunk?

            if(!strnicmp(ChunkHeader.acType,"FMT",4))
            {
                //Es ist der Formatchunk

                //prüfen ob Größe korrekt

                if(ChunkHeader.dwDataSize>sizeof(WAVEFORMATEX))
                {
                    fclose(pFile);
                    //Fehler

                }
                //Daten auslesen

                ZeroMemory(&WaveFmt,sizeof(WAVEFORMATEX));
                fread(&WaveFmt,1,ChunkHeader.dwDataSize,pFile);
            }
            //2. ?DatenChunk?

            else if(!strnicmp(ChunkHeader.acType,"DATA",4))
            {
                //Es ist der DatenChunk

                //Speicher reservieren

                pData=calloc(ChunkHeader.dwDataSize,1);
                //Lesen

                fread(pData,1,ChunkHeader.dwDataSize,pFile);
                //Größe Speichern

                dwDataSize=ChunkHeader.dwDataSize;
            }
            //3. unbekannter Chunk

            else
            {
                //Unbekannter Chunk

                //Überspringen

                fseek(pFile,ChunkHeader.dwDataSize,SEEK_CUR);
            }
        }
    }
    //Datei schließen

    fclose(pFile);
    //**************************************


//So, also bis hierhin klappt alles.... 


//Soundbuffer struktur erzeugen

    DSBUFFERDESC BufferDesc;
    //Speicher auf Null setzen

    ZeroMemory(&BufferDesc, sizeof(BufferDesc));
    //Größe festlegen

    BufferDesc.dwSize=sizeof(DSBUFFERDESC);
    //Flags setzen

    BufferDesc.dwFlags=dwFlags;
    //Datengröße festlegen

    BufferDesc.dwBufferBytes=dwDataSize;
    //wird nicht benötigt

    BufferDesc.dwReserved=0;
    //Format festlegen

    BufferDesc.lpwfxFormat=&WaveFmt;
    //Kein 3D-Sound

    BufferDesc.guid3DAlgorithm=GUID_NULL;
    //SoundBuffer erstellen

    LPDIRECTSOUNDBUFFER pTemp;
    if(FAILED(lpdd8->CreateSoundBuffer(&BufferDesc,&pTemp,NULL)))
    {
        //Error...

    }
    //8er Schnittstelle abfragen

    pTemp->QueryInterface(IID_IDirectSoundBuffer8,(void**)(ppOut));
    pTemp->Release();
    //Sperren des SoundBuffers

    void* pSoundBuffer;
    DWORD dwNumBytes;
    if(FAILED((*ppOut)->Lock(0,0,&pSoundBuffer,&dwNumBytes,NULL,NULL,DSBLOCK_ENTIREBUFFER)))
    {
        //Fehler

        free(pData);
        //Error...

    }
    //Daten kopieren

    memcpy(pSoundBuffer,pData,dwDataSize);
    //Daten freigeben

    free(pData);
    //Entsperren

    (*ppOut)->Unlock(pSoundBuffer,dwNumBytes,NULL,NULL);
    //Ende

}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

21.10.2006, 12:40

DirectSound auf Debug stellen (Systemsteuerung),
Debug-Ausgabe beachten

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

3

21.10.2006, 19:01

Nun ja, das Problem ist komsicherweise die Zeile mit ->CreateSoundBuffer. Das Makro Failed liefert da einen Fehler...
Woran kann denn das liegen...? Müssen bevor man Soundbuffer erzuegt gewisse Bedingungen erfüllt sein?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

21.10.2006, 19:10

Ich habe doch gesagt, du sollst DirectSound auf Debug stellen, dann sagt er dir, warum es nicht geklappt hat.

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

5

22.10.2006, 11:10

hab ich ja,...und das Problem ist das er mir den zweiten Soundbuffer nichte erstellt... :(

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

22.10.2006, 11:43

Und was steht in der Debug-Ausgabe?

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

7

22.10.2006, 12:00

Er sagt mir was von ner unbehandelten Ausnahme...

Anonymous

unregistriert

8

23.10.2006, 14:58

Benutzt du Onboardsound?

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

9

24.10.2006, 14:42

Ja...

Firefly

Alter Hase

  • »Firefly« ist der Autor dieses Themas

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

10

24.10.2006, 14:43

wobei es ja funktionieren müsste...DirectSound funktioniert jedenfalls bei mir im dxdiag-directsound-test.

Werbeanzeige