从另一个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/了解标题的中断),则需要更新标题以使新文件具有正确的数据长度。
令人敬畏的兄弟。解决了(y) – user2290024 2013-04-26 05:28:46