<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sylwekkominek</title>
    <description>The latest articles on DEV Community by sylwekkominek (@sylwekkominek).</description>
    <link>https://dev.to/sylwekkominek</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3474103%2F68d165e2-92ea-47b5-ba11-3afb2c62a8b9.png</url>
      <title>DEV Community: sylwekkominek</title>
      <link>https://dev.to/sylwekkominek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sylwekkominek"/>
    <language>en</language>
    <item>
      <title>Music Visualizer with Animated Color Themes Created via ChatGPT Prompts</title>
      <dc:creator>sylwekkominek</dc:creator>
      <pubDate>Wed, 22 Oct 2025 19:32:46 +0000</pubDate>
      <link>https://dev.to/sylwekkominek/music-visualizer-with-animated-color-themes-created-via-chatgpt-prompts-35pp</link>
      <guid>https://dev.to/sylwekkominek/music-visualizer-with-animated-color-themes-created-via-chatgpt-prompts-35pp</guid>
      <description>&lt;p&gt;sylwekkominek/SpectrumAnalyzer was created because, since childhood, I enjoyed watching the “jumping bars” moving in sync with music on my Technics EC-EH550 stereo system. Unfortunately, modern audio equipment rarely includes built-in spectrum analyzers. While many visualizer apps exist online, they typically lack flexibility and become repetitive due to limited customization options. The app is open source and runs on both Windows and Ubuntu. You can also create your own themes by copying the contents of getAdvancedColorSettings() and getBackgroundColorSettings() functions from config.py into ChatGPT and saying: “Create something unique.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcedajokjrpsaiva0ngjd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcedajokjrpsaiva0ngjd.png" alt=" " width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core of this project is the &lt;strong&gt;AudioSpectrumAnalyzer&lt;/strong&gt; class, which manages the entire process using several parallel threads for real-time performance:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;samplesUpdater&lt;/strong&gt; – collects audio data using PortAudio (or a custom signal from audioConfig.py) and places it into a queue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;fftCalculator&lt;/strong&gt; – applies a window function and computes the FFT using the FFTW library. It uses Welch’s method with overlapping to increase the number of frames per second (FPS), which is crucial for smooth animation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;processing&lt;/strong&gt; – processes FFT data, applies gain correction, peak hold, averaging and smoothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;drafter&lt;/strong&gt; – converts dBFS levels into vertex offsets sent to the GPU to render the bars.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;flowController&lt;/strong&gt; – monitors the current FPS and dynamically adjusts the amount of overlapping used in Welch’s method. This adaptive algorithm automatically increases or decreases overlap depending on hardware performance and the desired FPS set in config.py.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Welch’s method and overlapping are necessary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To accurately detect low frequencies (such as 20–50 Hz) at the commonly used sampling rate of 44,100 Hz, the application processes audio in chunks of 4096 samples.&lt;/p&gt;

&lt;p&gt;This results in a frequency resolution of approximately 10.77 Hz for the FFT (calculated by dividing 44,100 by 4096). In simpler terms, the FFT measures energy in discrete frequency steps of about 10.77 Hz.&lt;/p&gt;

&lt;p&gt;Processing 4096 samples at once means a new analysis frame is created roughly every 4096 ÷ 44,100 ≈ 93 milliseconds, which equals about 11 frames per second (FPS) — too low for smooth real-time visualization.&lt;/p&gt;

&lt;p&gt;To improve responsiveness without sacrificing low-frequency resolution, the application uses overlapping windows based on Welch’s method. Instead of waiting for a completely new block of 4096 samples, it shifts the analysis window forward by a smaller step (for example, 512 or 1024 samples), reusing much of the previous data. This significantly increases the number of analysis frames per second — allowing for smooth 60 FPS animation while still analyzing long enough segments to preserve detail in the bass range.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A more detailed description is available here:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sylwekkominek.github.io/SpectrumAnalyzer/" rel="noopener noreferrer"&gt;https://sylwekkominek.github.io/SpectrumAnalyzer/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://youtu.be/W3p4BIkMU7w" rel="noopener noreferrer"&gt;https://youtu.be/W3p4BIkMU7w&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>dsp</category>
      <category>fft</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Fully Configurable Open Source Audio Spectrum Analyzer</title>
      <dc:creator>sylwekkominek</dc:creator>
      <pubDate>Wed, 08 Oct 2025 21:04:13 +0000</pubDate>
      <link>https://dev.to/sylwekkominek/fully-configurable-open-source-audio-spectrum-analyzer-25h5</link>
      <guid>https://dev.to/sylwekkominek/fully-configurable-open-source-audio-spectrum-analyzer-25h5</guid>
      <description>&lt;p&gt;Hi, &lt;br&gt;
I’ve developed an open-source app for practicing basic skills in digital signal processing and computer graphics using OpenGL. It’s written mainly in C++ for data processing and visualization, with Python used for data input and configuration. This makes it easier to run experiments or adjust settings without recompiling the code, lowering the entry barrier for users unfamiliar with C++.&lt;/p&gt;

&lt;p&gt;By default, the app captures audio from a microphone in real-time and displays its spectrum on the screen. It’s highly customizable — you can change the number of bars, colors, and the overall color theme. The app runs on Raspberry Pi, standard Ubuntu desktops, and Windows.&lt;/p&gt;

&lt;p&gt;In my Raspberry Pi setup, I use a HiFiBerry DAC+ DSP to analyze music in real-time. The signal comes via optical input (TOSLINK) from a CD player, but you can also connect a microphone for live audio visualization.&lt;/p&gt;

&lt;p&gt;I’ve written instructions and a tutorial to help you get started — feel free to check it out and give it a try!&lt;/p&gt;

&lt;p&gt;Code: &lt;a href="https://github.com/sylwekkominek/SpectrumAnalyzer" rel="noopener noreferrer"&gt;https://github.com/sylwekkominek/SpectrumAnalyzer&lt;/a&gt;&lt;br&gt;
Spec: &lt;a href="https://sylwekkominek.github.io/SpectrumAnalyzer/" rel="noopener noreferrer"&gt;https://sylwekkominek.github.io/SpectrumAnalyzer/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app is also available for Windows in the Microsoft Store and can be downloaded for free: &lt;a href="https://apps.microsoft.com/detail/9ngnl3tjj7bg?hl=en-US&amp;amp;gl=US" rel="noopener noreferrer"&gt;https://apps.microsoft.com/detail/9ngnl3tjj7bg?hl=en-US&amp;amp;gl=US&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope someone finds it useful or fun to play with!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>cpp</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
