我想尝试区分wav文件中的两个扬声器。最直接的方式似乎应该是从文件中提取频率信息,并使用时间来匹配文件的给定部分的频率。我没有在tuneR或seewave中看到函数来轻松提取这样的数据帧。最简单的方法是什么?谢谢!
答案 0 :(得分:1)
这里可能有所帮助。 spectro
函数返回时间,频率和幅度,并使用reshape2
和dplyr
中的函数进行一些操作,您可以获得数据框。
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