Commit Description:
Add timers for Simulation and various engines...
Commit Description:
Add timers for Simulation and various engines Starting to add additional timers for different stages of the process of updating in order to get more insight into what is slowing it down. The update takes 9ms, which is much longer than it used to. Engine-specific timers are coming later.
File last commit:
Show/Diff file:
Action:
FNA/lib/FAudio/utils/testreverb/testreverb.cpp
196 lines | 6.3 KiB | text/x-c | CppLexer
#include "../uicommon/imgui.h"
#include "audio.h"
#include <math.h>
const char* TOOL_NAME = "Reverb Test Tool";
int TOOL_WIDTH = 640;
int TOOL_HEIGHT = 850;
int next_window_dims(int y_pos, int height)
{
ImGui::SetNextWindowPos(ImVec2(0, static_cast<float>(y_pos)));
ImGui::SetNextWindowSize(ImVec2(640, static_cast<float>(height)));
return y_pos + height;
}
void FAudioTool_Init()
{
/* Nothing to do... */
}
void FAudioTool_Quit()
{
/* Nothing to do... */
}
void FAudioTool_Update()
{
bool update_engine = false;
bool update_wave = false;
bool play_wave = false;
bool stop_wave = false;
bool update_effect = false;
// gui
int window_y = next_window_dims(0, 80);
ImGui::Begin("Output Audio Engine");
static int audio_engine = (int)AudioEngine_FAudio;
update_engine |= ImGui::RadioButton("FAudio", &audio_engine, (int)AudioEngine_FAudio); ImGui::SameLine();
#ifdef HAVE_XAUDIO2
update_engine |= ImGui::RadioButton("XAudio2", &audio_engine, (int)AudioEngine_XAudio2); ImGui::SameLine();
#endif
static bool output_5p1 = false;
update_engine |= ImGui::Checkbox("5.1 channel output", &output_5p1);
static int32_t voice_index = (int32_t) AudioVoiceType_Submix;
update_engine |= ImGui::Combo("Apply effect to", &voice_index, audio_voice_type_names, 3);
ImGui::End();
window_y = next_window_dims(window_y, 80);
ImGui::Begin("Wave file to play");
static int wave_index = (int)AudioWave_SnareDrum01;
static bool wave_stereo = false;
update_wave |= ImGui::RadioButton("Snare Drum (Forte)", &wave_index, (int)AudioWave_SnareDrum01); ImGui::SameLine();
update_wave |= ImGui::RadioButton("Snare Drum (Fortissimo)", &wave_index, (int)AudioWave_SnareDrum02); ImGui::SameLine();
update_wave |= ImGui::RadioButton("Snare Drum (Mezzo-Forte)", &wave_index, (int)AudioWave_SnareDrum03);
play_wave = ImGui::Button("Play"); ImGui::SameLine();
stop_wave = ImGui::Button("Stop"); ImGui::SameLine();
update_wave |= ImGui::Checkbox("Stereo", &wave_stereo);
ImGui::End();
window_y = next_window_dims(window_y, 80);
ImGui::Begin("Reverb effect");
static bool effect_enabled = false;
update_effect |= ImGui::Checkbox("Enabled", &effect_enabled);
static int32_t preset_index = -1;
static ReverbParameters reverb_params = {
100.0f,
40,
60,
0, 0, 0, 0, 0,
3,
3,
0,
0,
0,
0,
5000.0f,
-5.0f,
-5.0f,
-5.0f,
-5.0f,
2000.0f,
50.0f,
100.0f,
};
if (ImGui::Combo("Preset", &preset_index, audio_reverb_preset_names, audio_reverb_preset_count)) {
memcpy(&reverb_params, &audio_reverb_presets[preset_index], sizeof(ReverbParameters));
update_effect = true;
}
ImGui::End();
window_y = next_window_dims(window_y, 600);
ImGui::Begin("FAudio Tune Detail");
int ReverbDelay = reverb_params.ReverbDelay;
int RearDelay = reverb_params.RearDelay;
int PositionLeft = reverb_params.PositionLeft;
int PositionRight = reverb_params.PositionRight;
int PositionMatrixLeft = reverb_params.PositionMatrixLeft;
int PositionMatrixRight = reverb_params.PositionMatrixRight;
int EarlyDiffusion = reverb_params.EarlyDiffusion;
int LateDiffusion = reverb_params.LateDiffusion;
int LowEQGain = reverb_params.LowEQGain;
int LowEQCutoff = reverb_params.LowEQCutoff;
int HighEQGain = reverb_params.HighEQGain;
int HighEQCutoff = reverb_params.HighEQCutoff;
update_effect |= ImGui::SliderFloat("WetDryMix (%)", &reverb_params.WetDryMix, 0, 100);
update_effect |= ImGui::SliderInt("ReflectionsDelay (ms)", (int *)&reverb_params.ReflectionsDelay, 0, 300);
update_effect |= ImGui::SliderInt("ReverbDelay (ms)", &ReverbDelay, 0, 85);
update_effect |= ImGui::SliderInt("RearDelay (ms)", &RearDelay, 0, 5);
update_effect |= ImGui::SliderInt("PositionLeft", &PositionLeft, 0, 30);
update_effect |= ImGui::SliderInt("PositionRight", &PositionRight, 0, 30);
update_effect |= ImGui::SliderInt("PositionMatrixLeft", &PositionMatrixLeft, 0, 30);
update_effect |= ImGui::SliderInt("PositionMatrixRight", &PositionMatrixRight, 0, 30);
update_effect |= ImGui::SliderInt("Early Diffusion", &EarlyDiffusion, 0, 15);
update_effect |= ImGui::SliderInt("Late Diffusion", &LateDiffusion, 0, 15);
update_effect |= ImGui::SliderInt("LowEqGain", &LowEQGain, 0, 12);
update_effect |= ImGui::SliderInt("LowEqCuttoff", &LowEQCutoff, 0, 9);
update_effect |= ImGui::SliderInt("HighEqGain", &HighEQGain, 0, 8);
update_effect |= ImGui::SliderInt("HighEqCuttoff", &HighEQCutoff, 0, 14);
update_effect |= ImGui::SliderFloat("RoomFreq (Hz)", &reverb_params.RoomFilterFreq, 20, 20000);
update_effect |= ImGui::SliderFloat("RoomGain (dB)", &reverb_params.RoomFilterMain, -100, 0);
update_effect |= ImGui::SliderFloat("RoomHFGain (dB)", &reverb_params.RoomFilterHF, -100, 0);
update_effect |= ImGui::SliderFloat("ReflectionsGain (dB)", &reverb_params.ReflectionsGain, -100, 20);
update_effect |= ImGui::SliderFloat("ReverbGain (dB)", &reverb_params.ReverbGain, -100, 20);
update_effect |= ImGui::SliderFloat("DecayTime (s)", &reverb_params.DecayTime, 0.1f, 15.0f);
update_effect |= ImGui::SliderFloat("Density (%)", &reverb_params.Density, 0, 100);
update_effect |= ImGui::SliderFloat("RoomSize (feet)", &reverb_params.RoomSize, 1, 100);
reverb_params.ReverbDelay = ReverbDelay;
reverb_params.RearDelay = RearDelay;
reverb_params.PositionLeft = PositionLeft;
reverb_params.PositionRight = PositionRight;
reverb_params.PositionMatrixLeft = PositionMatrixLeft;
reverb_params.PositionMatrixRight = PositionMatrixRight;
reverb_params.EarlyDiffusion = EarlyDiffusion;
reverb_params.LateDiffusion = LateDiffusion;
reverb_params.LowEQGain = LowEQGain;
reverb_params.LowEQCutoff = LowEQCutoff;
reverb_params.HighEQGain = HighEQGain;
reverb_params.HighEQCutoff = HighEQCutoff;
ImGui::End();
// audio control
static AudioContext *player = NULL;
if (player == NULL || update_engine)
{
if (player != NULL)
{
audio_destroy_context(player);
}
player = audio_create_context((AudioEngine) audio_engine, output_5p1, (AudioVoiceType) voice_index);
}
if (update_wave | update_engine)
{
audio_wave_load(player, (AudioSampleWave) wave_index, wave_stereo);
}
if (play_wave) {
audio_wave_play(player);
}
if (stop_wave)
{
audio_wave_stop(player);
}
if ((update_engine || update_effect))
{
audio_effect_change(player, effect_enabled, &reverb_params);
}
}