我有兴趣将我的数据转换成声音。我的数据在数据框中。每列代表特定频率下声音的相对幅度。每一行都是一个样本。样本以固定的采样率记录。我已经想出了如何使用 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/