我正在试图找到目录中所有文件(只有wav)的长度(以秒为单位)。
require(tuneR)
fnam=file.path("dir")
filist=list.files(fnam, recursive=TRUE, pattern="wav" )
filist1=paste(fnam, "/", filist, sep="")
nfiles=length(filist1)
x=1:nfiles
file_len=function(n){
inname=data_phone$filist1[n]
if(file.info(inname)$size!=0){
ywave=readWave(inname)
lengthSec=length(ywave@left)/ywave@samp.rate
} else {
lengthSec=0
}
}
len_file=unlist(lapply(x,FUN=file_len))但对于86k文件,它的工作速度确实很慢。也许还有其他更快的方法吗?
发布于 2015-06-29 15:26:56
你只需要这个头。所以我会这么做:
library("tuneR")
filist <- list.files("dir", recursive=TRUE, pattern="\\.wav$", full.names = TRUE)
file_len <- function(fil) {
if (file.info(fil)$size != 0) {
wavHeader <- readWave(fil, header = TRUE)
wavHeader$samples / wavHeader$sample.rate
} else {
0
}
}
len_file <- sapply(filist, file_len)我还简化和整理了您的代码,但关键的更改是将header = TRUE参数使用到readWave,然后使用返回的列表中的$samples和$sample.rate成员。
https://stackoverflow.com/questions/31119096
复制相似问题