Android-开始时剪切音频文件2秒,结束时剪切音频文件1秒

Android-开始时剪切音频文件2秒,结束时剪切音频文件1秒,android,audio,inputstream,Android,Audio,Inputstream,我需要将我的1个音频样本剪切到另一个没有2秒和最后1秒开始数据的音频样本。目前我正在尝试以下代码,但它没有得到正确的削减 标头为44字节,2秒为176400字节,1秒为88200字节 private void copyWaveFileForAlgo(String inFilename, String outFilename) { Log.v("copyWaveFile ", "---------copyWaveFile---------"); FileInput

我需要将我的1个音频样本剪切到另一个没有2秒和最后1秒开始数据的音频样本。目前我正在尝试以下代码,但它没有得到正确的削减

标头为44字节,2秒为176400字节,1秒为88200字节

 private void copyWaveFileForAlgo(String inFilename, String outFilename) {
        Log.v("copyWaveFile ", "---------copyWaveFile---------");
        FileInputStream in = null;
        FileOutputStream out = null;
        long totalAudioLen = 0;
        long totalDataLen = totalAudioLen + 36;
        long longSampleRate = RECORDER_SAMPLERATE;
        int channels = 1;
        long byteRate = RECORDER_BPP * RECORDER_SAMPLERATE * channels / 8;

       byte[] tmpdata = new byte[88200];
    try {
        in = new FileInputStream(inFilename);
        out = new FileOutputStream(outFilename);
        totalAudioLen = in.getChannel().size();
        totalDataLen = totalAudioLen + 36;



        int lenth = 0;
        Log.v("data ", "----totalDataLen-----"+totalDataLen+"---------"+tmpdata.length);
        long dataToCopy = totalDataLen - 88200;
        long dataLenthTransfered = 0;
        WriteWaveFileHeader(out, totalAudioLen, totalDataLen, longSampleRate, channels, byteRate);
         long skippedB = 0;
          lenth = in.read(tmpdata);

             while (lenth != -1)
            {

                if (skippedB <176400)
                {
                    skippedB+= in.skip(88200);
                 Log.v("skippedB ", "----skippedB-----"+skippedB+"---------");
                }else
                {
                    if(dataLenthTransfered < dataToCopy)
                    {Log.v("dataLenth ", "----elseee-----"+dataLenthTransfered+"-----dataToCopy----"+dataToCopy);
                     out.write(tmpdata);

                    }
                    else
                    {
                    Log.v("dataLenthTransfered ", "----dataLenthTransfered-----"+dataLenthTransfered+"----dataToCopy-----"+dataToCopy);
                    }

                }
                dataLenthTransfered+=lenth;
                  lenth = in.read(tmpdata);
            }
in.close();
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}`
private void copyWaveFileForAlgo(字符串填充名、字符串输出名){
Log.v(“copyWaveFile”,“copyWaveFile------------”;
FileInputStream in=null;
FileOutputStream out=null;
长总听力=0;
long totalDataLen=totalAudioLen+36;
long longSampleRate=记录仪和采样器;
int通道=1;
long byteRate=记录器\ BPP*记录器\采样器*通道/8;
字节[]tmpdata=新字节[88200];
试一试{
in=新文件输入流(inFilename);
out=新文件输出流(outFilename);
totalAudioLen=in.getChannel().size();
totalDataLen=totalAudioLen+36;
int lenth=0;
Log.v(“数据”、“----totalDataLen----------”+totalDataLen+“-----------”+tmpdata.length);
long dataToCopy=totalDataLen-88200;
long dataLenthTransfered=0;
WriteWaveFileHeader(out、totalAudioLen、totalDataLen、longSampleRate、Channel、byteRate);
长跳跃b=0;
长度=英寸读取(tmpdata);
而(长度!=-1)
{

如果(跳过)请确切说明你所说的“它没有被正确切割”是什么意思。而不是从一开始就多切割2秒。&在标题上提及时无法获得总长度。当你跳过数据时,你也在调用
read
。要么跳过,要么读取;不要两者兼而有之。谢谢@michael。。我会尝试一下