簡體   English   中英

如何在Java中讀取壓縮的.wav音頻文件?

[英]How to read compressed .wav audio files in Java?

我想讀取從22050Hz降頻到8000Hz的音頻文件。 對於22050Hz,緩沖區大小為512。 是否有解決此問題的方法或任何其他方法來讀取Java中經過降采樣的.wav文件?

讀取音頻文件的方法是使用http://www.labbookpages.co.uk/audio/javaWavFiles.html中的ReadExample類實現的,該類對於22050Hz原始音頻正常工作。
當我使用Python的librosa對音頻進行降采樣並以8000Hz的頻率寫入文件時,使用ReadExample方法讀取該文件時,它拋出了異常-

Error :WavFileException: Compression Code 3 not supported WavFileException: Compression Code 3 not supported

Process finished with exit code -1


代碼是-

import java.io.*;

public class ReadExample
{
   public static void main(String[] args)
   {
      try
      {

         WavFile wavFile = WavFile.openWavFile(new File(args[0]); //22050Hz filepath

         wavFile.display();
         int numChannels = wavFile.getNumChannels(); //numChannels = 1

         double[] buffer = new double[512 * numChannels];

         int framesRead;
         double min = Double.MAX_VALUE;
         double max = Double.MIN_VALUE;

         do
         {

            framesRead = wavFile.readFrames(buffer, 512);

            for (int s=0 ; s<framesRead * numChannels ; s++)
            {
               if (buffer[s] > max) max = buffer[s];
               if (buffer[s] < min) min = buffer[s];
            }
         }
         while (framesRead != 0);
         wavFile.close();
         System.out.printf("Min: %f, Max: %f\n", min, max);
      }
      catch (Exception e)
      {
         System.err.println(e);
      }
    }
}

預期結果是照常獲取緩沖區中的值。

問題是您可能沒有使用Java對音頻進行下采樣。

使用Java下采樣.wav,然后檢查其工作情況。 基於Java的下采樣的很好參考,

要么

使用第三方庫重新采樣.wav並進行測試。 使用第三方庫進行重新采樣的參考

暫無
暫無

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

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