【问题标题】:Real-time audio analysis with R使用 R 进行实时音频分析
【发布时间】:2020-08-05 22:04:56
【问题描述】:

是否可以使用 R 对通过计算机麦克风录制的音频执行实时(或以最小延迟)分析?

虽然 R 有一些完善的包用于分析音频文件(例如包 seewave)或录制声音(包 audio),但我找不到如何访问实时麦克风数据。

最终目标是分析记录信号的频率混合和幅度,就像这里使用 Python 完成的那样:https://stackoverflow.com/a/40157297/4862822

如果我能找到一些可以开始的内容,我们将提供 MWE 作为编辑。

【问题讨论】:

  • 正如你提到的,这在 C(++) 中更容易。如果纯 R 方法无效,您可以使用 Rcpp 来弥补差距。
  • 由于 R 语言的同步特性,我认为这在纯 R 中并不容易实现。如前所述,您最好使用 Python 或 C++ 找到不同的方法。

标签: r audio real-time


【解决方案1】:

您可以使用包audio从计算机的麦克风实时异步填充缓冲区:https://cran.r-project.org/web/packages/audio/

虽然很笨重,但它可以用于使用 R 进行实时音频分析。下面是一个示例,它在 5 秒内从麦克风记录到缓冲区中。以 1 秒为间隔,将前 1 秒内记录的最大分贝满量程 (dB FS) 输出到控制台。出于这个简单示例的目的,我只是使用 Sys.sleep() 暂停直到下一个间隔:

library(audio)

sample_rate <- 44100
seconds_to_record <- 5
num_channels <- 1
reporting_interval_seconds <- 1

# allocate buffer to record into
buffer <- rep(NA_real_, sample_rate * seconds_to_record)

# start recording into the buffer
rec <- record(buffer, sample_rate, num_channels)

for (reports in seq(reporting_interval_seconds, seconds_to_record, reporting_interval_seconds)){
  Sys.sleep(reporting_interval_seconds)
  analysis_samples <- (((reports - 1) * sample_rate) + 1) : (reports * sample_rate)
  abs_max <- max(abs(buffer[analysis_samples]), na.rm = TRUE)
  print(sprintf('Max Value = %2.3f dB FS', 20*log10(abs_max) ))
}

# play back the buffer
play(buffer)

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2022-01-17
    • 2011-11-16
    • 2017-04-24
    • 2010-10-16
    • 1970-01-01
    • 2014-01-12
    • 2010-11-18
    • 2021-01-21
    相关资源
    最近更新 更多