मैं एक विश्लेषक नोड का उपयोग करके दो ध्वनि के बीच अंतर को मापने और ByteFrequencyData() प्राप्त करने का प्रयास कर रहा हूं। मैंने सोचा कि प्रत्येक आवृत्ति बिन में अंतर को जोड़कर मैं एक ही संख्या के साथ आ सकता हूं कि यह दर्शाता है कि दो आवाज़ें कितनी अलग थीं। फिर मैं आवाजों को बदलने और संख्याओं को फिर से मापने में सक्षम होगा ताकि यह देखने के लिए कि नई आवाज पहले से कम या कम थी।वेब ऑडियो एपीआई का उपयोग करके दो ध्वनियों के बीच अंतर को कैसे मापते हैं?
क्या GetFyteFrequencyData() पूरी तरह से ध्वनि के प्रतिनिधित्व को शामिल करता है या मुझे ध्वनि को अर्हता प्राप्त करने के लिए डेटा के अन्य टुकड़ों को शामिल करने की आवश्यकता है?
var Spectrogram = (function(){
function Spectrogram(ctx) {
this.analyser = ctx.createAnalyser();
this.analyser.fftSize = 2048;
this.sampleRate = 512;
this.scriptNode = ctx.createScriptProcessor(this.sampleRate, 1, 1);
this.scriptNode.onaudioprocess = this.process.bind(this);
this.analyser.connect(this.scriptNode);
this.startNode = this.analyser;
this.endNode = this.scriptNode;
this.data = [];
}
Spectrogram.prototype.process = function(e) {
var d = new Uint8Array(this.analyser.frequencyBinCount);
this.analyser.getByteFrequencyData(d);
this.data.push(d);
var inputBuffer = e.inputBuffer;
var outputBuffer = e.outputBuffer;
for(var channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
var inputData = inputBuffer.getChannelData(channel);
var outputData = outputBuffer.getChannelData(channel);
for(var sample = 0; sample < inputBuffer.length; sample++) {
outputData[sample] = inputData[sample];
}
}
};
Spectrogram.prototype.compare = function(other) {
var fitness = 0;
for(var i=0; i<this.data.length; i++) {
if(other.data[i]) {
for(var k=0; k<this.data[i].length; k++) {
fitness += Math.abs(this.data[i][k] - other.data[i][k]);
}
}
}
return fitness;
}
return Spectrogram;
})();
आपको विचार करना होगा कि ध्वनि के लिए अलग-अलग होने का क्या अर्थ है। निश्चित रूप से 'getByteFrequencyData' किसी भी तरह से ध्वनि का प्रतिनिधित्व करता है, लेकिन मुझे नहीं पता कि यह कैप्चर करता है कि आप क्या चाहते हैं। विचार करें कि आपके पास आवाज है या नहीं। अब 2 के कारक द्वारा आयाम को कम करें। क्या आवाज़ें समान हैं? क्या उन्हें एक ही आवाज माना जाना चाहिए? इससे पहले कि आप आपको बताने के लिए एल्गोरिदम के साथ आ सकें, आपको "समान" होने का अर्थ परिभाषित करने की आवश्यकता है। –
मुझे लगता है कि ध्वनि के समान होने के लिए वे एक मानव कान के समान ध्वनि करेंगे। तो आयाम समीकरण का एक हिस्सा होगा। विश्लेषक नोड्स पर भी ByteTimeDomainData() प्राप्त होता है जो वर्णन "वर्तमान समय-डोमेन या तरंग" है जो आयाम को शामिल करेगा? – zorqy
हां, इसमें आयाम जानकारी शामिल होगी। लेकिन आप शायद 'getByteTimeDomainData'' के बजाय 'getFloatTimeDomainData' का उपयोग करना चाहते हैं। –