<?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>Forem: Niki Indjov</title>
    <description>The latest articles on Forem by Niki Indjov (@niki_indjov_791e4c9df1).</description>
    <link>https://forem.com/niki_indjov_791e4c9df1</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%2F3781273%2Fe88006da-d864-4020-90fd-ffc1e73def1d.jpg</url>
      <title>Forem: Niki Indjov</title>
      <link>https://forem.com/niki_indjov_791e4c9df1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/niki_indjov_791e4c9df1"/>
    <language>en</language>
    <item>
      <title>I Built a Drum Tuner That Vibrates When You’re Out of Tune</title>
      <dc:creator>Niki Indjov</dc:creator>
      <pubDate>Fri, 20 Feb 2026 08:11:28 +0000</pubDate>
      <link>https://forem.com/niki_indjov_791e4c9df1/i-built-a-drum-tuner-that-vibrates-when-youre-out-of-tune-2hic</link>
      <guid>https://forem.com/niki_indjov_791e4c9df1/i-built-a-drum-tuner-that-vibrates-when-youre-out-of-tune-2hic</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;🥁 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://indjoov.github.io/drumcraft/" rel="noopener noreferrer"&gt;https://indjoov.github.io/drumcraft/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
⭐ &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/indjoov/drumcraft" rel="noopener noreferrer"&gt;https://github.com/indjoov/drumcraft&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Drum tuning is one of the most frustrating things in music.&lt;/p&gt;

&lt;p&gt;Unlike guitars, drums don’t have one string.&lt;/p&gt;

&lt;p&gt;They have &lt;strong&gt;8 separate tension points&lt;/strong&gt; around the head.&lt;/p&gt;

&lt;p&gt;And each one needs to match.&lt;/p&gt;

&lt;p&gt;Most tuners don’t help with this.&lt;/p&gt;

&lt;p&gt;So I built one that does.&lt;/p&gt;

&lt;p&gt;And I added something unusual:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Haptic feedback.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your phone vibrates when you're out of tune.&lt;/p&gt;

&lt;p&gt;You can literally &lt;em&gt;feel&lt;/em&gt; the pitch.&lt;/p&gt;

&lt;p&gt;I call it &lt;strong&gt;DrumCraft&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An open-source, accessible drum tuner that runs entirely in the browser.&lt;/p&gt;

&lt;p&gt;No backend. No installs.&lt;/p&gt;

&lt;p&gt;Just your mic and your phone.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Drum Tuning Is Harder Than Guitar Tuning
&lt;/h1&gt;

&lt;p&gt;When you tune a guitar string, you tune one thing.&lt;/p&gt;

&lt;p&gt;When you tune a drum, you're tuning a system.&lt;/p&gt;

&lt;p&gt;Each lug affects the others.&lt;/p&gt;

&lt;p&gt;You don’t tune notes — you tune &lt;strong&gt;tension symmetry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If one lug is tighter, the drum sounds uneven.&lt;/p&gt;

&lt;p&gt;That’s why professional drummers go &lt;strong&gt;lug by lug&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;DrumCraft was designed specifically for that.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Key Idea: Tune Each Lug Individually
&lt;/h1&gt;

&lt;p&gt;DrumCraft shows a visual drum.&lt;/p&gt;

&lt;p&gt;You click a lug.&lt;/p&gt;

&lt;p&gt;You strike near that lug.&lt;/p&gt;

&lt;p&gt;It measures the frequency.&lt;/p&gt;

&lt;p&gt;Then you repeat for all lugs.&lt;/p&gt;

&lt;p&gt;It calculates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;average frequency&lt;/li&gt;
&lt;li&gt;deviation&lt;/li&gt;
&lt;li&gt;spread between lugs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tells you exactly which lug needs adjustment.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Weird Feature: Haptic Feedback
&lt;/h1&gt;

&lt;p&gt;This is the part I love most.&lt;/p&gt;

&lt;p&gt;DrumCraft uses the browser’s &lt;strong&gt;Vibration API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your phone vibrates differently depending on tuning accuracy.&lt;/p&gt;

&lt;p&gt;Out of tune → stronger vibration&lt;br&gt;&lt;br&gt;
In tune → calm  &lt;/p&gt;

&lt;p&gt;This creates a second channel of feedback.&lt;/p&gt;

&lt;p&gt;Not visual.&lt;/p&gt;

&lt;p&gt;Not audio.&lt;/p&gt;

&lt;p&gt;Physical.&lt;/p&gt;

&lt;p&gt;This is especially powerful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;noisy environments&lt;/li&gt;
&lt;li&gt;live stages&lt;/li&gt;
&lt;li&gt;accessibility&lt;/li&gt;
&lt;li&gt;low-vision users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can tune without constantly looking at the screen.&lt;/p&gt;




&lt;h1&gt;
  
  
  How It Works (Technically)
&lt;/h1&gt;

&lt;p&gt;The system uses the Web Audio API.&lt;/p&gt;

&lt;p&gt;Flow:&lt;/p&gt;

&lt;p&gt;Microphone → Autocorrelation → Frequency → Visual + Haptic feedback&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Microphone input via &lt;code&gt;getUserMedia&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Audio analysis via &lt;code&gt;AnalyserNode&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Autocorrelation detects fundamental frequency&lt;/li&gt;
&lt;li&gt;Frequency compared to average lug frequency&lt;/li&gt;
&lt;li&gt;Deviation calculated&lt;/li&gt;
&lt;li&gt;Visual + vibration feedback generated&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All in real time.&lt;/p&gt;

&lt;p&gt;No external audio libraries.&lt;/p&gt;

&lt;p&gt;Everything runs locally.&lt;/p&gt;




&lt;h1&gt;
  
  
  Accessibility Was a Core Goal
&lt;/h1&gt;

&lt;p&gt;DrumCraft includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High contrast mode&lt;/li&gt;
&lt;li&gt;Large text mode&lt;/li&gt;
&lt;li&gt;Reduced motion mode&lt;/li&gt;
&lt;li&gt;Full keyboard navigation&lt;/li&gt;
&lt;li&gt;Screen reader support&lt;/li&gt;
&lt;li&gt;Haptic feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Accessibility is not an afterthought.&lt;/p&gt;

&lt;p&gt;It’s part of the design.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Build This in the Browser?
&lt;/h1&gt;

&lt;p&gt;Because modern browsers are incredibly powerful.&lt;/p&gt;

&lt;p&gt;You can build real musical tools with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Web Audio API&lt;/li&gt;
&lt;li&gt;no backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;instant&lt;/li&gt;
&lt;li&gt;open&lt;/li&gt;
&lt;li&gt;accessible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyone can use them.&lt;/p&gt;

&lt;p&gt;Anyone can improve them.&lt;/p&gt;




&lt;h1&gt;
  
  
  Open Source
&lt;/h1&gt;

&lt;p&gt;DrumCraft is MIT licensed.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fork it&lt;/li&gt;
&lt;li&gt;modify it&lt;/li&gt;
&lt;li&gt;improve it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/indjoov/drumcraft" rel="noopener noreferrer"&gt;https://github.com/indjoov/drumcraft&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  The Bigger Idea
&lt;/h1&gt;

&lt;p&gt;The browser is becoming a musical instrument.&lt;/p&gt;

&lt;p&gt;Not just something you use to browse.&lt;/p&gt;

&lt;p&gt;Something you create with.&lt;/p&gt;

&lt;p&gt;Something you interact with physically.&lt;/p&gt;

&lt;p&gt;DrumCraft is a small step in that direction.&lt;/p&gt;




&lt;h1&gt;
  
  
  Try It
&lt;/h1&gt;

&lt;p&gt;Live demo:&lt;/p&gt;

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

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/indjoov/drumcraft" rel="noopener noreferrer"&gt;https://github.com/indjoov/drumcraft&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  I’d Love Feedback
&lt;/h1&gt;

&lt;p&gt;Especially from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drummers&lt;/li&gt;
&lt;li&gt;developers&lt;/li&gt;
&lt;li&gt;accessibility engineers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What would you improve?&lt;/p&gt;

&lt;p&gt;And if you found it interesting, consider starring the repo ⭐&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>a11y</category>
      <category>webaudio</category>
    </item>
    <item>
      <title>I Replaced My Guitar Tuner With 200 Lines of JavaScript</title>
      <dc:creator>Niki Indjov</dc:creator>
      <pubDate>Fri, 20 Feb 2026 07:14:32 +0000</pubDate>
      <link>https://forem.com/niki_indjov_791e4c9df1/i-replaced-my-guitar-tuner-with-200-lines-of-javascript-4onj</link>
      <guid>https://forem.com/niki_indjov_791e4c9df1/i-replaced-my-guitar-tuner-with-200-lines-of-javascript-4onj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;🎸 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://indjoov.github.io/pitchcraft/" rel="noopener noreferrer"&gt;https://indjoov.github.io/pitchcraft/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
⭐ &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/indjoov/pitchcraft" rel="noopener noreferrer"&gt;https://github.com/indjoov/pitchcraft&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Most guitar tuners on the web are black boxes.&lt;/p&gt;

&lt;p&gt;You don’t know how they work.&lt;br&gt;&lt;br&gt;
You can’t modify them.&lt;br&gt;&lt;br&gt;
And most of them aren’t open source.&lt;/p&gt;

&lt;p&gt;So I built my own.&lt;/p&gt;

&lt;p&gt;It’s called &lt;strong&gt;PitchCraft&lt;/strong&gt; — an open-source chromatic tuner that runs entirely in your browser.&lt;/p&gt;

&lt;p&gt;No backend.&lt;br&gt;&lt;br&gt;
No external tuning libraries.&lt;br&gt;&lt;br&gt;
Just JavaScript and the Web Audio API.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why I Built This
&lt;/h1&gt;

&lt;p&gt;I’m a musician and developer.&lt;/p&gt;

&lt;p&gt;One day I needed a tuner and opened an online one.&lt;/p&gt;

&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;But I kept thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why can’t I see how this works?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I decided to build one myself.&lt;/p&gt;

&lt;p&gt;Completely from scratch.&lt;/p&gt;

&lt;p&gt;Inside the browser.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Crazy Part: Modern Browsers Can Do This
&lt;/h1&gt;

&lt;p&gt;The entire signal chain looks like this:&lt;/p&gt;

&lt;p&gt;Microphone → Frequency Detection → Note Calculation → Visual Feedback&lt;/p&gt;

&lt;p&gt;Using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;getUserMedia&lt;/li&gt;
&lt;li&gt;AnalyserNode&lt;/li&gt;
&lt;li&gt;autocorrelation&lt;/li&gt;
&lt;li&gt;equal temperament math&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No backend required.&lt;/p&gt;

&lt;p&gt;Everything runs locally.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Core: Pitch Detection in JavaScript
&lt;/h1&gt;

&lt;p&gt;PitchCraft uses an &lt;strong&gt;autocorrelation algorithm&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;The signal is compared with delayed copies of itself.&lt;/p&gt;

&lt;p&gt;When the waveform aligns, you’ve found the fundamental frequency.&lt;/p&gt;

&lt;p&gt;From there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frequency → note&lt;/li&gt;
&lt;li&gt;note → cents deviation&lt;/li&gt;
&lt;li&gt;deviation → visual feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in real time.&lt;/p&gt;




&lt;h1&gt;
  
  
  Features
&lt;/h1&gt;

&lt;p&gt;PitchCraft currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guitar&lt;/li&gt;
&lt;li&gt;Bass&lt;/li&gt;
&lt;li&gt;Ukulele&lt;/li&gt;
&lt;li&gt;Violin&lt;/li&gt;
&lt;li&gt;Cello&lt;/li&gt;
&lt;li&gt;Banjo&lt;/li&gt;
&lt;li&gt;Mandolin&lt;/li&gt;
&lt;li&gt;Chromatic mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With adjustable reference tuning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;432 Hz&lt;/li&gt;
&lt;li&gt;435 Hz&lt;/li&gt;
&lt;li&gt;438 Hz&lt;/li&gt;
&lt;li&gt;440 Hz&lt;/li&gt;
&lt;li&gt;442 Hz&lt;/li&gt;
&lt;li&gt;444 Hz&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real-time cents meter&lt;/li&gt;
&lt;li&gt;frequency display&lt;/li&gt;
&lt;li&gt;reference tone playback&lt;/li&gt;
&lt;li&gt;live volume indicator&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Accessibility Matters
&lt;/h1&gt;

&lt;p&gt;Most music tools ignore accessibility.&lt;/p&gt;

&lt;p&gt;PitchCraft includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;high contrast mode&lt;/li&gt;
&lt;li&gt;large text mode&lt;/li&gt;
&lt;li&gt;reduced motion mode&lt;/li&gt;
&lt;li&gt;keyboard navigation&lt;/li&gt;
&lt;li&gt;screen reader support&lt;/li&gt;
&lt;li&gt;semantic HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creative tools should be usable by everyone.&lt;/p&gt;




&lt;h1&gt;
  
  
  Tech Stack
&lt;/h1&gt;

&lt;p&gt;Built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Web Audio API&lt;/li&gt;
&lt;li&gt;pure JavaScript pitch detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No external tuning libraries.&lt;/p&gt;

&lt;p&gt;Everything is open source.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Open Source
&lt;/h1&gt;

&lt;p&gt;I believe creative tools should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transparent&lt;/li&gt;
&lt;li&gt;hackable&lt;/li&gt;
&lt;li&gt;shareable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PitchCraft is MIT licensed.&lt;/p&gt;

&lt;p&gt;You can use it, fork it, and improve it.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Three surprising things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The browser is extremely powerful&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can build real audio tools with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Signal processing is more accessible than expected&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Basic math goes a long way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Open source builds trust&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;People want to see how things work.&lt;/p&gt;




&lt;h1&gt;
  
  
  Try It Yourself
&lt;/h1&gt;

&lt;p&gt;Live demo:&lt;/p&gt;

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

&lt;p&gt;Source code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/indjoov/pitchcraft" rel="noopener noreferrer"&gt;https://github.com/indjoov/pitchcraft&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Feedback Welcome
&lt;/h1&gt;

&lt;p&gt;I’d love feedback from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;developers&lt;/li&gt;
&lt;li&gt;musicians&lt;/li&gt;
&lt;li&gt;accessibility advocates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What would you add?&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thought
&lt;/h1&gt;

&lt;p&gt;The browser is no longer just a document viewer.&lt;/p&gt;

&lt;p&gt;It’s becoming a creative platform.&lt;/p&gt;

&lt;p&gt;PitchCraft is a small example of that shift.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>react</category>
      <category>webaudio</category>
    </item>
  </channel>
</rss>
