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

Posted

技术标签:

【中文标题】来自另一个 wav 文件的 WAV 文件写入问题【英文标题】:WAV File writing Issue from another wav file 【发布时间】:2013-04-23 06:43:31 【问题描述】:

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

视频运行良好。但是,当我尝试仅将一个 wav 文件中的几帧写入输出 wav 文件时,它在播放时会出错。

虽然程序编写正确并且我可以在 Real Player 中播放它,但当我在代码上运行相同的代码以播放教授给了。

我找不到写音频功能的错误。这是函数

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++;
    


以上是我编写音频的功能。

如果在我的名为 Group1 和 Group2 的 arrayList 中找到相应的视频帧,我只会写一个音频帧

首先我将输入 wav 文件的头部写入输出 wav 文件。

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

【问题讨论】:

【参考方案1】:

您需要更新输出文件头,使其与您正在创建的新文件正确。

outputStream.write(head);

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

【讨论】:

很棒的兄弟。解决了(y)

以上是关于来自另一个 wav 文件的 WAV 文件写入问题的主要内容,如果未能解决你的问题,请参考以下文章

无需在 Python 中写入磁盘即可加入 .wav 文件

如何在 Javascript/Node 中从 blob 写入 .wav 文件

将.3gp文件写入.wav格式python Flask服务器

wav文件多次写入和播放

更改 wav 文件的采样率和比特率而不会遇到打开文件的问题?

NAudio - 读取和写入 Wav 文件