javascript — пауза Emscripten SDL аудио сразу без задержки

Когда я звоню 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.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]