wav文件中标题的大小,以便将其删除

时间:2018-04-11 20:27:10

标签: audio wav

我需要从wav文件中删除标题。但是,它们可以是44,46,也可以是字面上任意数量的字节。如何从wav文件中始终删除标题?

2 个答案:

答案 0 :(得分:1)

由于PCM(音频)数据总是在这些字节之后开始:

64 61 74 61 

也许你可以搜索上面的内容,然后选择他们的位置作为"结束"部分"删除标题" 范围?

在字节数组(或文件阅读器)中进行搜索的伪代码......

//# where... var NAME : DATA TYPE = VALUE;

在您的编程语言中尝试这种逻辑。

var myWAVbytes : ByteArray = your_file_Bytes_with_header; //# WAV data
var byteVal : Int = -1; //# stores value of a byte
var posVal : Int = 0; //# stores position (offset) of a byte

while (true)
{
    byteVal = myWAVbytes[ posVal ]; //read value at this offset

    if( byteVal == 0x64) //# check for beginning "64" byte
    {
        //if issues also try as: posVal-1 ...in case offset is ahead by one
        byteVal = myWAVbytes[ posVal ].readInteger32(); //# check 4 byte sequence of: "64 61 74 61"

        if( byteVal == 0x64617461 ) //# found "data" sequence bytes
        {
            Print_Log( "0x64617461 data begins at : " + posVal );
            break;
        }
    }

    posVal++; //# move forward through bytes    
}

带手动检查的备用版本(未使用readInteger类型选项)...

while (true)
{
    byteVal = myWAVbytes[ posVal ]; //read value at this offset

    if( byteVal == 0x64) //# check for beginning "64" byte
    {
        if( (myWAVbytes[posVal] == 0x64) && (myWAVbytes[posVal+1] == 0x61) && (myWAVbytes[posVal+2] == 0x74) && (myWAVbytes[posVal+3] == 0x61) ) 
        {
            //# found "data" sequence bytes
            Print_Log( "0x64617461 data begins at : " + posVal );
            break;
        }
    }

    posVal++; //# move forward through bytes    
}

希望它有所帮助。

答案 1 :(得分:1)

始终如一地做任何事情的唯一方法就是先了解它。 WAV文件规范定义了标题的内容,并了解您拥有剥离标题所需的所有信息。信不信由你,几乎所有读取WAV文件的软件程序都能够始终如一地查找数据。

没有花时间理解格式,音频数据前面有4个字节'd','a','t','a'和4字节长度。您可以只搜索文本,跳过4个字节并查找数据。但请注意,如果不检查跳过的信息,您可能没有解释音频数据所需的信息。

如果您有兴趣了解格式,请查看以下链接:http://soundfile.sapp.org/doc/WaveFormat/