截取WAV和MP3格式音乐文件的有关问题
截取WAV和MP3格式音乐文件的问题
目的是要截取一段WAV文件生成一个新的可播放的WAV文件
截取部分已经完成,需要加上WAV文件的文件头
手边没有相关的文档,所以在网上查了下WAV的文件头格式
中间有段是format chunk,该chunk的第5-8个字节数值是16或者18
但是实际查看到的WAV文件该4个字节是14或者10
不知道是不是网上的资料错了?
文件头中第一个chunk是RIFF WAVE chunk,有12个字节,头4个是RIFF,后4个是WAVE,中间4个是文件内容字节数-8
我将源文件的文件头复制下来添加到截取部分的前面,然后把RIFF WAVE chunk中间的4个字节改成相应的字节数
这样新生成的文件可以播放,但是播放的时候,显示的总时长还是和源文件一样,并且播放了截取部分的时长以后就会出现无法解码这样的错误而中断
请问懂的高人,该怎么处理才能正确生成新的文件?
另外一个问题是MP3文件中的专辑图片是存储在什么地方的?是存储在MP3文件中的还是另外单独存放的?如果是存放在MP3文件中的,通常处于文件的什么位置?
------解决方案--------------------
专辑图片可以内嵌在MP3文件中的,也可以是外部的。平时听歌注意的...
------解决方案--------------------
图片应该在ID3v2里面,ID3v2是在MP3文件头部的
http://blog.****.net/blogercn/archive/2009/08/23/4475871.aspx
------解决方案--------------------
http://blog.****.net/BlueSoal/archive/2006/07/17/932395.aspx 这里对wave格式说的很详细了。
format chunk,的第5-8个字节数值应该是16或者18。我看了几个Windows内置的wave,都是0x10。该值表示chunk的大小(不包括前面这8个字节)。
你是不是把16进制的0x10当成了十进制的10了?
------解决方案--------------------
wave的问题,wave头是44个bytes,然后紧接着的后面4个bytes是真正的wave数据长度,即:总的文件长度-44,修改下45-48四个字节[小端方式]
mp3的问题可以使用TTPlayer打开文件,插入专辑图片,然后查看二进制和源文件的区别
------解决方案--------------------
8KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)
偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(ALAW) long int size1=0x12
14H 2 int 06 00H int fmttag=0x06
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=0x01
22H 4 long int 量化数 long int bitpersamples=8
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000000530700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 采样数据字节数 lont int size2=文长-58
这是一个常见的wav头格式,一般有两个写长度的地方,wav头格式还有其他的,lz注意要使用哪种头格式
------解决方案--------------------
mp3的问题可以使用TTPlayer打开文件,插入专辑图片,然后查看二进制和源文件的区别
目的是要截取一段WAV文件生成一个新的可播放的WAV文件
截取部分已经完成,需要加上WAV文件的文件头
手边没有相关的文档,所以在网上查了下WAV的文件头格式
中间有段是format chunk,该chunk的第5-8个字节数值是16或者18
但是实际查看到的WAV文件该4个字节是14或者10
不知道是不是网上的资料错了?
文件头中第一个chunk是RIFF WAVE chunk,有12个字节,头4个是RIFF,后4个是WAVE,中间4个是文件内容字节数-8
我将源文件的文件头复制下来添加到截取部分的前面,然后把RIFF WAVE chunk中间的4个字节改成相应的字节数
这样新生成的文件可以播放,但是播放的时候,显示的总时长还是和源文件一样,并且播放了截取部分的时长以后就会出现无法解码这样的错误而中断
请问懂的高人,该怎么处理才能正确生成新的文件?
另外一个问题是MP3文件中的专辑图片是存储在什么地方的?是存储在MP3文件中的还是另外单独存放的?如果是存放在MP3文件中的,通常处于文件的什么位置?
------解决方案--------------------
专辑图片可以内嵌在MP3文件中的,也可以是外部的。平时听歌注意的...
------解决方案--------------------
图片应该在ID3v2里面,ID3v2是在MP3文件头部的
http://blog.****.net/blogercn/archive/2009/08/23/4475871.aspx
------解决方案--------------------
http://blog.****.net/BlueSoal/archive/2006/07/17/932395.aspx 这里对wave格式说的很详细了。
format chunk,的第5-8个字节数值应该是16或者18。我看了几个Windows内置的wave,都是0x10。该值表示chunk的大小(不包括前面这8个字节)。
你是不是把16进制的0x10当成了十进制的10了?
------解决方案--------------------
wave的问题,wave头是44个bytes,然后紧接着的后面4个bytes是真正的wave数据长度,即:总的文件长度-44,修改下45-48四个字节[小端方式]
mp3的问题可以使用TTPlayer打开文件,插入专辑图片,然后查看二进制和源文件的区别
------解决方案--------------------
8KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)
偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(ALAW) long int size1=0x12
14H 2 int 06 00H int fmttag=0x06
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=0x01
22H 4 long int 量化数 long int bitpersamples=8
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000000530700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 采样数据字节数 lont int size2=文长-58
这是一个常见的wav头格式,一般有两个写长度的地方,wav头格式还有其他的,lz注意要使用哪种头格式
------解决方案--------------------
mp3的问题可以使用TTPlayer打开文件,插入专辑图片,然后查看二进制和源文件的区别