+int Nageru_get_audio_bus_eq_level_db(lua_State *L)
+{
+ if (global_audio_mixer == nullptr) {
+ // The audio mixer isn't set up until we know how many FFmpeg inputs we have.
+ luaL_error(L, "Audio functions can not be called before the theme is done initializing.");
+ }
+
+ int bus_index = luaL_checknumber(L, 1);
+ int band = luaL_checknumber(L, 2);
+ if (bus_index < 0 || size_t(bus_index) >= global_audio_mixer->num_buses()) {
+ // Doesn't fix the race, but fixes other out-of-bounds.
+ print_warning(L, "Theme called get_audio_bus_eq_level_db() on nonexistent bus %d; returning 0.0.\n", bus_index);
+ lua_pushnumber(L, 0.0);
+ } else if (band != EQ_BAND_BASS && band != EQ_BAND_MID && band != EQ_BAND_TREBLE) {
+ print_warning(L, "Theme called get_audio_bus_eq_level_db() on nonexistent band; returning 0.0.\n", bus_index);
+ lua_pushnumber(L, 0.0);
+ } else {
+ lua_pushnumber(L, global_audio_mixer->get_eq(bus_index, EQBand(band)));
+ }
+ return 1;
+}
+
+int Nageru_set_audio_bus_eq_level_db(lua_State *L)
+{
+ if (global_audio_mixer == nullptr || global_mainwindow == nullptr) {
+ // The audio mixer isn't set up until we know how many FFmpeg inputs we have.
+ luaL_error(L, "Audio functions can not be called before the theme is done initializing.");
+ }
+
+ int bus_index = luaL_checknumber(L, 1);
+ int band = luaL_checknumber(L, 2);
+ if (bus_index < 0 || size_t(bus_index) >= global_audio_mixer->num_buses()) {
+ // Doesn't fix the race, but fixes other out-of-bounds.
+ print_warning(L, "Theme called set_audio_bus_eq_level_db() on nonexistent bus %d; ignoring.\n", bus_index);
+ return 0;
+ } else if (band != EQ_BAND_BASS && band != EQ_BAND_MID && band != EQ_BAND_TREBLE) {
+ print_warning(L, "Theme called set_audio_bus_eq_level_db() on nonexistent band; returning 0.0.\n", bus_index);
+ return 0;
+ }
+ double level_db = luaL_checknumber(L, 3);
+
+ // Go through the UI, so that it gets updated.
+ global_mainwindow->set_eq_absolute(bus_index, EQBand(band), level_db);
+ return 0;
+}
+