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