Java 另一个WAV文件的WAV文件写入问题

Java 另一个WAV文件的WAV文件写入问题,java,audio,fileoutputstream,random-access,Java,Audio,Fileoutputstream,Random Access,在我的程序中,我必须从视频和音频中删除某些帧,以便删除广告。视频存储在.rgb文件中,音频存储在.wav文件中 这个录像很好用。但是,当我尝试只从一个wav文件向输出wav文件写入几帧时,播放时会出现错误 虽然程序编写正确,我可以在Real Player中播放,但音频会出现一个名为mark/reset的错误,不受支持,当我在代码上运行它时,无法获得位置错误,该代码与教授给出的播放wav文件的代码相同 我找不到书写音频功能中的错误。下面是函数 public void do_audioWrite()

在我的程序中,我必须从视频和音频中删除某些帧,以便删除广告。视频存储在.rgb文件中,音频存储在.wav文件中

这个录像很好用。但是,当我尝试只从一个wav文件向输出wav文件写入几帧时,播放时会出现错误

虽然程序编写正确,我可以在Real Player中播放,但音频会出现一个名为mark/reset的错误,不受支持,当我在代码上运行它时,无法获得位置错误,该代码与教授给出的播放wav文件的代码相同

我找不到书写音频功能中的错误。下面是函数

public void do_audioWrite() throws IOException
{
    long offset=0;
    long offset2=0;
    int audioInfoSize = 2; //audio info is in bytes
    long FRAMESIZE= 352*288*(24/8);
    double MAX_POSSIBLE_FRAMES=AdvRemove.file_len/FRAMESIZE;
    double AUDIO_PER_FRAME = 2000;
    long videoFrames=0;
    byte[] bytes = new byte[4000];
    byte[] head = new byte[44];
    RandomAccessFile raf =  new RandomAccessFile(AdvRemove.afilename,"r");
    OutputStream outputStream = new FileOutputStream(AdvRemove.write_audio);

    raf.seek(0);
    raf.read(head);
    outputStream.write(head);


    for (offset=44; ((offset < raf.length()) && (videoFrames < MAX_POSSIBLE_FRAMES)); offset+=2*AUDIO_PER_FRAME) 
    {

        if(Group1.size()>Group2.size())
        {
            if(Group1.contains((int)videoFrames))
            {

                            raf.seek(offset);
                            raf.read(bytes);
                            outputStream.write(bytes);


            }
        }

        else if(Group1.size()<Group2.size())
        {
            if(Group2.contains((int)videoFrames))
            {
                raf.seek(offset);
                raf.read(bytes);
                outputStream.write(bytes);

            }
        }


        videoFrames++;
    }

}
public void do_audioWrite()引发IOException
{
长偏移=0;
长偏移量2=0;
int audioInfoSize=2;//音频信息以字节为单位
长框架尺寸=352*288*(24/8);
double MAX\u mable\u FRAMES=advrove.file\u len/FRAMESIZE;
每帧双音频=2000;
长视频帧=0;
字节[]字节=新字节[4000];
字节[]头=新字节[44];
RandomAccessFile raf=新的RandomAccessFile(AdvRemove.afilename,“r”);
OutputStream OutputStream=新文件OutputStream(AdvRemove.write\u audio);
raf.seek(0);
雷德(头);
outputStream.write(头);
对于(偏移量=44;((偏移量Group2.size())
{
if(Group1.包含((int)视频帧))
{
raf.搜索(偏移);
读取(字节);
outputStream.write(字节);
}
}

否则,如果(Group1.size(),则需要更新输出文件头,以使其适合您正在创建的新文件

outputStream.write(head);
在这里,您只需复制原始文件头,但在循环中,您似乎并不总是将样本从原始文件复制到剥离文件(即输出文件将比输入文件短)。wav文件格式的头中包含有关文件大小的信息(有关标题的详细信息,请参阅),您需要更新标题以获得新文件的正确数据长度。

Awesome bro.Solved it(y)