如何从 R 中的 wav 文件获取频率和时间的数据帧?

How can I get a dataframe of frequency and time from a wav file in R?

我想尝试区分 wav 文件中的两个扬声器。最直接的方法似乎应该是从文件中提取频率信息,并使用时间将频率与文件的给定部分相匹配。我没有在 tuneR 或 seewave 中看到可以轻松提取这样的数据帧的函数。最简单的方法是什么?谢谢!

以下内容可能会有所帮助。 spectro 函数 returns 时间、频率和振幅,并使用 reshape2dplyr 中的函数进行一些操作,您可以获得数据帧。

library(seewave)
library(tuneR)
library(reshape2)
library(dplyr)

data("pellucens")
writeWave(pellucens, "pellucens.wav")
wav = readWave("pellucens.wav")

ss = spectro(wav, plot = F)
mm =
  melt(ss$amp, value.name = "Amplitude") %>%
  dplyr::select(FrequencyIndex = Var1, TimeIndex = Var2, Amplitude)
ff =
  melt(ss$freq, value.name = "Frequency") %>%
  dplyr::mutate(FrequencyIndex = row_number(), Frequency = Frequency * 1000)
tt =
  melt(ss$time, value.name = "Time") %>%
  dplyr::mutate(TimeIndex = row_number())
sp =
  mm %>%
  dplyr::left_join(ff, by = "FrequencyIndex") %>%
  dplyr::left_join(tt, by = "TimeIndex") %>%
  dplyr::select(Time, Frequency, Amplitude)

# head(sp)
#  Time Frequency Amplitude
#1    0   0.00000 -57.72730
#2    0  21.53320 -63.55554
#3    0  43.06641 -85.05077
#4    0  64.59961 -91.29989
#5    0  86.13281 -83.86144
#6    0 107.66602 -81.54240