Mały problem z funkcją w SDL

0

Witajcie,
mam mały problem z własną funkcją, którą napisałem z użyciem biblioteki SDL, a dokładniej to SDL_Mixer.
Kod:

void MainClass::Odgrywaj(char * str,Mix_Chunk *sound)
{
    int audio_rate = 22050;
    Uint16 audio_format = AUDIO_S16SYS;
    int audio_channels = 2;
    int audio_buffers = 4096;
    if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) {
        std::cout<<"Error 14";
    }
    sound = Mix_LoadWAV(str);
    if(sound == NULL) {
        std::cout<<"Error 15";
    }
    int channel;
    channel = Mix_PlayChannel(-1, sound, 0);
    if(channel == -1) {
        std::cout<<"Error 16";
    }
}

Funkcja działa jak należy. Problem występuję wtedy, kiedy próbuję zatrzymać dźwięk:

MainClass::Odgrywaj("audio.wav",sound);
 Mix_FreeChunk(sound);

Program wysypuję się( pojawia się błąd wygenerowany przez windowsa z 'wyślij raport') przy użyciu funkcji Mix_FreeChunk.

0

Przepraszam, że napisałem to tak chaotycznie, ale bardzo się spieszyłem.
Zacznijmy od początku:
Kod tamtej funkcji, co podałem powyżej, ma za zadanie odtworzyć dźwięk za pomocą biblioteki SDL_mixer.
Funkcja działa jak należy, lecz kiedy próbuję użyć funkcji wewnętrznej powyższej biblioteki na obiekcie sound(obiekt typu Mix_chunk) - Mix_FreeChunk, to niestety pojawia się klasyczny błąd windowsa(ten z 'wyślij raport'). Podejrzewam, że błąd ten leży po stronie wskaźników, ale niestety nie wiem co dokładnie i jak to naprawić.
Z góry dziękuje za pomoc.

0
void MainClass::Odgrywaj(char * str,Mix_Chunk *sound)

Tutaj masz przynajmniej 2 błędy. Powinno być

void MainClass::Odgrywaj(const char * str,Mix_Chunk **sound)

ponieważ z tej funkcji przypisujesz sound i korzystasz z niego na zewnątrz. Możesz go też przekazać przez referencję.

0

Okey, dzięki.

0

Mam pytanie jak zatrzymać odtwarzający się utwór w SDL?

1 użytkowników online, w tym zalogowanych: 0, gości: 1