Hallo leute.
Bin durch zufall auf das Forum hier gestoßen und habe gesehen dass hier doch einige gute Leute sind
Und zwar habe ich ein Problem. Ich will mit SDL_Mixer eine art Sound-Klasse schreiben. Soweit auch alles gemacht, aber jedes mal wenn ich das Ding öffne, schmiert es einfach ab und meint innerhalb des Mix_Chunk structs, "Fehler: Ausdruck kann nicht ausgewertet werden".
Eingebunden hab ich alles was an SDL benötigt wird. Initialisiert wird auch alles.
Ich weis einfach nicht mehr weiter, habe schon alles mögliche ausprobiert. Vielleicht weis einer von euch eine Lösung.
Hier meine Audio-Header:
|
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
|
#ifdef WIN32
#pragma comment(lib, "SDL_Mixer.lib")
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#endif
#include <iostream>
#include "SDL_mixer.h"
#include <vector>
class Audio{
private:
int audio_rate;
Uint16 audio_format; /* 16-bit stereo */
int audio_channels;
int audio_buffers;
std::string Filename;
struct Sound{
Mix_Chunk *soundObj;
int id;
int volume;
};
Sound *snd;
std::vector<Sound> sound;
public:
//Inits:
void init();
void init(int pAudio_rate, Uint16 pAudio_format, int pAudio_channels, int pAudio_buffers);
//SoundControl:
void loadSound(std::string pFilename, int ID);
void playSound(int pID, int pLoop);
void stopSound(int pID);
void pauseSound(int pID);
int soundIsPaused(int pID);
int getChannel(int pID);
//volumeControl:
void setVolume(int pID, int pVolume);
//int getVolume();
//Desctructor:
~Audio();
};
|
und hier meine cpp-Datei:
|
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
117
118
119
120
|
#include "audio.h"
#include <iostream>
void Audio::init(){
/* We're going to be requesting certain things from our audio
device, so we set them up beforehand */
audio_rate = 44100;
audio_format = MIX_DEFAULT_FORMAT; /* 16-bit stereo */
audio_channels = 2;
audio_buffers = 4096;
#ifdef WIN32
Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG);
#endif
if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) {
printf("Unable to initialize audio: %s\n", Mix_GetError());
exit(1);
}
//snd = new Sound();
}
void Audio::init(int pAudio_rate, Uint16 pAudio_format, int pAudio_channels, int pAudio_buffers){
audio_rate = pAudio_rate;
audio_format = pAudio_format; /* 16-bit stereo */
audio_channels = pAudio_channels;
audio_buffers = pAudio_buffers;
Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG);
if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) {
printf("Fehler beim öffnen der Audio-Datei!\n");
exit(1);
}
Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
}
void Audio::loadSound(std::string pFilename, int pID){
//Loading in new vector:
sound.push_back(*snd);
sound[sound.size()].soundObj = Mix_LoadWAV(pFilename.c_str());
sound[sound.size()].id = pID;
sound[sound.size()].volume = 100;
}
//Sound Controls
void Audio::playSound(int pID, int pLoop){
//Search for right Sound struct and Play it:
for(unsigned int i=0;i < sound.size();i++){
if(sound[i].id = pID)
Mix_PlayChannel(sound[i].id, sound[i].soundObj, pLoop);
}
}
void Audio::stopSound(int pID){
for(unsigned int i=0;i < sound.size();i++){
if(sound[i].id = pID)
Mix_HaltChannel(sound[i].id);
}
}
void Audio::pauseSound(int pID){
for(unsigned int i=0;i < sound.size();i++){
if(sound[i].id = pID)
Mix_Pause(sound[i].id);
}
}
int Audio::getChannel(int pID){
for(unsigned int i=0;i < sound.size();i++){
if(sound[i].id = pID)
return sound[i].id;
else
return 0;
}
}
int Audio::soundIsPaused(int pID){
for(unsigned int i=0;i < sound.size();i++){
if(sound[i].id = pID)
return Mix_Paused(sound[i].id);
else
return 0;
}
}
//Volume Control:
void Audio::setVolume(int pID, int pVolume){
int rightID = 0;
for(unsigned int i=0;i < sound.size();i++){
if(sound[i].id = pID)
rightID = sound[i].id;
}
if(sound[rightID].volume < 0){
sound[rightID].volume = 0;
Mix_Volume(sound[rightID].id, sound[rightID].volume);
}
else
Mix_Volume(sound[rightID].id, pVolume);
if(sound[rightID].volume > 100){
sound[rightID].volume = 100;
Mix_Volume(sound[rightID].volume, sound[rightID].volume);
}
else
Mix_Volume(sound[rightID].volume, pVolume);
}
/*
int Audio::getVolume(int ID){
return volume;
}
*/
//Destructor:
Audio::~Audio(){
for(unsigned int i=0;i < sound.size();i++){
Mix_HaltChannel(sound[i].id);
Mix_FreeChunk(sound[i].soundObj);
}
Mix_CloseAudio();
}
|
Hoffe mal ihr kommt mit meinem gekritzel klar
DANKE IM VORRAUS!
lg