基于R

基于R,r,audio,real-time,R,Audio,Real Time,是否可以使用R对通过计算机麦克风录制的音频进行实时(或以最小延迟)分析 虽然R有一些用于分析音频文件(如package seewave)或录制声音(package audio)的完善包,但我找不到如何实时访问麦克风数据 最终目标是分析所记录信号的混频和振幅,如这里使用Python所做的: 如果我能找到开始的内容,将提供MWE作为编辑。您可以使用软件包audio从计算机麦克风异步实时填充缓冲区: 虽然笨重,但它可以使用R进行实时音频分析。下面是一个示例,它可以在5秒内从麦克风记录到缓冲区。每隔1秒

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

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

最终目标是分析所记录信号的混频和振幅,如这里使用Python所做的:


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

您可以使用软件包
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)
库(音频)

正如您所提到的,这在C++中更容易实现。如果没有Purr R方法,你可以使用RCPP来弥补这个差距。因为R语言的同步特性,我认为这并不容易在纯R中实现。正如你提到的,你可以很好地找到一种不同的方法,使用Python或C++。