gpt4 book ai didi

r - 将数据框列转换为一种声音

转载 作者:行者123 更新时间:2023-12-01 13:33:24 27 4
gpt4 key购买 nike

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

"a complex matrix resulting of a short-term Fourier transform".

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

任何想法都会很棒。

最佳答案

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

1: In xprim * win : longer object length is not a multiple of shorter object length

要解决此问题,您的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com