MusicSpectrum  1.0.0
Referência da Classe Render

#include <render.hpp>

Membros Públicos

void run ()
 
 Render ()
 
 ~Render ()
 

Membros Privados

void handlePlot (std::vector< Float_Complex > spectrum, std::size_t fft_size)
 
void frameRate (time_point< high_resolution_clock > &prev_time)
 

Atributos Privados

const int FPS = 60
 
const double frame_duration = 1.0 / FPS
 
sf::Clock clock
 
std::shared_ptr< sf::RenderWindow > window
 
std::shared_ptr< sf::VideoMode > desktop
 
std::shared_ptr< HUDhud_ptr
 
std::shared_ptr< Spectrumspectrum_ptr
 
std::shared_ptr< FFT< sf::Int16 > > fft_ptr
 
std::shared_ptr< Spectrum3Dspectrum3D_ptr
 

Descrição detalhada

Classe responsável pela renderização do programa.

A classe Render é responsável por inicializar a janela principal, gerenciar objetos como HUD, Spectrum e Spectrum3D, processar eventos, controlar a taxa de quadros e realizar a renderização do espectro de áudio de acordo com a opção selecionada na HUD.

Construtores e Destrutores

◆ Render()

Render::Render ( )

Construtor da classe Render.

Esta função inicializa os principais objetos usados pela classe Render:

  • window: Janela principal da aplicação.
  • desktop: Modo de exibição do desktop.
  • hud_ptr: Ponteiro compartilhado para a instância da classe HUD.
  • fft_ptr: Ponteiro compartilhado para a instância da classe FFT.
  • spectrum_ptr: Ponteiro compartilhado para a instância da classe Spectrum.
  • spectrum3D_ptr: Ponteiro compartilhado para a instância da classe Spectrum3D.
18  : window(std::make_shared<sf::RenderWindow>(
19  sf::VideoMode(WIDTH, HEIGHT), "Music Spectrum",
20  sf::Style::Titlebar | sf::Style::Close)),
21  desktop(
22  std::make_shared<sf::VideoMode>(sf::VideoMode::getDesktopMode())) {
23 
24  window->setPosition(
25  sf::Vector2i(desktop->width / 2.f - window->getSize().x / 2.f,
26  desktop->height / 2.f - window->getSize().y / 2.f));
27 
28  hud_ptr = std::make_shared<HUD>(window);
29  fft_ptr = std::make_shared<FFT<sf::Int16>>();
30  spectrum_ptr = std::make_shared<Spectrum>(window, hud_ptr, fft_ptr);
31  spectrum3D_ptr = std::make_shared<Spectrum3D>(window, hud_ptr, fft_ptr);
32 }
std::shared_ptr< HUD > hud_ptr
Definition: render.hpp:28
std::shared_ptr< FFT< sf::Int16 > > fft_ptr
Definition: render.hpp:30
std::shared_ptr< Spectrum > spectrum_ptr
Definition: render.hpp:29
std::shared_ptr< Spectrum3D > spectrum3D_ptr
Definition: render.hpp:31
std::shared_ptr< sf::RenderWindow > window
Definition: render.hpp:25
std::shared_ptr< sf::VideoMode > desktop
Definition: render.hpp:26
const int WIDTH
Definition: hud.hpp:9
const int HEIGHT
Definition: hud.hpp:10

◆ ~Render()

Render::~Render ( )
34 { ImGui_ImplOpenGL3_Shutdown(); }

Funções membros

◆ frameRate()

void Render::frameRate ( time_point< high_resolution_clock > &  prev_time)
private

Ajuste da taxa de quadros.

Esta função controla a taxa de quadros da aplicação para manter uma renderização suave. Ela calcula o tempo decorrido desde o último frame e, se for menor que a duração desejada, coloca a thread em espera por um determinado tempo para garantir a taxa de quadros.

prev_time: Referência para o tempo do frame anterior.

46  {
47  auto current_time = high_resolution_clock::now();
48  auto elapsed_time =
49  duration_cast<duration<double>>(current_time - prev_time);
50 
51  if (elapsed_time.count() < frame_duration) {
52  auto sleep_duration =
53  duration<double>(frame_duration - elapsed_time.count());
54  std::this_thread::sleep_for(
55  duration_cast<milliseconds>(sleep_duration));
56  }
57 
58  prev_time = high_resolution_clock::now();
59 }
const double frame_duration
Definition: render.hpp:21

◆ handlePlot()

void Render::handlePlot ( std::vector< Float_Complex spectrum,
std::size_t  fft_size 
)
private

Processa o plot de acordo com a opção selecionada na HUD.

A função verifica a opção selecionada na HUD e chama o método apropriado do objeto spectrum_ptr ou spectrum3D_ptr para visualizar o espectro ou a forma de onda.

spectrum: Um vetor de números complexos que representam o espectro.

fft_size: O tamanho da transformada de Fourier rápida (FFT).

15  {
16  switch (hud_ptr->option) {
17  case 1:
18  fft_ptr->fftAnalyze(hud_ptr->sample_buffer, 1, spectrum, fft_size);
19  spectrum_ptr->viewWaveformFFT();
20  break;
21  case 2:
22  spectrum_ptr->viewWaveform();
23  break;
24  case 3:
25  fft_ptr->fftAnalyze(hud_ptr->sample_buffer, 1, spectrum, fft_size);
26  spectrum_ptr->viewWaveformRectFFT();
27  break;
28  case 4:
29  spectrum_ptr->viewWaveformRect();
30  break;
31  case 5:
32  fft_ptr->fftAnalyze(hud_ptr->sample_buffer, 1, spectrum, fft_size);
33  spectrum3D_ptr->viewWaveformFFT();
34  break;
35  case 6:
36  spectrum3D_ptr->viewWaveform();
37  break;
38  default:
39  break;
40  }
41 }

◆ run()

void Render::run ( )

Loop principal da aplicação.

Esta função é o loop principal da aplicação e é responsável por:

  • Gerenciar eventos da janela e da HUD.
  • Chamar os métodos run de HUD, Spectrum e Spectrum3D para realizar a atualização e renderização.
  • Controlar a taxa de quadros da aplicação.
70  {
71  ImGui_ImplOpenGL3_Init();
72  window->setVerticalSyncEnabled(true);
73  auto prev_time = high_resolution_clock::now();
74 
75  while (window->isOpen()) {
76  sf::Event event;
77  while (window->pollEvent(event)) {
78  ImGui::SFML::ProcessEvent(event);
79 
80  switch (event.type) {
81  case sf::Event::Closed:
82  window->close();
83  break;
84  case sf::Event::KeyPressed:
85  hud_ptr->handleEvents(event);
86  break;
87  case sf::Event::MouseWheelMoved:
88  spectrum3D_ptr->getWhellDelta(event.mouseWheel.delta);
89  break;
90  default:
91  break;
92  }
93  }
94 
95  ImGui::SFML::Update(*window, clock.restart());
96 
97  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
98  window->clear();
99 
100  ImGui_ImplOpenGL3_NewFrame();
101 
102  hud_ptr->run();
103  window->pushGLStates();
104  spectrum_ptr->run(std::bind(&Render::handlePlot, this,
105  std::placeholders::_1,
106  std::placeholders::_2));
107  window->popGLStates();
108 
109  spectrum3D_ptr->run(std::bind(&Render::handlePlot, this,
110  std::placeholders::_1,
111  std::placeholders::_2));
112 
113  ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
114 
115  window->display();
116 
117  frameRate(prev_time);
118  }
119 }
sf::Clock clock
Definition: render.hpp:23
void frameRate(time_point< high_resolution_clock > &prev_time)
Definition: render.cpp:46
void handlePlot(std::vector< Float_Complex > spectrum, std::size_t fft_size)
Definition: plot.cpp:14

Atributos

◆ clock

sf::Clock Render::clock
private

◆ desktop

std::shared_ptr<sf::VideoMode> Render::desktop
private

◆ fft_ptr

std::shared_ptr<FFT<sf::Int16> > Render::fft_ptr
private

◆ FPS

const int Render::FPS = 60
private

◆ frame_duration

const double Render::frame_duration = 1.0 / FPS
private

◆ hud_ptr

std::shared_ptr<HUD> Render::hud_ptr
private

◆ spectrum3D_ptr

std::shared_ptr<Spectrum3D> Render::spectrum3D_ptr
private

◆ spectrum_ptr

std::shared_ptr<Spectrum> Render::spectrum_ptr
private

◆ window

std::shared_ptr<sf::RenderWindow> Render::window
private

A documentação para essa classe foi gerada a partir dos seguintes arquivos: