我知道找到wav文件持续时间的等式是:
fileLength/(sampleRate*channel*bits per sample/8)
但是我没能找到所有必要的信息来填补R中的这个等式。 以下是我提出的一个例子:
sound <- readWave(sound.wav)
sampleRate <- sound@samp.rate #44100
bit <- sound@bit #16
所以根据上面的信息,我有:
fileLength/(44100*channel*16/8)
频道可以是1或2,这样我就不会烦恼,但文件长度又如何呢?如何在R中检索它?或者我在某些软件包中是否有一些getDurationWavFile方法?
更新: 我使用了tuneR库,当我按照建议使用str(声音)时,它给了我:
Formal class 'Wave' [package "tuneR"] with 6 slots
..@ left : int [1:132301] 0 3290 6514 9605 12502 15145 17482 19464 21052 22213 ...
..@ right : num(0)
..@ stereo : logi FALSE
..@ samp.rate: int 44100
..@ bit : int 16
..@ pcm : logi TRUE
答案 0 :(得分:4)
由于您知道默认的summary
函数(在命令行单独输入对象名称时默认调用此函数),因此对象类型将打印出持续时间,您只需查看代码即可对于该功能,看看它是如何计算的。 getMethod
功能可让您在引擎盖下达到顶峰:
library(tuneR)
getMethod('summary','Wave')
Method Definition:
function (object, ...)
{
l <- length(object@left)
cat("\nWave Object")
cat("\n\tNumber of Samples: ", l)
cat("\n\tDuration (seconds): ", round(l/object@samp.rate,
2))
cat("\n\tSamplingrate (Hertz): ", object@samp.rate)
cat("\n\tChannels (Mono/Stereo):", if (object@stereo)
"Stereo"
else "Mono")
cat("\n\tPCM (integer format): ", object@pcm)
cat("\n\tBit (8/16/24/32/64): ", object@bit)
cat("\n\nSummary statistics for channel(s):\n\n")
if (object@stereo)
print(rbind(left = summary(object@left), right = summary(object@right)))
else print(summary(object@left))
cat("\n\n")
}
<environment: namespace:tuneR>
Signatures:
object
target "Wave"
defined "Wave"
因此,要获取wave文件的长度,请尝试:
sound_length <- round(sound@left / sound@samp.rate, 2)
答案 1 :(得分:3)
对@ gary的答案的一个小调整对我有用:
sound_length <- round(length(sound@left) / sound@samp.rate, 2)