0

使用此处找到的 R 代码:

将音频文件拆分为任意大小的片段

我希望将我的音频切成 5 秒,然后将它们全部导出为 .wav。使用上面的代码后,我能够得到一个具有 2564 个元素的 S4 对象,这些元素是每个具有 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 很陌生,所以如果答案很简单,我深表歉意!

谢谢您的帮助!

4

1 回答 1

0

你有一个好的开始。实际上,你只需要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
}
于 2018-09-18T19:32:51.737 回答