日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了讀取WAV文件并計算RMS的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

所以我正在嘗試測試一些分析一些PCM數據量的代碼。我得到了一些奇怪的音量測量數據,這與我從Audity獲得的數據毫無意義。我的尺碼好像到處都是。

我不確定我的錯誤是在讀取WAV數據的方式中出錯,還是在計算音量的方式中出錯。

這里是我以字節形式讀取數據并將其轉換為短碼的地方,因為它是PCM 16位。

        InputStream pcmStream = this.getClass().getClassLoader().getResourceAsStream("Test-16Bit-PCM.wav");
        ArrayList<Byte> bytes = new ArrayList<>();
        int b = pcmStream.read();
        while(b != -1)
        {
            bytes.add((byte)b);
            b = pcmStream.read();
       }

       // First 44 bytes of WAV file are file info, we already know PCM properties since we recorded test audio
        byte [] bytesArray = new byte[bytes.size()-44];
        for(int i = 44; i < bytes.size(); i++)
        {
            bytesArray[i-44] = bytes.get(i);
        }
        bytes = null;
        pcmStream = null;
        short [] pcm = new short[bytesArray.length/2];
        ByteBuffer bb = ByteBuffer.wrap(bytesArray).asShortBuffer().get(pcm);
        bb.order(ByteOrder.LITTLE_ENDIAN);
        bb.asShortBuffer().get(pcm);
        bytesArray = null;

然后short []被直接傳遞到我的分析器,然后我將數據拆分成0.1秒的時間步長,并對每個時間步長的音量進行平均。

這里是我計算均方根和分貝的地方

        double sumOfSamples = 0;
        double numOfSamples = settings.shortsPerTimeStep();
        for(int i = start; i < start+settings.shortsPerTimeStep(); i++)
        {
           sumOfSamples = originalPcm[i]*originalPcm[i];
        }
        double rms = Math.sqrt(sumOfSamples/numOfSamples);
        // Convert to decibels
        calculatedVolume = 20*Math.log10(rms/20);

我正在閱讀的音頻是以44100單聲道錄制的,并在Audacity中保存為WAV16簽名的PCM。不確定我做錯了什么。

任何幫助我們都將不勝感激!謝謝

編輯:發現我讀錯了wav數據。我通過添加末尾小字符順序修復了它。然而,我仍然對如何計算體積感到困惑。數值更好了,但仍然很難破譯,我不確定我的RMS使用什么單位,以及參考值應該使用什么單位。

推薦答案

您的計算中有一個錯誤–sumOfSamples = originalPcm[i]*originalPcm[i];應該是sumOfSamples += originalPcm[i]*originalPcm[i];,因此您將累加值。
至于參考值–為什么要用20?通常,您使用可能的最小值(在本例中為1),也可以使用最大值(SQRT(32768)),所有的值都將低于該值,因此您將得到負的dB值。

這篇關于讀取WAV文件并計算RMS的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:RMS WAV 文件 計算 讀取
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定