首页 > 解决方案 > 如何在 Java 中读取压缩的 .wav 音频文件?

问题描述

我想读取从 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);
      }
    }
}

预期的结果是像往常一样在缓冲区中获取值。

标签: javaaudiosignal-processingbufferedreaderwav

解决方案


问题可能是您没有使用 java 对音频进行下采样。
任何一个

使用 java 对 .wav 进行下采样,然后检查其工作情况。基于 Java 的下采样的良好参考和 这个

或者

使用第三方库重新采样 .wav 并进行测试。使用第三方库重新采样的参考


推荐阅读