Show More
Commit Description:
Tweak selected text color.
Commit Description:
Tweak selected text color.
References:
File last commit:
Show/Diff file:
Action:
FNA/lib/FAudio/utils/testvolumemeter/testvolumemeter.cpp
162 lines | 3.1 KiB | text/x-c | CppLexer
162 lines | 3.1 KiB | text/x-c | CppLexer
r0 | #include "../uicommon/imgui.h" | |||
#include "audio.h" | ||||
#include <math.h> | ||||
const char* TOOL_NAME = "Volume Meter Test Tool"; | ||||
int TOOL_WIDTH = 640; | ||||
int TOOL_HEIGHT = 510; | ||||
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; | ||||
#define MAX_TIMELINE 120 | ||||
static float peaksL[MAX_TIMELINE] = { 0 }; | ||||
static float peaksR[MAX_TIMELINE] = { 0 }; | ||||
static float rmsL[MAX_TIMELINE] = { 0 }; | ||||
static float rmsR[MAX_TIMELINE] = { 0 }; | ||||
static int vmOffset = 0; | ||||
// GUI | ||||
int window_y = next_window_dims(0, 50); | ||||
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 | ||||
); | ||||
#endif | ||||
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(); | ||||
update_wave |= ImGui::Checkbox("Stereo", &wave_stereo); | ||||
ImGui::End(); | ||||
window_y = next_window_dims(window_y, 370); | ||||
ImGui::Begin("Volume Meter"); | ||||
ImGui::PlotLines( | ||||
"Peaks Channel 1", | ||||
peaksL, | ||||
MAX_TIMELINE, | ||||
vmOffset, | ||||
NULL, | ||||
0.0f, | ||||
1.0f, | ||||
ImVec2(0, 80) | ||||
); | ||||
ImGui::PlotLines( | ||||
"Peaks Channel 2", | ||||
peaksR, | ||||
MAX_TIMELINE, | ||||
vmOffset, | ||||
NULL, | ||||
0.0f, | ||||
1.0f, | ||||
ImVec2(0, 80) | ||||
); | ||||
ImGui::PlotLines( | ||||
"RMS Channel 1", | ||||
rmsL, | ||||
MAX_TIMELINE, | ||||
vmOffset, | ||||
NULL, | ||||
0.0f, | ||||
1.0f, | ||||
ImVec2(0, 80) | ||||
); | ||||
ImGui::PlotLines( | ||||
"RMS Channel 2", | ||||
rmsR, | ||||
MAX_TIMELINE, | ||||
vmOffset, | ||||
NULL, | ||||
0.0f, | ||||
1.0f, | ||||
ImVec2(0, 80) | ||||
); | ||||
ImGui::End(); | ||||
// Audio context | ||||
static AudioContext *player = NULL; | ||||
if (player == NULL || update_engine) | ||||
{ | ||||
if (player != NULL) | ||||
{ | ||||
audio_destroy_context(player); | ||||
} | ||||
player = audio_create_context((AudioEngine) audio_engine); | ||||
} | ||||
if (update_wave | update_engine) | ||||
{ | ||||
audio_wave_load(player, (AudioSampleWave) wave_index, wave_stereo); | ||||
} | ||||
if (play_wave) | ||||
{ | ||||
audio_wave_play(player); | ||||
} | ||||
float peaks[2] = { 0.0f, 0.0f }; | ||||
float rms[2] = { 0.0f, 0.0f }; | ||||
audio_update_volumemeter(player, peaks, rms); | ||||
peaksL[vmOffset] = peaks[0]; | ||||
peaksR[vmOffset] = peaks[1]; | ||||
rmsL[vmOffset] = rms[0]; | ||||
rmsR[vmOffset] = rms[1]; | ||||
vmOffset = (vmOffset + 1) % MAX_TIMELINE; | ||||
} | ||||