我有大量 .wav 文件,我需要使用 R 中的“soundecology”包中的声学指数进行分析。但是,录音没有统一的开始时间,我需要分析文件中的特定时间段。我想创建一个函数和循环来自动化这个过程。我为每个录音文件夹(每个文件夹位于不同的位置)创建了一个电子表格,其中列出了录音以及我需要分析的每个录音中的时间。基本上,一行包含:声音文件名、样本应该开始的时间(例如 09:00:00、从文件开始到该时间发生的秒数以及从开始开始的秒数样本结束的文件时间。该数据如下所示: Spread sheet of data
我正在使用包“tuneR”和“warbleR”来选择我想要分析的声音文件的特定部分。这是我想在所有声音文件中循环的代码和输出:
wavrow1 <-read_wave(mvb$sound.files[1], from = mvb$start[1], to = mvb$end[1])
wavrow1.aci <- acoustic_complexity(wavrow1, j=10)
哪个产生
max_freq not set, using value of: 22050
min_freq not set, using value of: 0
This is a mono file.
Calculating index. Please wait...
Acoustic Complexity Index (total): 934.568
但是,当我将它放入一个函数中以便将其放入一个循环中时,我会得到不同的输出。
acianalyzeFUN <- function(mvb, i){
r <- read_wave(mvb$sound.files[i], mvb$start[i], mvb$end[i])
soundfile.aci <- acoustic_complexity(r, j=10)
}
row1.test <- acianalyzeFUN(mvb, 1)
这给出了输出:
max_freq not set, using value of: 22050
min_freq not set, using value of: 0
This is a mono file.
Calculating index. Please wait...
Acoustic Complexity Index (total): 19183.03
Acoustic Complexity Index (by minute): 931.98
这是不同的。所以我需要修复这个函数并将其放入一个循环中,以便我可以将它应用于所有文件并将结果保存到数据框或最终保存到另一个电子表格中。
我在想像下面这样的循环可能会起作用,但我也遇到了错误:
output <- vector("logical", length(97))
for (i in seq_along(mvb$sound.files)) {
output[[i]] <- acianalyzeFUN(mvb, i)
}
返回此错误:
max_freq not set, using value of: 22050
min_freq not set, using value of: 0
This is a mono file.
Calculating index. Please wait...
Acoustic Complexity Index (total): 19183.03
Acoustic Complexity Index (by minute): 931.98
Error in output[[i]] <- acianalyzeFUN(mvb, i) :
more elements supplied than there are to replace
感谢您对此的任何帮助和建议。如果还有其他有用的信息,请告诉我。