Proje defteri / 2026
BPM Finder
Tarayıcıda WebAssembly ve Essentia.js müzik bilgi erişimi motoruyla ses sinyallerinden tempo (BPM) çıkaran yüksek hassasiyetli ses analiz aracı.
Proje Tanımı ve Çalışma Prensibi
BPM Finder, müzik parçalarının ve ses kayıtlarının temposunu (BPM - Beats Per Minute) doğrudan web tarayıcısı üzerinde hesaplayan bir ses analiz uygulamasıdır.
Sunucuya herhangi bir ses dosyası yüklenmez. Tüm sinyal işleme, tarayıcıda çalışan WebAssembly derlemesi Essentia.js motoru ve WebAudio API üzerinden tamamen istemci tarafında gerçekleşir.

WebAssembly Tabanlı Ses Analizi Kodu
Uygulamanın çekirdek motoru, müzik bilgi erişimi (Music Information Retrieval) kütüphanesi olan Essentia'nın WebAssembly sürümünü kullanır.
Aşağıdaki kod parçası, projenin App.jsx dosyasında yer alan WebAssembly motorunun başlatılması ve analiz döngüsünü göstermektedir:
import React, { useState, useEffect } from 'react';
import Essentia from 'essentia.js/dist/essentia.js-core.es.js';
import { EssentiaWASM } from 'essentia.js/dist/essentia-wasm.es.js';
let essentia = null;
function App() {
const [bpm, setBpm] = useState(null);
const [loading, setLoading] = useState(false);
const [essentiaReady, setEssentiaReady] = useState(false);
useEffect(() => {
const initEssentia = async () => {
try {
if (typeof EssentiaWASM === 'undefined') {
setTimeout(initEssentia, 500);
return;
}
essentia = new Essentia(EssentiaWASM);
setEssentiaReady(true);
} catch (e) {
console.error("Essentia başlatma hatası:", e);
}
};
initEssentia();
}, []);
const analyzeAudio = async (audioBuffer) => {
if (!essentia || !essentiaReady) return;
setLoading(true);
const channelData = audioBuffer.getChannelData(0);
const audioVector = essentia.arrayToVector(channelData);
// RhythmExtractors algoritması ile tempo ve vuruş analizi
const rhythm = essentia.RhythmExtractor2013(audioVector);
setBpm(Math.round(rhythm.bpm));
setLoading(false);
};
}Teknik Kazanımlar
- Gizlilik Odaklı Mimari: Ses verisi istemci cihazından asla dışarı çıkmaz, sunucu bant genişliği tüketilmez.
- Çapraz Format Desteği: WebAudio DecodeAudioData motoru sayesinde WAV, MP3, OGG ve FLAC dosyaları sorunsuz işlenir.
- Milisaniye Dönüşümü: Müzik prodüksiyonu yapan kullanıcılar için tempo bilgisi doğrudan 1/4, 1/8 ve 1/16 nota gecikme sürelerine (reverb/delay timing) çevrilir.