Hey, ich sitze immer noch bei meiner bearbeitung meiner Soundklasse.
Ich glaube, den Fehler gefunden zu haben, weiß aber nicht, wie ich den beheben kann.
Komme mit dem Debugger auch nicht weiter.
Hier einmal die relevante Code - Stelle:
|
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
|
//Initialisierung
FMOD::System *m_pSystem;
FMOD::Sound *m_pSound,*m_pSound2,*m_pSound3;
FMOD::Channel *m_pChannel[100];
FMOD_RESULT m_result;
unsigned int m_version;
m_result = FMOD::System_Create(&m_pSystem); //System erzeugen
ERRCHECK(m_result);
m_result = m_pSystem->getVersion(&m_version); //System Version abfragen
ERRCHECK(m_result);
if (m_version < FMOD_VERSION) //Version überprüfen
{
printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", m_version, FMOD_VERSION);
}
else
{
m_result = m_pSystem->init(100, FMOD_INIT_NORMAL, 0); //System initialisieren
ERRCHECK(m_result);
//Sounddatei erzeuegn
m_result = m_pSystem->createSound("Music/01.mp3", FMOD_HARDWARE | FMOD_LOOP_OFF | FMOD_2D, 0, &m_pSound);
ERRCHECK(m_result);
m_result = m_pSystem->createSound("Sound/01.sound", FMOD_HARDWARE | FMOD_LOOP_OFF | FMOD_2D, 0, &m_pSound2);
ERRCHECK(m_result);
m_result = m_pSystem->createSound("Sound/02.sound", FMOD_HARDWARE | FMOD_LOOP_OFF | FMOD_2D, 0, &m_pSound3);
ERRCHECK(m_result);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Dieser Code - Block steht bei mir in einem Case - Zweig
bool bstatus = false;
m_pChannel[1] -> isPlaying(&bstatus);
cout << bstatus;
if(bstatus == true)
{
m_result = m_pChannel[1] -> setPosition(0,FMOD_TIMEUNIT_MS);
ERRCHECK(m_result);
}
else
m_pSystem -> playSound(FMOD_CHANNEL_FREE, m_pSound2, false, &m_pChannel[1]); //Hier vermute ich den Fehler
m_pSystem->update();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Ende des Switch
//Herunterfahren
m_result = m_pSound->release();
ERRCHECK(m_result);
m_result = m_pSound2->release();
ERRCHECK(m_result);
m_result = m_pSound3->release();
ERRCHECK(m_result);
m_result = m_pSystem->close();
ERRCHECK(m_result);
m_result = m_pSystem->release();
ERRCHECK(m_result);
|
Also im unteren Teil bei der If - Verzweigung denke ich, den Fehler gefunden zu haben.
Wenn der Sound nicht spielt, kann ich ihn nicht über den Channel einfach mit eine Positionsangabe zurücksetzten.
Und wenn er dann vom System erzeugt wird, bekomme ich am ende beim herunterfahren der Systeme, beim m_pSystem -> close() eine zugriffsverletztung
Edit:
Hey ... Also ich hab jetzt statt dem CreateSound wieder mein vorheriges CreateStream verwendet ... und da tritt das Problem seltsamer Weiße nicht auf .... Werd dann wohl doch bei den Streams bleiben