SDL Audio abspielen läuft, aber es kommt kein Ton



  • Hallo,

    ich versuche via SDL eine .wav Datei abzuspielen. Ich bin dabei folgendermaßen vorgeganen:

    int err_main(std::string_view msg)
    {
    	std::cerr << msg << '\n';
    	return -1;
    }
    
    struct AudioData {
    	Uint8* pos;
    	Uint32 len;
    };
    
    void MyAudioCallback(void* userdata, Uint8* stream, int streamLen)
    {
    	auto audio = reinterpret_cast<AudioData*>(userdata);
    	if (!audio->len) return;
    
    	auto len = std::min(static_cast<Uint32>(streamLen), audio->len);
    	SDL_memcpy(stream, audio->pos, len);
    
    	audio->pos += len;
    	audio->len -= len;
    }
    
    int main(int argc, char** argv)
    {
    	SDL_Init(SDL_INIT_AUDIO);
    	const char* path{ "testClip.wav" };
    
    	SDL_AudioSpec wavSpec;
    	Uint8* wavStart;
    	Uint32 wavLen;
    	if (!SDL_LoadWAV(path, &wavSpec, &wavStart, &wavLen))
    		return err_main("Unable to load audio");
    
    	AudioData audio{ wavStart, wavLen };
    	wavSpec.callback = MyAudioCallback;
    	wavSpec.userdata = &audio;
    
    	auto device = SDL_OpenAudioDevice(nullptr, 0, &wavSpec, nullptr, SDL_AUDIO_ALLOW_ANY_CHANGE);
    
    	if (!device)
    		return err_main("Error opening audio device");
    
    	SDL_PauseAudioDevice(device, 0);
    	while (audio.len > 0) 
    		SDL_Delay(100);
    
    	SDL_CloseAudioDevice(device);
    	SDL_FreeWAV(wavStart);
    	SDL_Quit();
    	return 0;
    }
    

    Wenn ich einfach SDL_OpenAudio (ohne -Device) verwende wird die Datei abgespielt:

    SDL_OpenAudio(&wavSpec, nullptr);
    SDL_PauseAudio(0);
    

    Hat jemand eine Idee, warum das Programm zwar die Datei abspielen zu scheint, jedoch nichts aus meinem Lautsprecher kommt? Mit Kopfhörern habe ich es auch schon versucht.

    LG