duangsuse / abeat-pm

Mivik/abeat with enhanced project management

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Abeat with PM

OpenGL/PulseAudio visualizer, with project management scripts added; currently only mono channel is supported.

# build project, may -DCMAKE_BUILD_TYPE=Release
cmake -B build . &&cd build &&make ; cd -
# clean
rm -rf gl/ pkged/ build/

Dependencies

FFT(fast fourier transf.) is used for extracting freq dB histogram.

OGL framework: glad+glfw

pip install glad --user
apt install libpulse-dev libfftw3-dev libgl-dev libglfw3-dev
pacman -S fftw glfw-x11

Structure

Used tool: mkhpp.py, mk_glsl_hpp.py

Technical

This program uses various C++17 feature like std::chrono, constexpr.

mkhpp tool enables decl/defn reuse by outputting {}-removed pkged/x.hpp preprocessed with cpp -DPKGED, unless inlined members with {1; prefix

Setting config params is supported, but it looks very hard to support bg color customization(vec4), or migerate to WebAssembly(FFT,WebAudio)?

Main dataflow:

  • main() init buffer_size+PAInput+FFT, startGL, start capture & deltaTime loop
  • PAInput::stream_read_callback peek&write&drop to buffer here
  • FFT::calculate(buf) to output[i] with prepare_window(window_size), fftw
  • Render::render(float dt) of render.data[i] = dB; here, bind fft_buf in ctor
  • p_bar.use() sharder program with (rect,l,r -1/y,0,1layout,RGBA) link(vertex,geometry,fragment) u_size, u_half=1/usize; and gravity u_dt here

where

  • startGL windowHint GLFW_OPENGL_CORE_PROFILE, glfwCreateWindow(1000,350, "abeat")&glContext&onresize&gladLoad
  • fftw fftwf_execute(fftwf_plan_dft_r2c_1d(window_size, input, output, FFTW_ESTIMATE)) in fftwf_alloc_real out _complex

About

Mivik/abeat with enhanced project management


Languages

Language:C++ 78.4%Language:Python 10.7%Language:GLSL 5.5%Language:CMake 5.4%