我有大量相对较大的单声道音频 wav 文件,每个文件大约 2 GB,我想在 Raven Pro(1.4 版)中进行注释。文件似乎太大,Raven 没有打开它们。我可以使用任何其他应用程序轻松加载和播放它们,这对我来说意味着文件没问题,只是我的电脑/Raven 有问题。我编写了一个 R 脚本,它基于选择表的详细信息,从原始大 wav 文件中提取一个或多个部分,并将每个部分保存在一个单独的文件中,该文件的名称是原始长文件名,并添加了一个索引。该脚本运行良好,但是当我在 Raven 中打开其中一个部分文件时,我收到以下消息:
如果我尝试在 Audacity 或 R 或 foobar200 或任何其他应用程序中打开相同的文件,则该文件可以正常播放。我的代码是:
library(readr)
library(lubridate)
library(tuneR)
library(tidyverse)
library(dplyr)
setwd(choose.dir())
select.table <-
as.data.frame(read_csv(file.choose(),
col_types = cols(
start = col_time(format = "%H:%M:%S"),
end = col_time(format = "%H:%M:%S")
)))
# convert hh:mm:ss to seconds to work with tuneR
select.table$start <- period_to_seconds(hms(select.table$start))
select.table$end <- period_to_seconds(hms(select.table$end))
colnames(select.table)[colnames(select.table) == "File"] <-
"sound.files"
# add a selection number
select.table <-
select.table %>% group_by(sound.files) %>% mutate(selec = row_number())
X <- select.table
#-----function to iterate through all the files in a folder and the elements in the selection table
cut.selections <- function(X, mar) {
cutFUN <- function(select.table, i, mar) {
r <-
tuneR::readWave(as.character(select.table$sound.files[i]), header = TRUE)
f <- r$sample.rate
t <- c(select.table$start[i] - mar, select.table$end[i] + mar)
mar1 <- mar
mar2 <- mar1 + select.table$end[i] - select.table$start[i]
if (t[1] < 0)
t[1] <- 0
if (t[2] > r$samples / f)
t[2] <- r$samples / f
# Cut wave
wvcut <-
tuneR::readWave(
as.character(select.table$sound.files[i]),
from = t[1],
to = t[2],
units = "seconds"
)
tuneR::writeWave(
object = wvcut,
filename = paste0(
gsub("\\.wav$", "", select.table$sound.files[i], ignore.case = TRUE),
"_sample_",
select.table$selec [i],
".wav"
)
)
}
out <- pbapply::pblapply(1:nrow(select.table), function(y)
cutFUN(X, i = y, mar = 0.05))
}
cut.selections(X = select.table, mar = 0.05)
我还尝试使用包中的 savewav() 函数seewave
而不是以下writeWave()
函数:
savewav(
wvcut,
filename = paste0(
gsub("\\.wav$", "", select.table$sound.files[i], ignore.case = TRUE),
"_sample_",
select.table$selec [i],
".wav"
), channel=1
)
我的输入选择表如下所示:
> select.table
File start end
1 6239.211010165347.wav 00:25:00 00:30:00
2 6239.211010165347.wav 01:30:00 01:35:00
3 6239.211010165347.wav 01:50:00 01:55:00
4 6239.211010165347.wav 06:58:42 07:03:42
5 6239.211010165347.wav 10:58:42 11:03:42
6 6239.211010165347.wav 12:03:42 12:08:42
7 6239.211010165347.wav 14:21:07 14:26:07
8 6239.211010165347.wav 14:46:07 14:51:07
9 6239.211010165347.wav 15:56:07 16:01:07
10 6239.211010165347.wav 17:16:07 17:21:07
11 6239.211010165347.wav 17:36:07 17:41:07
12 6239.210928165620.wav 01:55:00 02:00:00
13 6239.210928165620.wav 04:44:25 04:49:25
14 6239.210928165620.wav 05:49:25 05:54:25
15 6239.210928165620.wav 06:09:25 06:14:25
我处理的选择表看起来像:
> select.table
# A tibble: 462 x 4
# Groups: sound.files [44]
sound.files start end selec
<chr> <dbl> <dbl> <int>
1 6239.211010165347.wav 1500 1800 1
2 6239.211010165347.wav 5400 5700 2
3 6239.211010165347.wav 6600 6900 3
4 6239.211010165347.wav 25122 25422 4
5 6239.211010165347.wav 39522 39822 5
6 6239.211010165347.wav 43422 43722 6
7 6239.211010165347.wav 51667 51967 7
8 6239.211010165347.wav 53167 53467 8
9 6239.211010165347.wav 57367 57667 9
10 6239.211010165347.wav 62167 62467 10
# ... with 452 more rows
是什么导致了 Raven 问题?