[gelöst] SDL_mixer spielt immer nur einen Sound zur gleichen Zeit ab
-
Hi,
ich schreibe mir gerade eine kleine auf SDL und OpenGL beruhende Gameengine und habe zur Zeit ein kleines Soundproblem. SDL_mixer spielt mir meine Musik ab und auch einen Mix_Chunk, also einen einfachen Wave-Sound, dazu. Will ich diesen jedoch ein weiteres Mal abspielen, während er noch läuft, passiert gar nichts. Ich dachte erst, es wäre vielleicht ein Zugriffskonflikt auf den Mix_Chunk und habe eine Kopie der .wav-Datei erstellt und in einen Separaten Mix_Chunk geladen. Doch jetzt kann ich immer erst einen der beiden Mix_Chunks starten, sobald der andere fertig mit dem abspielen ist. Ich verlange explizit 32 Mischkanäle und weiße den Sounds keinen festen Kanal zu, sondern sie sollen einfach auf dem nächsten freien Kanal abgespielt werden. Setze ich die Mischlautstärke aller Kanäle auf 50%, so ändert sich nichts.So initialisiere ich SDL_mixer:
//Mixer starten int Frequency = MIX_DEFAULT_FREQUENCY; //MIX_DEFAULT_FREQUENCY = 22050 Hz Uint16 Format = MIX_DEFAULT_FORMAT; //Unsigned 16 Bit Audio in system byte order = AUDIO_U16SYS int Channels = 2; //1 = Mono, 2 = Stereo int Chunksize = 4096; //Bytes, die für den Outputchannel benutzt werden if (Mix_OpenAudio(Frequency, Format, Channels, Chunksize) == -1) { //Konnte nicht gestartet werden, Fehler ausgeben } //Anzahl der Kanäle festlegen int MixChannels = 32; Mix_AllocateChannels(MixChannels); //Mischlautstärke aller Channels setzen, Channelnummer statt -1 setzt nur einen Channel(nachträglich hinzugefügt, ändert aber nichts) Mix_Volume(-1, 128/2);
So spiele ich einen Sound ab (er liegt immer im Objekt in einer Variable namens Mix_Chunk* Sound)
//Sound abspielen, -1 = auf nächstem freien Kanal //Mix_PlayChannel liefert -1 als Fehler oder Kanal zurück Mix_PlayChannel(-1,Sound,0);
Ich weiß nicht, was für Informationen noch nützlich sein könnten. Ich hoffe jemand weiß Rat. denn ich bin momentan eher ratlos.
-
Die Lösung war ganz simpel. Ich habe die Soundausgabe durch einen Tastendruck gestartet. Egal wie kurz ich die Taste angetippt habe, SDL_mixer hat jedesmal in dieser Zeit sämtliche Kanäle mit dem Sound belegt und zwar so zeitgleich, dass man auch keinen Versatz gehört hat.