簡體   English   中英

如何在javascript中獲取頻率值?

[英]how to get frequency value in javascript?

我是一名意大利學生,我正在使用 p5 的庫來創建一個網絡吉他調音器。 我想知道是否有辦法獲得麥克風輸入的頻率。

庫鏈接: https : //p5js.org/reference/#/libraries/p5.sound

接受不同庫的不同解決方案

謝謝

此示例的基礎上,如果您使用 P5.sound 的 FFT 對象,則可以調用fft.analyze()來獲取分成不同頻率區間的振幅數組。

默認值為 1024 個 bin。 這些 bin 從 0Hz 到奈奎斯特頻率均勻分布,這是音頻采樣率的一半。 (默認采樣率為 44100Hz,因此默認奈奎斯特頻率為 22050Hz)。

另請注意,每個 bin 的默認分辨率為 22050Hz / 1024 bins ≈ 21.53Hz/bin。 如果您使用 P5.sound(假設您的計算機設置與我的相同),您將獲得最多 21.53Hz 的精度。

因此, bin 0(或spectrum[0] )包含頻率 ~ 0 - 21.5Hz 處的振幅,bin 1( spectrum[1] )包含頻率 ~ 21.5Hz - 43.0Hz 處的振幅,等等。

這意味着任何給定 bin 的頻率為: freq = binIndex * (nyquist / numberOfBins)

如果這對您來說足夠好,您可以遍歷fft.analyze()返回的數組,找到峰值的索引,然后使用 Nyquist 與數組長度(bin)的比率將該索引轉換回頻率。

function getLoudestFrequency() {
    var nyquist = sampleRate() / 2; // 22050
    var spectrum = fft.analyze(); // array of amplitudes in bins
    var numberOfBins = spectrum.length;
    var maxAmp = 0;
    var largestBin;

    for (var i = 0; i < numberOfBins; i++) {
        var thisAmp = spectrum[i]; // amplitude of current bin
        if (thisAmp > maxAmp) {
            maxAmp = thisAmp;
            largestBin = i;
        }
    }

    var loudestFreq = largestBin * (nyquist / numberOfBins);
    return loudestFreq;
}

假設 ±21.53Hz 對您來說不夠准確。 嗯……你可以用更多的 bin 來初始化你的 FFT 對象: new p5.FFT(0.8,[bins]) 文檔說bin 的最大數量是 1024,但我只是嘗試了 8192(分辨率為 2.69Hz),它對我來說似乎很好用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM