Массовое понижение дискретизации списка волновых объектов с помощью seewave::resamp

Я пытаюсь уменьшить список объектов wave, используя seewave::resamp.

Чтобы получить свой список, я импортировал файл .wav и разделил его на 10-секундные клипы после ответа @Jota здесь

Итак, чтобы получить список объектов 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)

person TomCLewis    schedule 02.07.2020    source источник
comment
Разве вы не передаете сюда содержимое subsamps в качестве значений вашего индекса i? Может попробовать lapply(1:length(subsamps), function(i)....   -  person Carl Witthoft    schedule 02.07.2020
comment
Да. Мне сказали об этом с тех пор, как я опубликовал вопросы сегодня утром. Я отредактировал свой вопрос с решением, которое сработало для меня.   -  person TomCLewis    schedule 02.07.2020