使用R语言audio包在Mac Sonoma系统下无法录音的问题
R语言audio包在Mac Sonoma下录音全为0的问题解决
问题详情
- 设备:新款Mac mini,系统OS Sonoma 14.2.1
- 使用工具:R语言
audio包,当前驱动为macosx - 异常现象:
- 外接麦克风在系统层面完全正常(声音面板显示拾音正常、可通过Siri交互、语音备忘录能正常录音)
play(sin(1:10000/20))可正常播放声音- 执行录音代码后,录制数据全为0,播放无声音
- 复现代码:
# 设置录音时长 rec_time <- 5 # 录音流程 Samples<-rep(NA_real_, 44100 * rec_time) # 定义采样数量 print("Start speaking") [1] "Start speaking" audio_obj <-record(Samples, 44100, 1) # 创建44100采样率、单声道的录音实例(录音时系统声音面板显示麦克风正在拾音,同时语音备忘录也能正常录音) wait(6) rec <- audio_obj$data # 获取录制数据 which(rec!=0) integer(0) play(rec) # 无声音输出
可行解决方案
1. 检查并授予R麦克风权限
MacOS的隐私权限可能限制了R访问麦克风:
- 打开「系统设置」→「隐私与安全性」→「麦克风」
- 找到R.app或你使用的IDE(如RStudio),确保麦克风权限已开启
- 重启R/IDE后重新测试录音
2. 显式指定外接麦克风设备
audio包可能默认选中了无内置麦克风的Mac mini的虚拟设备,需手动指定外接麦克风:
# 列出所有可用音频设备,找到外接麦克风对应的ID devices() # 替换device参数为你的外接麦克风ID(示例为2,实际以devices输出为准) audio_obj <- record(Samples, 44100, 1, device = 2) wait(6) rec <- audio_obj$data
3. 调整录音代码写法
尝试不预先创建采样向量,直接用record函数的duration参数指定时长:
rec_time <- 5 # 直接录制,自动处理采样数量 audio_obj <- record(rate = 44100, channels = 1, duration = rec_time) wait(rec_time + 1) # 留1秒缓冲 rec <- audio_obj$data # 检查是否有非零数据 which(rec != 0) play(rec)
4. 更新或重装audio包
可能存在包版本与Sonoma系统的兼容问题:
# 卸载现有包 remove.packages("audio") # 重新安装 install.packages("audio") library(audio)
内容的提问来源于stack exchange,提问作者Barry Zeeberg
相关产品推荐
相关产品推荐

