Tüm Yazılar
// Web Audio API // FFT // JavaScript // Akoria

Web Audio API ile Gerçek Zamanlı Ses Analizi

5 Mart 2026

Akoria'nın kulak eğitimi modülünde öğrencinin sesini gerçek zamanlı olarak analiz ediyoruz. Bu yazıda Web Audio API'nin nasıl çalıştığını ve FFT ile frekans analizini anlatacağım.

Web Audio API Nedir?

Web Audio API, tarayıcıda ses işleme için güçlü bir JavaScript API'sidir. Ses kaydı, efekt uygulama, frekans analizi gibi işlemleri doğrudan tarayıcıda yapabilirsiniz.

// AudioContext oluştur
const audioContext = new AudioContext();
 
// Mikrofon erişimi
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const source = audioContext.createMediaStreamSource(stream);
 
// Analyser node - FFT analizi için
const analyser = audioContext.createAnalyser();
analyser.fftSize = 4096;
source.connect(analyser);

FFT ile Frekans Tespiti

FFT (Fast Fourier Transform), zaman domain'indeki ses sinyalini frekans domain'ine çevirir. Bu sayede hangi notanın çalındığını tespit edebiliriz.

const bufferLength = analyser.frequencyBinCount;
const dataArray = new Float32Array(bufferLength);
 
function detectPitch() {
  analyser.getFloatFrequencyData(dataArray);
 
  // En yüksek frekansı bul
  let maxIndex = 0;
  let maxValue = -Infinity;
 
  for (let i = 0; i < bufferLength; i++) {
    if (dataArray[i] > maxValue) {
      maxValue = dataArray[i];
      maxIndex = i;
    }
  }
 
  // Frekansı Hz'e çevir
  const frequency = (maxIndex * audioContext.sampleRate) / analyser.fftSize;
  return frequency;
}

Notaya Dönüştürme

Tespit edilen frekansı müzikal notaya dönüştürmek için logaritmik hesaplama kullanıyoruz:

function frequencyToNote(freq) {
  const noteNum = 12 * (Math.log2(freq / 440)) + 69;
  const noteNames = ["C", "C#", "D", "D#", "E", "F",
                     "F#", "G", "G#", "A", "A#", "B"];
  return noteNames[Math.round(noteNum) % 12];
}

Sonuç

Web Audio API, tarayıcıda profesyonel düzeyde ses işleme yapmayı mümkün kılıyor. Akoria'da bu teknolojiyi kullanarak öğrencilerin ses egzersizlerini gerçek zamanlı olarak değerlendiriyoruz.