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

时间:2018-03-21 16:01:44

标签: r audio wav

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

1 个答案:

答案 0 :(得分:1)

这里可能有所帮助。 spectro函数返回时间,频率和幅度,并使用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