Oh MyUtils

मेट्रोनोम - टैप टेम्पो BPM डिटेक्टर और क्लिक ट्रैक ऑनलाइन

संगीत के साथ टैप करके BPM का पता लगाएं, समायोज्य टेम्पो, ताल चिह्न, उपविभाजन और दृश्य बीट संकेतक के साथ सटीक क्लिक ट्रैक चलाएं — Web Audio API का उपयोग करते हुए 100% क्लाइंट-साइड।

अपने कानों की रक्षा करें। कम वॉल्यूम स्तर से शुरू करें।

शुरू करने के लिए टैप करें...

100% क्लाइंट-साइड — सभी ऑडियो आपके ब्राउज़र में उत्पन्न होता है, सर्वर को कोई डेटा नहीं भेजा जाता

अक्सर पूछे जाने वाले प्रश्न

मेट्रोनोम क्या है और इसका उपयोग किसके लिए किया जाता है?

मेट्रोनोम एक उपकरण या टूल है जो बीट्स प्रति मिनट (BPM) में मापे गए कॉन्फ़िगर करने योग्य टेम्पो पर स्थिर क्लिक या बीट्स उत्पन्न करता है। संगीतकार मेट्रोनोम का उपयोग लगातार समय विकसित करने, विशिष्ट टेम्पो पर अभ्यास करने और लयबद्ध सटीकता बनाए रखते हुए धीरे-धीरे गति बढ़ाने के लिए करते हैं। इस ऑनलाइन मेट्रोनोम में एक टैप टेम्पो सुविधा भी शामिल है जो आपको बीट के साथ टैप करके किसी भी गाने का BPM पता लगाने देती है।

टैप टेम्पो सुविधा का उपयोग कैसे करें?

आप जो संगीत सुन रहे हैं उसकी लय के साथ बड़े TAP बटन को बार-बार टैप करें। 2 या अधिक टैप के बाद, टूल आपके टैप के बीच औसत अंतराल की गणना करता है और पता लगाए गए BPM को प्रदर्शित करता है। सर्वोत्तम सटीकता के लिए, किक ड्रम या मुख्य पल्स का अनुसरण करते हुए 4-8 बीट्स तक टैप करें। स्थिरता संकेतक दिखाता है कि आपकी टैपिंग कितनी सुसंगत है। एक बार BPM रीडिंग मिलने पर, अभ्यास के लिए इसे सीधे मेट्रोनोम में स्थानांतरित करने के लिए Use this BPM पर क्लिक करें।

मेट्रोनोम क्लिक ट्रैक का उपयोग कैसे करें?

मेट्रोनोम टैब पर स्विच करें, स्लाइडर या संख्यात्मक इनपुट का उपयोग करके अपना वांछित BPM सेट करें, एक ताल चिह्न चुनें (जैसे, सामान्य समय के लिए 4/4), और प्ले दबाएं। मेट्रोनोम बीट 1 पर एक्सेंटेड डाउनबीट के साथ श्रव्य क्लिक उत्पन्न करता है। माप के भीतर वर्तमान स्थिति देखने के लिए विज़ुअल बीट इंडिकेटर देखें। अपनी अभ्यास आवश्यकताओं के अनुसार वॉल्यूम, उपविभाजन और क्लिक ध्वनि समायोजित करें।

क्या मेरा डेटा सर्वर पर भेजा जाता है?

नहीं। यह टूल 100% क्लाइंट-साइड है और आपके ब्राउज़र में निर्मित Web Audio API का उपयोग करता है। सभी ऑडियो संश्लेषण, टेम्पो पहचान और बीट शेड्यूलिंग पूरी तरह से आपके डिवाइस पर होती है। कोई भी ऑडियो डेटा, BPM रीडिंग या सेटिंग्स कभी भी सर्वर पर प्रेषित नहीं की जाती हैं। प्रारंभिक पेज लोड के बाद टूल पूरी तरह से ऑफ़लाइन काम करता है।

सटीक समय क्यों महत्वपूर्ण है और यह मेट्रोनोम इसे कैसे प्राप्त करता है?

संगीत अभ्यास के लिए कुछ मिलीसेकंड के भीतर समय की सटीकता आवश्यक है। JavaScript के बिल्ट-इन setTimeout/setInterval अपने आप में पर्याप्त सटीक नहीं हैं क्योंकि मुख्य थ्रेड अन्य कार्यों द्वारा विलंबित हो सकता है। यह मेट्रोनोम उद्योग-मानक लुकअहेड शेड्यूलर पैटर्न का उपयोग करता है: एक setInterval टाइमर बार-बार फायर होता है और Web Audio API के उच्च-रिज़ॉल्यूशन AudioContext.currentTime क्लॉक का उपयोग करके समय से पहले ऑडियो इवेंट शेड्यूल करता है। यह लंबी अभ्यास सत्रों में भी बिना किसी ड्रिफ्ट के 1-2 मिलीसेकंड के भीतर सटीक क्लिक सुनिश्चित करता है।

ताल चिह्न क्या हैं और कौन से समर्थित हैं?

ताल चिह्न बताता है कि प्रत्येक माप में कितने बीट हैं और कौन सा नोट मान एक बीट प्राप्त करता है। यह टूल समर्थन करता है: 4/4 (सामान्य समय, अधिकांश पॉप/रॉक में उपयोग), 3/4 (वॉल्ट्ज़), 2/4 (मार्च), 6/8 (संयुक्त दोहरा, जिग्स में सामान्य), 5/4 (अनियमित, जैसे Take Five में), और 7/8 (अनियमित, बाल्कन संगीत में सामान्य)। प्रत्येक ताल चिह्न में लयबद्ध संरचना को महसूस करने में मदद के लिए उपयुक्त एक्सेंट पैटर्न हैं।

उपविभाजनों के बीच क्या अंतर है?

उपविभाजन प्रत्येक मुख्य बीट को अधिक विस्तृत लयबद्ध अभ्यास के लिए छोटी इकाइयों में विभाजित करते हैं। 'कोई नहीं' केवल चौथाई नोट बीट बजाता है। '8वीं नोट्स' प्रत्येक बीट के बीच एक क्लिक जोड़ता है (प्रति बीट 2)। 'त्रिक' प्रत्येक बीट को 3 बराबर भागों में विभाजित करता है। '16वीं नोट्स' प्रत्येक बीट को 4 बराबर भागों में विभाजित करता है। उपविभाजन क्लिक पल्स पदानुक्रम बनाए रखने के लिए मुख्य बीट्स से शांत होते हैं।

कोड उदाहरण

// Web Audio API Metronome with Lookahead Scheduler

class Metronome {
  constructor(bpm = 120, beatsPerMeasure = 4) {
    this.bpm = bpm;
    this.beatsPerMeasure = beatsPerMeasure;
    this.isPlaying = false;
    this.currentBeat = 0;
    this.nextNoteTime = 0;
    this.timerID = null;
    this.audioContext = null;
  }

  start() {
    if (this.isPlaying) return;
    this.audioContext = new AudioContext();
    this.isPlaying = true;
    this.currentBeat = 0;
    this.nextNoteTime = this.audioContext.currentTime;
    this.timerID = setInterval(() => this._scheduler(), 25);
  }

  stop() {
    this.isPlaying = false;
    if (this.timerID) clearInterval(this.timerID);
    if (this.audioContext) this.audioContext.close();
  }

  _scheduler() {
    while (this.nextNoteTime < this.audioContext.currentTime + 0.1) {
      this._playClick(this.nextNoteTime, this.currentBeat === 0);
      this.nextNoteTime += 60.0 / this.bpm;
      this.currentBeat = (this.currentBeat + 1) % this.beatsPerMeasure;
    }
  }

  _playClick(time, isAccent) {
    const osc = this.audioContext.createOscillator();
    const gain = this.audioContext.createGain();
    osc.frequency.value = isAccent ? 1000 : 800;
    gain.gain.setValueAtTime(isAccent ? 1.0 : 0.7, time);
    gain.gain.exponentialRampToValueAtTime(0.001, time + 0.03);
    osc.connect(gain);
    gain.connect(this.audioContext.destination);
    osc.start(time);
    osc.stop(time + 0.03);
  }
}

// Tap Tempo Detector
function createTapDetector(maxTaps = 8, resetMs = 2000) {
  const taps = [];
  let resetTimer = null;

  return {
    tap() {
      const now = performance.now();
      if (resetTimer) clearTimeout(resetTimer);
      resetTimer = setTimeout(() => { taps.length = 0; }, resetMs);

      taps.push(now);
      if (taps.length > maxTaps) taps.shift();
      if (taps.length < 2) return null;

      const intervals = [];
      for (let i = 1; i < taps.length; i++) {
        intervals.push(taps[i] - taps[i - 1]);
      }
      const avg = intervals.reduce((a, b) => a + b) / intervals.length;
      return Math.round(60000 / avg);
    },
    reset() {
      taps.length = 0;
    },
  };
}

// Usage
const metronome = new Metronome(120, 4);
metronome.start();
setTimeout(() => metronome.stop(), 5000);

संबंधित उपकरण