从另一个wav文件写入WAV文件的问题

问题描述:

在我的程序中,我必须从视频和音频中移除某些帧,以便删除广告。视频存储在.rgb文件中,音频存储在.wav文件中。从另一个wav文件写入WAV文件的问题

视频工作正常。但是,当我尝试从一个wav文件向输出wav文件写入几帧时,它在播放时会出现错误。

虽然该程序正确编写它,我可以在Real Player中播放它,但音频会提供一个错误,称为标记/重置不支持并且无法获取位置错误,当我在代码上运行它时播放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++; 
    } 

} 

以上是我的函数写音频。

如果相应的视频帧在我的ArrayList名为Group1和Group2

发现首先我把输入wav文件的头部,并将其写入到输出wav文件我只写一个音频帧。

然后我检查是否存在相应的视频帧。如果是,我写出与该视频帧对应的音频帧。

您需要将输出文件头更新为您正在创建的新文件正确。

outputStream.write(head); 

这里你只需复制原始文件头,但它看起来像你的循环,你并不总是复制从原始文件到您的剥离示例文件(即你的输出文件将是比短输入文件)。 wav文件格式在标题中包含有关文件大小的信息(请参阅https://ccrma.stanford.edu/courses/422/projects/WaveFormat/了解标题的中断),则需要更新标题以使新文件具有正确的数据长度。

+0

令人敬畏的兄弟。解决了(y) – user2290024 2013-04-26 05:28:46