Вывод многих.wavs из объекта S4, сделанного из большого (350 МБ) .wav, разрезанного на 5-секундные сегменты

Используя код R, найденный здесь:

Разделить аудиофайл на части произвольного размера

Я хотел нарезать звук на 5 секунд, а затем экспортировать их как.wavs. После использования приведенного выше кода я смог получить объект S4 с 2564 элементами, которые представляют собой волны с 6 слотами каждый.

Я хочу сохранить каждый из них в формате.wav, но я немного растерялся. Вот мой код до сих пор.

# Calling the packages
library(seewave)
library(audio)
library(tuneR)

# Load audio wave into object
Rec12234 <- readWave("012234.wav")

# Make sure the file loaded correctly - should show sample rate, etc.
head(Rec12234)

#Set frequency
freq <- 16000

# Set the length
totlen <- length(Rec12234)

#Set the duration
totsec <- totlen/freq

# How long each sample is (in seconds)
seglen <- 5

#Defining the break points
breaks <- unique(c(seq(0, totsec, seglen), totsec))
index <- 1:(length(breaks)-1)

#Splitting the file
items <- lapply(index, function(i) Rec12234[(breaks[i]*freq):(breaks[i+1]*freq)])

Я очень плохо знаком с кодированием и R, поэтому прошу прощения, если ответ довольно прост!

Спасибо за помощь!

1 ответ

Решение

Вы хорошо начали. На самом деле, вам нужно только tuneR пакет, чтобы делать то, что вы хотите. Я предпочитаю использовать слоты объекта Wave для получения моей информации. Таким образом, вы можете обрабатывать файлы с различной частотой дискретизации и т. Д.

library(tuneR)

# Load audio wave into object
Rec12234 <- readWave("012234.wav")

# Make sure the file loaded correctly - should show sample rate, etc.
head(Rec12234)

#Set frequency
freq <- Rec12234@samp.rate

# Set the length
totlen <- length(Rec12234@left) # 1 channel default is left

#Set the duration
totsec <- totlen/freq

# How long each sample is (in seconds)
seglen <- 5

#Defining the break points
breaks <- unique(c(seq(0, totsec, seglen), totsec))
index <- 1:(length(breaks)-1)

#Splitting the file
items <- lapply(index, function(i) Rec12234@left[(breaks[i]*freq):(breaks[i+1]*freq)])

for (i in 1:length(items)) {
    wavName <- paste('m',i,'.wav',sep='')  # file name
    temp <- Wave(items[i], samp.rate=freq, bit=16) # item into Wave object
    writeWave(temp, wavName) # write the file
}
Другие вопросы по тегам