#pragma once #include #include #include #include emscripten::val make_blank_promise(); constexpr static float SIGNAL_DBFS_FLOOR = 1e-10f; constexpr static float SIGNAL_DBFS_FLOOR_SQUARED = SIGNAL_DBFS_FLOOR * SIGNAL_DBFS_FLOOR; inline float signalValueToDbFS(float value) { return 20.0f * std::log10(std::fmax(std::fabs(value), SIGNAL_DBFS_FLOOR)); } // assumes value is already squared inline float signalSquareValueToDbFS(float value) { return 10.0f * std::log10(std::fmax(value, SIGNAL_DBFS_FLOOR_SQUARED)); } struct emscripten_lock_raii { emscripten_lock_t &lock; emscripten_lock_raii(emscripten_lock_t &lock) : lock(lock) { if (emscripten_is_main_browser_thread()) { emscripten_lock_busyspin_waitinf_acquire(&lock); } else { emscripten_lock_waitinf_acquire(&lock); } } ~emscripten_lock_raii() { emscripten_lock_release(&lock); } };