在r中查找wav文件的持续时间

时间:2014-05-01 19:27:04

标签: r wav

我知道找到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

2 个答案:

答案 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)