简体   繁体   English

如何在Java中对给定的wave文件进行取景

[英]how to do framing for a given wave file in java

i want to split my audio file(.wav format) in frames of 32 milliseconds each sampling frequn-16khz,number of channels-1(mono),pcm signal, sample size=93638. 我想将我的音频文件(.wav格式)分割为32毫秒的帧,每个采样频率为16khz,通道数为1(单声道),pcm信号,样本大小= 93638。 I am using the following code for reading my wave file which give an array which is stored in data2 array.Can some one tell me how to proceed from this -: 我正在使用以下代码读取我的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;
}

} }

At 16kHz sample rate you'll have 16 samples per millisecond. 以16kHz的采样率,每毫秒将有16个采样。 Therefore, each 32ms frame would be 32*16=512 mono samples. 因此,每个32ms帧将是32 * 16 = 512个单采样。 Multiply by the number of bytes-per-sample (typically 2 or 4) and that will be the number of bytes per frame. 乘以每个样本的字节数(通常为2或4),即每帧的字节数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM