如何从 R 中的 wav 文件获取频率和时间的数据帧?
How can I get a dataframe of frequency and time from a wav file in R?
我想尝试区分 wav 文件中的两个扬声器。最直接的方法似乎应该是从文件中提取频率信息,并使用时间将频率与文件的给定部分相匹配。我没有在 tuneR 或 seewave 中看到可以轻松提取这样的数据帧的函数。最简单的方法是什么?谢谢!
以下内容可能会有所帮助。 spectro
函数 returns 时间、频率和振幅,并使用 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
我想尝试区分 wav 文件中的两个扬声器。最直接的方法似乎应该是从文件中提取频率信息,并使用时间将频率与文件的给定部分相匹配。我没有在 tuneR 或 seewave 中看到可以轻松提取这样的数据帧的函数。最简单的方法是什么?谢谢!
以下内容可能会有所帮助。 spectro
函数 returns 时间、频率和振幅,并使用 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