0

我有大量相对较大的单声道音频 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 问题?

4

0 回答 0