द्वारा GetByteFrequencyData से ऑडियो डेटा को सामान्यीकृत करें मैंने वेब ऑडियो एपीआई के विश्लेषक नोड पर getByteFrequencyData
विधि का उपयोग करके getSpectrum
विधि बनाई है। ऑडियो डेटा की सरणी (या तो एक एल, या ऑडियो() उदाहरण) volume
से संबंधित है, 0 से 1.वॉल्यूम
ऑडियो स्रोत की मात्रा का उपयोग करके मैं प्राप्त प्रत्येक मान को सामान्य करने की कोशिश कर रहा हूं GetByteFrequencyData से ताकि प्राप्त स्पेक्ट्रम के उपयोगकर्ता को ऑडियो डेटा को विज़ुअलाइज़ करने पर वॉल्यूम के बारे में चिंता न करें।
यह getSpectrum
var audioData = new Uint8Array(analyser.binCount);
var spectrum = [];
analyser.getByteFrequencyData(audioData);
for (var i = 0; i < audioData.length; i++) {
var value = audioData[i];
//Where I'm trying to calculate the value independent of volume
value = ((value/audioEl.volume)/255);
spectrum.push(value);
}
return spectrum;
W3C spec संदर्भ एक maxDecibels और minDecibels दिया लौटे मूल्य की गणना करने के लिए इस्तेमाल समीकरण के संस्करण नीचे धारीदार है। मेरी प्राथमिक समझ के साथ, मैंने गणित को उलटा करने की कोशिश की है, इसलिए मुझे सामान्यीकृत मूल्य मिलता है, लेकिन मैं इसे ठीक से काम नहीं कर रहा हूं। मुझे इसे 0 से 1 तक 0 वॉल्यूम वैल्यू के साथ पूरा करने में परेशानी हो रही है।
किसी भी उत्तेजना की बहुत सराहना की जाएगी! इस मुद्दे के working example है। वॉल्यूम स्लाइडर को बदलना समस्या को चित्रित करेगा।
अपडेट 7/22/16: @ रेमंड-खिलौने के जवाब के लिए धन्यवाद, मैंने यह पता लगाया कि 0 से 1 वॉल्यूम वैल्यू को डेसिबल में कैसे परिवर्तित किया जाए।
volumeDB = Math.abs((Math.log(volume)/Math.LN10)*20);
डीबी मिलने के बाद, मैं W3C कल्पना में समीकरण उल्टा,
value = ((audioDataValue * volumeDB)/255) - volumeDB
दुर्भाग्य से, value
किसी भी तरह अभी भी volume
के सापेक्ष समाप्त होता है। क्या कोई देखता है कि मैं क्या खो रहा हूं?
आप इस समस्या को हल मिल सकता है करने के लिए 0 से एक नाव हो रही समाप्त हो गया। destination'। फिर आपके पास एक वॉल्यूम स्लाइडर होगा जो ऑडियो की मात्रा के बजाय GainNode को समायोजित करेगा। इस तरह वॉल्यूम आपके 'एनालिसर' से गुज़रने के बाद ही समायोजित हो जाता है। – idbehold
जो मैं काम कर रहा हूं, उसके लिए मुझे वॉल्यूम सेट करने का नियंत्रण नहीं होगा, इसलिए मैं जो कुछ भी हो, उसके सामने एक गेनोडोड नहीं डाल पाऊंगा। यह एक अच्छा विचार था। इसे अन्य परियोजनाओं के लिए विचार करेंगे –