<?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: Swaram</title>
    <description>The latest articles on DEV Community by Swaram (@swaram).</description>
    <link>https://dev.to/swaram</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%2F3840090%2F2d32bbb0-d8dd-4604-9354-8397432ccc3d.png</url>
      <title>DEV Community: Swaram</title>
      <link>https://dev.to/swaram</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/swaram"/>
    <language>en</language>
    <item>
      <title>Would love feedback on the chord detection accuracy!</title>
      <dc:creator>Swaram</dc:creator>
      <pubDate>Mon, 23 Mar 2026 12:43:40 +0000</pubDate>
      <link>https://dev.to/swaram/would-love-feedback-on-the-chord-detection-accuracy-27o8</link>
      <guid>https://dev.to/swaram/would-love-feedback-on-the-chord-detection-accuracy-27o8</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/swaram/i-built-a-free-ai-chord-finder-with-zero-npm-dependencies-3n1f" class="crayons-story__hidden-navigation-link"&gt;I built a free AI chord finder with zero npm dependencies&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/swaram" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3840090%2F2d32bbb0-d8dd-4604-9354-8397432ccc3d.png" alt="swaram profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/swaram" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Swaram
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Swaram
                
              
              &lt;div id="story-author-preview-content-3389086" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/swaram" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3840090%2F2d32bbb0-d8dd-4604-9354-8397432ccc3d.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Swaram&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/swaram/i-built-a-free-ai-chord-finder-with-zero-npm-dependencies-3n1f" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/swaram/i-built-a-free-ai-chord-finder-with-zero-npm-dependencies-3n1f" id="article-link-3389086"&gt;
          I built a free AI chord finder with zero npm dependencies
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/swaram/i-built-a-free-ai-chord-finder-with-zero-npm-dependencies-3n1f" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/swaram/i-built-a-free-ai-chord-finder-with-zero-npm-dependencies-3n1f#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>ai</category>
      <category>python</category>
    </item>
    <item>
      <title>I built a free AI chord finder with zero npm dependencies</title>
      <dc:creator>Swaram</dc:creator>
      <pubDate>Mon, 23 Mar 2026 12:40:06 +0000</pubDate>
      <link>https://dev.to/swaram/i-built-a-free-ai-chord-finder-with-zero-npm-dependencies-3n1f</link>
      <guid>https://dev.to/swaram/i-built-a-free-ai-chord-finder-with-zero-npm-dependencies-3n1f</guid>
      <description>&lt;p&gt;I built &lt;strong&gt;Swaram&lt;/strong&gt;, a free AI-powered chord finder. Upload any audio file and get the chord progression, key, and time signature detected automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://ecoliving-tips.github.io/chord-finder.html" rel="noopener noreferrer"&gt;https://ecoliving-tips.github.io/chord-finder.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I play guitar at my church in Kerala, India. Finding chords for Malayalam Christian songs is nearly impossible online. Paid chord finder subscriptions like Chordify Premium felt wrong for something that should be free.&lt;/p&gt;

&lt;p&gt;So I built my own — and made it work for any song, any genre, any language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Vanilla HTML/CSS/JS — literally zero npm dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Python (FastAPI + librosa) on Hugging Face Spaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting&lt;/strong&gt;: GitHub Pages (free)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt;: Custom 300-line Node.js static site generator (no webpack, no bundler)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PWA&lt;/strong&gt;: Full offline support with service worker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;i18n&lt;/strong&gt;: English + Malayalam&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No React. No Next.js. No Tailwind. Just plain HTML and CSS variables for theming.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the AI chord detection works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Audio is resampled to 16kHz mono&lt;/li&gt;
&lt;li&gt;HPSS (Harmonic-Percussive Source Separation) isolates tonal content&lt;/li&gt;
&lt;li&gt;Chroma CQT features extract the 12-note harmonic profile per frame&lt;/li&gt;
&lt;li&gt;Template matching scores each frame against 48 chord templates&lt;/li&gt;
&lt;li&gt;Viterbi decoding smooths the raw chord sequence into musically coherent progressions&lt;/li&gt;
&lt;li&gt;Post-Viterbi key refinement detects whether the song is in a major or minor key&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hardest problem? Distinguishing minor keys from their relative major (e.g., C minor vs E-flat major). I'm using a scoring system that weighs dominant V7 presence, tonic resolution in the first/last chords, and diatonic chord membership.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You don't need a framework&lt;/strong&gt; for most websites. Vanilla JS is fast, debuggable, and has zero build overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hugging Face Spaces&lt;/strong&gt; is incredible for deploying ML models for free. Git push and you have a live API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chord detection is HARD&lt;/strong&gt;. Music theory has so many edge cases — slash chords, split bars in 3/4 time, enharmonic spellings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Pages + a custom build script&lt;/strong&gt; is an underrated hosting combo. Zero cost, instant deploys.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it out
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live&lt;/strong&gt;: &lt;a href="https://ecoliving-tips.github.io/chord-finder.html" rel="noopener noreferrer"&gt;https://ecoliving-tips.github.io/chord-finder.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://github.com/AncyJohn/ecoliving-tips.github.io" rel="noopener noreferrer"&gt;https://github.com/AncyJohn/ecoliving-tips.github.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upload an MP3 of any song and tell me how accurate the chords are. I'm actively improving the detection algorithm and would love real-world test cases.&lt;/p&gt;

&lt;p&gt;What songs should I test it with? Drop suggestions in the comments!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>ai</category>
      <category>python</category>
    </item>
  </channel>
</rss>
