Java 如何从wav文件中获取PCM数据?

Java 如何从wav文件中获取PCM数据?,java,wav,javasound,pcm,Java,Wav,Javasound,Pcm,我有一个.wav文件。我想从声音文件中获取PCM数据,这样我就可以从声音中获取单个数据块并对其进行处理 但我不知道怎么做。有人能告诉我怎么做吗? 到目前为止,我已经做到了: public class test { static int frameSample; static int timeofFrame; static int N; static int runTimes; static int bps; static int channels

我有一个
.wav
文件。我想从声音文件中获取PCM数据,这样我就可以从声音中获取单个数据块并对其进行处理

但我不知道怎么做。有人能告诉我怎么做吗? 到目前为止,我已经做到了:

public class test
{

    static int frameSample;
    static int timeofFrame;
    static int N;
    static int runTimes;
    static int bps;
    static int channels;
    static double times;
    static int bufSize;
    static int frameSize;
    static int frameRate;
    static long length;

    public static void main(String[] args)
    {
        try
        {
            AudioInputStream ais = AudioSystem.getAudioInputStream(new File("music/audio.wav"));
            AudioInputStream a;
            int numBytes = ais.available();
            System.out.println("numbytes: "+numBytes);
            byte[] buffer = new byte[numBytes];
            byte[] buffer1=new byte[numBytes] ;
            int k=0;
            int count=0;
            while(count!=-1){
                count=ais.read(buffer, 0, numBytes);
            }
            long value = 0;

            for (int i = 0; i < buffer.length; i++)
            {
               value = ((long) buffer[i] & 0xffL) << (8 * i);
               System.out.println("value: "+value);
            }
        } catch(Exception e) {

        }
    }
}
公共类测试
{
静态int帧样本;
帧的静态int时间;
静态int N;
静态int运行时;
静态int-bps;
静态int通道;
静态倍频;
静态int bufSize;
静态整数帧大小;
静态整数帧率;
静长;
公共静态void main(字符串[]args)
{
尝试
{
AudioInputStream ais=AudioSystem.getAudioInputStream(新文件(“music/audio.wav”);
音频输入流a;
int numBytes=ais.available();
System.out.println(“numbytes:+numbytes”);
字节[]缓冲区=新字节[numBytes];
byte[]buffer1=新字节[numBytes];
int k=0;
整数计数=0;
而(计数!=-1){
计数=ais.read(缓冲区,0,numBytes);
}
长值=0;
for(int i=0;i
  • 使用
    AudioSystem
    从文件中获取
    AudioInputStream
  • 查询流中的
    AudioFormat
  • 创建符合格式的
    字节[]
    。例如,8位单声道是
    字节[1]
    。16位立体声是
    字节[4]
  • 字节[]
    的块读取流,它将一帧一帧地包含声音
  • 继续进行进一步处理

你想用Java还是J来做这件事?在你提出问题之前,我从来没有听说过“J”,我怀疑你是指Java。对不起,我不是指J。我想用Java来做。再次抱歉。我到目前为止已经做过了。这是正确的吗?我想从字节中收集整数值。代码与问题有关。请使用一致的逻辑缩进对于代码块。请注意,帧是“单独的数据块”,因此您的问题已得到回答。您应该单独询问如何将帧转换为整数(单声道)或整数对(立体声)。您能告诉我如何将标题与wav分开吗?请告诉我。从
AudioInputStream
读取的字节是纯声音数据,不需要忽略任何一个。但是,当您忽略有关代码格式等的建议时,我为什么要继续尝试提供帮助呢。?