R中的Wav文件不完整,但文件中有额外的数据?

时间:2016-03-01 14:39:24

标签: r debugging audio binaryfiles

我正在尝试在R中打开声音文件,但load.wave()函数会抱怨该文件“不完整”。声音在许多其他音频软件(mplayer,Audacity,Praat等)上播放得很好,而file并没有报告它与其他没有问题的WAV文件有任何不同:

RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 22050 Hz

我知道load.wave()在内部调用C函数来处理数据,但我不知道该函数是什么,或者它做了什么(所以我不明白它为什么抱怨)。来自load.wave()的来电在R中定义为.Call("load_wave_file", where, PACKAGE = "audio"),其中where是该文件的路径。

在Audacity中打开声音并再次保存为WAV文件会生成相同的声音文件,可以在R中打开而不会出现任何问题。

然而,文件似乎有很大不同。使用vbindiff,标题中存在差异:

# Original file
0000 0000: 52 49 46 46 39 AE 02 00  57 41 56 45 66 6D 74 20  RIFF9... WAVEfmt   
0000 0010: 12 00 00 00 01 00 01 00  22 56 00 00 44 AC 00 00  ........ "V..D...  
0000 0020: 02 00 10 00 00 00 64 61  74 61 D4 AD 02 00 F9 FF  ......da ta......  

# Fixed file
0000 0000: 52 49 46 46 F8 AD 02 00  57 41 56 45 66 6D 74 20  RIFF.... WAVEfmt   
0000 0010: 10 00 00 00 01 00 01 00  22 56 00 00 44 AC 00 00  ........ "V..D...  
0000 0020: 02 00 10 00 64 61 74 61  D4 AD 02 00 FA FF F6 FF  ....data ........  

以及整个文件:

enter image description here

更有趣的是,原始文件末尾的一个块已被删除:

# Original file
0002 ADF0: 5E 00 5D 00 5F 00 5F 00  5F 00 5F 00 5E 00 5D 00  ^.]._._. _._.^.].  
0002 AE00: 5B 00 63 75 65 20 1C 00  00 00 01 00 00 00 01 00  [.cue .. ........  
0002 AE10: 00 00 88 58 01 00 64 61  74 61 00 00 00 00 00 00  ...X..da ta......  
0002 AE20: 00 00 88 58 01 00 4C 49  53 54 13 00 00 00 61 64  ...X..LI ST....ad  
0002 AE30: 74 6C 6C 61 62 6C 07 00  00 00 01 00 00 00 52 54  tllabl.. ......RT  
0002 AE40: 00               

# Fixed file
0002 ADF0: 5E 00 5F 00 5F 00 5F 00  5F 00 5D 00 5F 00 59 00  ^._._._. _.]._.Y.  
0002 AE00:                                                                         
0002 AE10:                                                                      
0002 AE20:                                                                      
0002 AE30:                                                                      
0002 AE40:

1。这个文件有什么问题阻止我打开它?

2。原始文件末尾的数据是什么?(见下文)

我知道有多个音频处理程序,它们对WAV规范相当自由,所以这种类型的问题并不少见。我只是想知道发生了什么,可能实现一个修复(这不需要我启动Auda​​city)并防止它在将来再次发生。

更新

这个块似乎是一个“Cue-Points Chunk”,正如here解释的那样:

  

提示点块识别波形数据流中的一系列位置。

我想这意味着它应该是无害的,但这是导致问题的原因吗?

0 个答案:

没有答案