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

Используя код 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 Ответ

0 голосов
/ 18 сентября 2018

Хорошее начало.На самом деле вам нужен только пакет 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
}
...