diff --git a/test/testaudio.c b/test/testaudio.c index 60eb79f51..9813237da 100644 --- a/test/testaudio.c +++ b/test/testaudio.c @@ -75,7 +75,7 @@ struct Thing } poof; struct { SDL_AudioStream *stream; - int total_ticks; + int total_bytes; Uint64 next_level_update; Uint8 levels[5]; } stream; @@ -556,14 +556,11 @@ static void StreamThing_ontick(Thing *thing, Uint64 now) /* are we playing? See if we're done, or update state. */ if (thing->line_connected_to->what == THING_LOGDEV) { const int available = SDL_GetAudioStreamAvailable(thing->data.stream.stream); - SDL_AudioSpec spec; - if (!available || (SDL_GetAudioStreamFormat(thing->data.stream.stream, NULL, &spec) < 0)) { + if (!available) { DestroyThingInPoof(thing); return; } else { - const int ticksleft = (int) ((((Uint64) (available / SDL_AUDIO_FRAMESIZE(spec))) * 1000) / spec.freq); - const float pct = thing->data.stream.total_ticks ? (((float) (ticksleft)) / ((float) thing->data.stream.total_ticks)) : 0.0f; - thing->progress = 1.0f - pct; + thing->progress = 1.0f - (thing->data.stream.total_bytes ? (((float) (available)) / ((float) thing->data.stream.total_bytes)) : 0.0f); } } @@ -583,6 +580,9 @@ static void StreamThing_ondrag(Thing *thing, int button, float x, float y) if (button == SDL_BUTTON_RIGHT) { /* this is kinda hacky, but use this to disconnect from a playing source. */ if (thing->line_connected_to) { SDL_UnbindAudioStream(thing->data.stream.stream); /* unbind from current device */ + if (thing->line_connected_to->what == THING_LOGDEV_CAPTURE) { + SDL_FlushAudioStream(thing->data.stream.stream); + } thing->line_connected_to = NULL; } } @@ -597,16 +597,14 @@ static void StreamThing_ondrop(Thing *thing, int button, float x, float y) /* connect to a logical device! */ SDL_Log("Binding audio stream ('%s') to logical device %u", thing->titlebar, (unsigned int) droppable_highlighted_thing->data.logdev.devid); if (thing->line_connected_to) { - const SDL_AudioSpec *spec = &droppable_highlighted_thing->data.logdev.spec; SDL_UnbindAudioStream(thing->data.stream.stream); /* unbind from current device */ if (thing->line_connected_to->what == THING_LOGDEV_CAPTURE) { SDL_FlushAudioStream(thing->data.stream.stream); - thing->data.stream.total_ticks = (int) ((((Uint64) (SDL_GetAudioStreamAvailable(thing->data.stream.stream) / SDL_AUDIO_FRAMESIZE(*spec))) * 1000) / spec->freq); } } SDL_BindAudioStream(droppable_highlighted_thing->data.logdev.devid, thing->data.stream.stream); /* bind to new device! */ - + thing->data.stream.total_bytes = SDL_GetAudioStreamAvailable(thing->data.stream.stream); thing->progress = 0.0f; /* ontick will adjust this if we're on an output device.*/ thing->data.stream.next_level_update = SDL_GetTicks() + 100; thing->line_connected_to = droppable_highlighted_thing; @@ -644,7 +642,7 @@ static Thing *CreateStreamThing(const SDL_AudioSpec *spec, const Uint8 *buf, con if (buf && buflen) { SDL_PutAudioStreamData(thing->data.stream.stream, buf, (int) buflen); SDL_FlushAudioStream(thing->data.stream.stream); - thing->data.stream.total_ticks = (int) ((((Uint64) (SDL_GetAudioStreamAvailable(thing->data.stream.stream) / SDL_AUDIO_FRAMESIZE(*spec))) * 1000) / spec->freq); + thing->data.stream.total_bytes = SDL_GetAudioStreamAvailable(thing->data.stream.stream); } thing->ontick = StreamThing_ontick; thing->ondrag = StreamThing_ondrag;