使用 seewave::resamp 的 wave 对象的批量下采样列表
Bulk downsampling list of wave objects using seewave::resamp
我正在尝试使用 seewave::resamp
.
对 wave
个对象的列表进行下采样
为了获得我的列表,我导入了一个 .wav 文件并按照@Jota 的回答将其分成 10 秒的片段 here
因此,为了获得我的 wave
对象列表,我做了以下操作(这是使用上述答案中的示例):
library(seewave)
# your audio file (using example file from seewave package)
data(tico)
audio <- tico # this is an S4 class object
# the frequency of your audio file
freq <- 22050
# the length and duration of your audio file
totlen <- length(audio)
totsec <- totlen/freq
# the duration that you want to chop the file into
seglen <- 0.5
# defining the break points
breaks <- unique(c(seq(0, totsec, seglen), totsec))
index <- 1:(length(breaks)-1)
# a list of all the segments
subsamps <- lapply(index, function(i) audio[(breaks[i]*freq):(breaks[i+1]*freq)])
我现在有了 wave
个对象的列表。如果对单个对象执行以下操作,它会起作用:
resamp(subsamps[[1]], f = 48000, g = 22050, output = "Wave")
但是当我尝试对对象列表执行此操作时出现错误:
test_wave_downsample <- lapply(subsamps, function(i) resamp(subsamps[[i]], f = 22050, g = 8000, output = "Wave"))
Error in subsamps[[i]] : invalid subscript type 'S4'
我很确定这与我使用 lapply
的方式有关,因为 S4 对象在单独完成时不是问题,但作为使用 apply
的新手家庭我不确定是什么。
我环顾四周,找不到太多关于在 lapply
中使用现有函数的信息,或者这是否会成为问题。
非常感谢任何建议。
在四处询问后,我得到了一个有效的解决方案:
f <- function(x) {
resamp(x, f = 22050, g = 8000, output = "Wave")
}
test_wave_downsample <- lapply(subsamps, f)
我正在尝试使用 seewave::resamp
.
wave
个对象的列表进行下采样
为了获得我的列表,我导入了一个 .wav 文件并按照@Jota 的回答将其分成 10 秒的片段 here
因此,为了获得我的 wave
对象列表,我做了以下操作(这是使用上述答案中的示例):
library(seewave)
# your audio file (using example file from seewave package)
data(tico)
audio <- tico # this is an S4 class object
# the frequency of your audio file
freq <- 22050
# the length and duration of your audio file
totlen <- length(audio)
totsec <- totlen/freq
# the duration that you want to chop the file into
seglen <- 0.5
# defining the break points
breaks <- unique(c(seq(0, totsec, seglen), totsec))
index <- 1:(length(breaks)-1)
# a list of all the segments
subsamps <- lapply(index, function(i) audio[(breaks[i]*freq):(breaks[i+1]*freq)])
我现在有了 wave
个对象的列表。如果对单个对象执行以下操作,它会起作用:
resamp(subsamps[[1]], f = 48000, g = 22050, output = "Wave")
但是当我尝试对对象列表执行此操作时出现错误:
test_wave_downsample <- lapply(subsamps, function(i) resamp(subsamps[[i]], f = 22050, g = 8000, output = "Wave"))
Error in subsamps[[i]] : invalid subscript type 'S4'
我很确定这与我使用 lapply
的方式有关,因为 S4 对象在单独完成时不是问题,但作为使用 apply
的新手家庭我不确定是什么。
我环顾四周,找不到太多关于在 lapply
中使用现有函数的信息,或者这是否会成为问题。
非常感谢任何建议。
在四处询问后,我得到了一个有效的解决方案:
f <- function(x) {
resamp(x, f = 22050, g = 8000, output = "Wave")
}
test_wave_downsample <- lapply(subsamps, f)