如何在java中为给定的wave文件构建框架

时间:2014-03-13 19:37:44

标签: java audio wav

我想将音频文件(.wav格式)拆分为32毫秒,每帧采样频率为16毫秒,通道数为1(单声道),pcm信号,样本大小= 93638。我正在使用以下代码来读取我的wave文件,该文件提供了一个存储在data2数组中的数组。可以告诉我如何从这个开始 - :

import java.io.ByteArrayOutputStream;
import java.io.File;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

public class AudioFiles 
{
public static void main(String[] args) 
{
    String file = "D:/p.wav";
    int i;
    AudioFiles afiles = new AudioFiles();
    byte[] data2 = afiles.readWAVAudioFileData(file);
    for(i=0;i<data2.length;i++)
    {
    System.out.format("\t"+data2[i]);

    }
    System.out.printf("\n%d",data2.length);
}

public byte[] readWAVAudioFileData(final String filePath)
{
    byte[] data = null;
    try {
        final ByteArrayOutputStream baout = new ByteArrayOutputStream();
        final AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(filePath));

        AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, baout);
        audioInputStream.close();
        baout.close();
        data = baout.toByteArray();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return data;
}

}

1 个答案:

答案 0 :(得分:0)

在16kHz采样率下,每毫秒将有16个样本。因此,每个32ms帧将是32 * 16 = 512个单声道样本。乘以每个样本的字节数(通常为2或4),这将是每帧的字节数。