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

如何在RStudio中批量运行M声学指数分析并解决相关报错

问题分析与解决方案

报错原因

  1. 直接将文件名字符串传入M()函数时,若文件读取逻辑未能自动识别采样率,会触发f参数缺失的错误;
  2. 手动添加f=48000后,M()函数误将文件名字符串当作数值型wave数据处理,导致fft()函数抛出非数值参数的错误;
  3. 单独运行时你大概率是先通过readWave()等函数将文件读取为wave对象(自带采样率信息),因此无需手动指定f。

修正后的代码方案

方案1:先读取为wave对象(推荐)

先将每个WAV文件读取为wave对象(内置采样率信息),再传入M()函数,无需手动指定f:

library(seewave)
library(tuneR) # readWave依赖该包,显式调用避免依赖问题

# 设置工作目录
setwd("/Users/fiene123/Desktop/samples Sounds/August27-28_outside_Unit14_1am")

# 获取目录下所有WAV文件(正则匹配更精准)
wav_files <- dir(pattern = "\\.wav$", ignore.case = TRUE)

# 初始化结果列表
results <- list()

# 循环处理每个文件
for (file_name in wav_files) {
  # 读取wave对象
  wave_data <- readWave(file_name)
  # 计算声学指数
  results[[file_name]] <- M(wave = wave_data, plot = FALSE)
}

方案2:直接传文件名并指定采样率

如果确认所有文件采样率均为48000,可直接传文件名并指定f:

library(seewave)

setwd("/Users/fiene123/Desktop/samples Sounds/August27-28_outside_Unit14_1am")
wav_files <- dir(pattern = "\\.wav$", ignore.case = TRUE)
results <- list()

for (file_name in wav_files) {
  # 明确指定文件名与采样率
  results[[file_name]] <- M(wave = file_name, f = 48000, plot = FALSE)
}

额外优化建议

  • 变量名避免歧义:不要用listcsv命名WAV文件列表;
  • 正则匹配更严谨:用\\.wav$精准匹配后缀为.wav的文件;
  • 列表元素命名:用文件名作为列表元素的键(results[[file_name]]),后续查看结果更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:25:19