我有兴趣将我的数据转换成声音。我的数据在数据框中。每列代表特定频率下声音的相对幅度。每一行都是一个样本。样本以固定的采样率记录。我已经想出了如何使用 seewave package 发出声音,但不是在我想要的特定频率上。

例子:

library(seewave)

# some dummy data, 3 columns
set.seed(7)
df <- data.frame(f1=rnorm(600,30,5), f2=rnorm(600,40,10), 3=rnorm(600,30,10))
df[df<0] <- 0

mat <- as.matrix(df)
mat <- t(mat) +0i # istft() only works with complex numbers
sr <- 1000 # sample rate in Hz
freqs <- c(500, 2000, 10000) # desired frequencies of output sounds for each column

sound <- istft(mat,f=sr,ovlp=50,wl=256,output = "Wave") # creates a sound
listen(sound)
istft 假设:



我的 mat 对象显然格式不正确,所以我不确定输出实际上是什么。我不知道如何将数据帧中的每一列强制转换为存储在 freqs 中的频率。

任何想法都会很棒。

最佳答案

实际上你的代码运行但有一个警告说



要解决此问题,您的 mat 必须具有可被 2 整除且小于 FFT 窗口长度 ( wl ) 的行数:

library(seewave)

# some dummy data, 3 columns
set.seed(7)
N = 128
df <- data.frame(f1=rnorm(N,30,5), f2=rnorm(N,40,10), f3=rnorm(N,30,10))
df[df<0] <- 0

mat <- as.matrix(df)
#no need to transpose
mat <- mat + 0i # istft() only works with complex numbers

sr <- 1000 # sample rate in Hz
freqs <- c(500, 2000, 10000) # desired frequencies of output sounds for each column

sound <- istft(mat, f=sr, ovlp=50, wl=256, output = "Wave") # creates a sound
listen(sound)

上面的代码不会给你那个警告。您可以单步执行 istft 中提供的示例的 ?istft 代码,并让您的代码查看导致警告的原因。

关于r - 将数据框列转换为一种声音,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43752124/

10-12 17:26
查看更多