Когда я звоню SDL_PauseAudio(1)
в среде C ++, скомпилированной в Emscripten, задержка составляет около секунды или около того, прежде чем звук перестает выходить из динамиков.
Как можно избежать этой задержки и сделать паузу немедленно?
Код C ++ ниже:
#include <iostream>
#include <cmath>
#include <emscripten.h>
#include <SDL_audio.h>
using std::cerr;
using std::endl;
using std::string;
int count = 0;
int paused = true;
void getMoreAudio(void *, Uint8 *stream, int len) {
for (auto i=0; i<len; i++) {
stream[i] = static_cast<Uint8>(sin((count + i) * M_PI / 400.00) * 128);
}
count = count + len;
}
extern "C" EMSCRIPTEN_KEEPALIVE void togglePause() {
paused = !paused;
SDL_PauseAudio(paused ? 1 : 0);
}
int main() {
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
desired.freq = 48000;
desired.format = AUDIO_U8;
desired.channels = 1;
desired.samples = 4096;
desired.padding = 0;
desired.size = 8192;
desired.callback = &getMoreAudio;
desired.userdata = nullptr;
auto res = SDL_OpenAudio(&desired, &obtained);
SDL_PauseAudio(paused ? 1 : 0);
emscripten_set_main_loop([](){}, 0, false);
return 0;
}
И я установил Plunker в http://plnkr.co/edit/O4XbXYBXHg4ZwUWB5puY?p=preview . Запуск аудио нажатием кнопок кажется немедленным, а затем приостановка — нет.
Я заметил задержку в Chrome на Linux + Mac.
Задача ещё не решена.