You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中从WAV文件或提取的信号直接获取Mel Spectrogram?

从WAV文件或提取信号生成梅尔频谱(Mel Spectrogram)

当然可以,结合你已安装的R包,有几种直接生成梅尔频谱的方式,以下是具体实现:

方法1:用seewave包处理(支持WAV文件/已提取信号)

seewave的mel和melfilterbank可配合基础频谱生成步骤,快速得到梅尔频谱。

从WAV文件直接处理

library(seewave)

# 读取目标WAV文件
wav <- readWave("your_audio.wav")

# 生成线性频谱矩阵(关闭自动绘图)
spec <- spectro(wav, plot = FALSE)

# 创建梅尔滤波器组
mel_filters <- melfilterbank(nfreq = nrow(spec$amp), f = wav@samp.rate, nmel = 40)

# 将线性频谱通过梅尔滤波器,得到梅尔频谱
mel_spec <- mel_filters %*% spec$amp

从已提取的信号处理

如果已经拿到单声道信号向量(比如wav@left):

# 假设sig是已提取的单声道信号,samp_rate为采样率
sig <- wav@left
samp_rate <- wav@samp.rate

# 计算信号的线性频谱
spec <- spectro(sig, f = samp_rate, plot = FALSE)

# 生成梅尔滤波器并转换频谱
mel_filters <- melfilterbank(nfreq = nrow(spec$amp), f = samp_rate, nmel = 40)
mel_spec <- mel_filters %*% spec$amp

方法2:用torchaudio包(更简洁的一站式生成)

torchaudio提供了封装好的梅尔频谱转换函数,操作更直接:

library(torchaudio)

# 读取WAV文件并生成梅尔频谱
waveform <- torchaudio_load("your_audio.wav")[[1]]
sample_rate <- torchaudio_load("your_audio.wav")[[2]]

# 定义梅尔频谱转换规则
mel_transform <- torchaudio_transforms_MelSpectrogram(
  sample_rate = sample_rate,
  n_mels = 40,
  n_fft = 1024,
  hop_length = 256
)

# 生成梅尔频谱
mel_spec <- mel_transform(waveform)

如果是已提取的信号,只需将R向量转为torch张量即可:

# 将R格式信号转为torch张量(添加通道维度)
sig_tensor <- torch_tensor(sig, dtype = torch_float32)$unsqueeze(1)

# 生成梅尔频谱
mel_spec <- mel_transform(sig_tensor)

注意事项

  • 可通过调整nmel(梅尔滤波器数量)、n_fft(FFT窗口大小)、hop_length(帧移)等参数,控制梅尔频谱的时间/频率分辨率。
  • seewave生成的mel_spec是R矩阵格式,torchaudio生成的是torch张量,可通过as.array()转换为R原生格式用于后续分析。

内容的提问来源于stack exchange,提问作者Murali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:22:06