Serenity Operating System
at master 41 lines 1.2 kB view raw
1/* 2 * Copyright (c) 2021, Cesar Torres <shortanemoia@protonmail.com> 3 * Copyright (c) 2022, the SerenityOS developers. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#pragma once 9 10#include "VisualizationWidget.h" 11#include <AK/Array.h> 12#include <AK/Complex.h> 13#include <AK/FixedArray.h> 14#include <LibGUI/Frame.h> 15 16class BarsVisualizationWidget final : public VisualizationWidget { 17 C_OBJECT(BarsVisualizationWidget) 18 19public: 20 ~BarsVisualizationWidget() override = default; 21 22private: 23 BarsVisualizationWidget(); 24 25 void render(GUI::PaintEvent&, FixedArray<float> const&) override; 26 void context_menu_event(GUI::ContextMenuEvent& event) override; 27 28 static constexpr size_t fft_size = 512; 29 static constexpr size_t bar_count = 64; 30 // Things become weird near the Nyquist limit. Just don't use that FFT data. 31 static constexpr size_t cutoff = fft_size - 32; 32 33 Array<Complex<float>, fft_size> m_fft_samples {}; 34 Array<float, fft_size> m_fft_window {}; 35 Array<float, fft_size / 2> m_previous_samples {}; 36 Array<int, bar_count> m_gfx_falling_bars {}; 37 bool m_is_using_last; 38 bool m_adjust_frequencies; 39 bool m_logarithmic_spectrum; 40 RefPtr<GUI::Menu> m_context_menu; 41};