首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最快读取WAV

最快读取WAV
EN

Stack Overflow用户
提问于 2015-06-29 15:03:25
回答 1查看 113关注 0票数 0

我正在试图找到目录中所有文件(只有wav)的长度(以秒为单位)。

代码语言:javascript
复制
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文件,它的工作速度确实很慢。也许还有其他更快的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-29 15:26:56

你只需要这个头。所以我会这么做:

代码语言:javascript
复制
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成员。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31119096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档