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


Anmelden zum Antworten