使用tuneR包readWave函数时出现Non-conformable Arguments错误
使用tuneR读取WAV文件时出现"non-conformable arguments"错误
问题场景
用R语言的tuneR包读取10个.wav音频文件,其中9个可正常读取,但单个文件抛出错误,执行代码及报错信息如下:
执行代码:
cclo <- readWave("BirdCalls/CCLO_105291_44k_CN.wav", from = 45, to = 48, units = "seconds", toWaveMC = T)
错误信息:
Error in readBin(con, int, n = 4, size = 1, endian = "little", signed = FALSE) %*% : non-conformable arguments
文件信息对比
通过file.info()查看文件基础属性,异常文件与正常文件无明显差异(不存在文件大小为0的情况):
异常文件信息:
size isdir mode mtime ctime atime exe BirdCalls/CCLO_105291_44k_CN.wav 8814796 FALSE 666 2024-06-24 14:30:11 2024-06-24 14:30:11 2024-10-08 10:07:14 no
正常文件信息:
size isdir mode mtime ctime atime exe BirdCalls/VESP_110274_44k_CN.wav 5217092 FALSE 666 2017-12-27 17:32:53 2024-09-24 11:25:37 2024-10-08 10:00:38 no
已排查tuneR包中readWave函数的源码,但未定位到错误抛出的具体位置,该异常文件来自Macauley Library。
可能的原因
- 非标准WAV格式:部分专业音频库导出的WAV可能包含额外元数据块或不符合标准PCM规范的文件头字段,导致
tuneR解析二进制数据时,矩阵运算的维度不匹配(错误中的%*%为矩阵乘法,说明读取的数据维度与预期不符)。 - 切片参数边界问题:指定的
from=45、to=48切片范围可能刚好触及该文件的音频数据边界,计算采样点数量时出现非整数或维度错误,触发矩阵运算不兼容。 - tuneR版本bug:旧版本
tuneR对某些特殊WAV文件的解析存在缺陷,版本兼容性可能是诱因。 - 字节序/编码差异:虽然基础文件信息相近,但文件内部的字节序或编码细节可能存在差异,导致
readBin读取的数据不符合后续运算要求。
解决建议
- 先尝试不使用切片参数,直接读取整个文件,排查是否由切片逻辑导致问题:
cclo <- readWave("BirdCalls/CCLO_105291_44k_CN.wav", toWaveMC = T) - 用Audacity等音频工具将该文件重新导出为标准PCM格式,再尝试读取。
- 更新
tuneR到最新版本:install.packages("tuneR") - 尝试用
audio或seewave等其他R包读取该文件,对比结果缩小问题范围。
内容的提问来源于stack exchange,提问作者Kaitlyn Strickfaden
相关产品推荐
相关产品推荐

