最快读取 WAV
Fastest read WAV
我正在尝试查找目录中所有文件(仅 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 文件的速度非常慢。也许还有另一种方法可以更快地做到这一点?
为此您只需要 header。所以我会这样做:
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
成员返回。
我正在尝试查找目录中所有文件(仅 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 文件的速度非常慢。也许还有另一种方法可以更快地做到这一点?
为此您只需要 header。所以我会这样做:
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
成员返回。