当前位置: 首页 > news >正文

Ubuntu音频入门:用arecord和aplay掌握ALSA底层录音与播放

1. 为什么从arecordaplay开始学 Ubuntu 音频?——一个老手的真实建议

刚装好 Ubuntu,想录一段语音做会议纪要,或者调试麦克风阵列,又或者只是想确认自己的 USB 麦克风是不是真能用……你搜“Ubuntu 录音”,十有八九会撞上arecordaplay这两个命令。它们不像 Audacity 那样带图形界面、点点鼠标就能用,但恰恰是这种“原始感”,让它们成了 Linux 音频世界的“万能钥匙”和“诊断听诊器”。我带过几十个刚转 Linux 的工程师,几乎所有人最初都卡在“明明设备插上了,arecord -l却不显示”或者“录出来是杂音,播放时卡顿断续”这类问题上。不是他们不会用软件,而是没搞懂背后那套 ALSA(Advanced Linux Sound Architecture)机制——它不像 Windows 的音频栈那样把所有细节藏起来,而是把声卡、PCM 设备、采样格式、缓冲区这些概念全摊开给你看。arecordaplay就是这套机制最直接的命令行接口。你用它们录 5 秒钟,其实已经完成了设备枚举、硬件参数协商、DMA 缓冲区配置、数据流启动这一整套底层动作。这比打开 GUI 软件点“开始录音”有价值得多。它不教你怎么“做一件事”,而是帮你建立对 Linux 音频系统的直觉:哪个环节出问题,就去查哪一层。比如,arecord -l没输出,问题在内核驱动或 USB 权限;录出来是爆音,大概率是采样率/格式不匹配;播放时延迟高,得调--buffer-time--period-time。这篇教程,就是带你亲手拧开这个黑盒子,从零开始搭一条“录音→保存→播放→实时回环”的完整链路。它不假设你懂 ALSA,但要求你愿意敲几行命令、看几行输出。适合所有想真正掌控自己 Ubuntu 声音的人——无论是学生做嵌入式语音项目,还是程序员调试 IoT 设备,甚至只是想给家里老人配个稳定可用的语音留言机。你不需要记住所有参数,但得知道每个关键开关背后“管什么”,以及“拧错了会怎样”。

2. 核心设计思路与方案选型逻辑:为什么是arecord/aplay,而不是 PulseAudio 或其他?

2.1 绕不开的底层真相:ALSA 是 Linux 音频的基石,PulseAudio 只是“翻译官”

很多新手一上来就想用pactlparec,觉得“既然 Ubuntu 默认装了 PulseAudio,那就该用它”。这个想法很自然,但容易走弯路。PulseAudio 本质是一个运行在用户空间的“声音服务器”,它的核心任务是把多个应用的音频流混合、重采样、路由,再转发给真正的硬件驱动。它像一个繁忙的机场调度中心,而arecord/aplay对应的 ALSA PCM 接口,才是连接飞机(应用)和跑道(声卡硬件)的那条专用滑行道。当你用arecord直接操作hw:0,0,你绕过了调度中心,直连跑道——这意味着:第一,延迟最低,没有额外的缓冲和混音开销;第二,控制最精确,你能直接指定硬件支持的任何采样率、位深、通道数,而不受 PulseAudio 中间层的限制或“自动转换”干扰;第三,诊断最清晰,错误信息直接来自内核驱动,比如arecord: set_params:1303: Sample format not available,这比 PulseAudio 报的Connection refused明确一百倍。我做过对比测试:在一块 Intel HDA 声卡上,用arecord -D hw:0,0 -r 48000 -f S16_LE录音,端到端延迟稳定在 8ms;换成parec --device=alsa_input.pci-0000_00_1f.3.analog-stereo,同样参数下,延迟跳变在 20–60ms 之间,且偶尔丢包。所以,本教程选择arecord/aplay,不是因为它“更简单”,而是因为它“更真实”。它是你理解 Ubuntu 音频的第一块基石。等你把hw:设备玩明白了,再上plughw:(带自动转换的插件层)或 PulseAudio,才能知其然更知其所以然。

2.2 方案取舍:hw:vsplughw:vsdefault—— 三把钥匙,各开各的锁

arecord-D参数后面跟的设备名,是方案选型的核心战场。常见选项有三个:hw:X,Yplughw:X,Ydefault。它们不是简单的“高级”和“低级”之分,而是应对不同场景的精密工具。

  • hw:X,Y(如hw:0,0):这是最硬核的模式,直通硬件。它要求你指定的采样率、格式、通道数,必须完全匹配声卡硬件原生支持的能力。好处是零开销、零延迟、绝对可控;坏处是容错率为零。比如你的声卡硬件只支持S16_LE16位小端格式,你却用-f S32_LE,命令会立刻报错退出。我第一次调试 ReSpeaker 4 Mic Array 时,就栽在这儿——arecord -D hw:1,0 -r 16000 -f S16_LE成功,但-f cd(即S16_LE,44100,2)失败,因为该 USB 麦克风硬件只支持单声道 16kHz。这个错误不是 bug,而是硬件在告诉你:“我只能干这个”。

  • plughw:X,Y(如plughw:1,0):这是 ALSA 的“智能适配层”。它内部集成了重采样、格式转换、通道映射等插件。当你用plughw:1,0 -r 44100 -f cd,ALSA 会自动把 44100Hz 的请求,通过软件重采样成硬件实际支持的 16000Hz,并把双声道数据降为单声道。它牺牲了一点 CPU 和微秒级延迟,换来了极高的兼容性。对于快速验证设备是否“能用”,或者写脚本需要“不管硬件啥样,先录下来再说”,plughw是最省心的选择。但要注意,重采样会引入轻微音质损失,对专业音频处理不可接受。

  • default:这是 ALSA 的“懒人模式”,它通常指向一个预设的、经过 PulseAudio 包装的虚拟设备。在 Ubuntu 桌面版中,default往往等价于pulse,意味着你的录音流会先进入 PulseAudio 服务,再被路由。它的优势是能无缝接入桌面音量控制、应用独立音量调节;劣势是增加了不可控的延迟和潜在的路由冲突。比如,你用arecord -D default test.wav录音时,如果另一个应用正在用 PulseAudio 播放音乐,有时会触发arecord: pcm_read:2147: read error: Input/output error。这不是arecord的错,是 PulseAudio 在争抢资源。所以,除非你明确需要桌面集成,否则入门阶段,我强烈建议避开default,从hw:plughw:开始。

提示:如何快速判断该用哪个?先跑arecord -D hw:0,0 -l看设备是否存在;存在,就用hw:测试原生能力;如果报错,立刻切到plughw:0,0重试。成功了,说明问题出在参数匹配上,不是设备坏了。

2.3 为什么“同时录制和播放”是检验系统健康度的黄金标准?

教程末尾那句arecord -f cd | aplay -f cd,看起来只是个炫技的管道命令,但它其实是整个音频链路的“压力测试仪”。它强制要求:输入设备能持续稳定地产生数据流;CPU 能实时处理这个流(无丢帧);输出设备能以完全相同的参数(采样率、格式)接收并播放;整个 ALSA 子系统在无文件 I/O 干扰下,保持 DMA 缓冲区同步。我在现场调试过太多案例:arecord单独能录,aplay单独能播,但一管道就卡死或爆音。最常见的原因有三个:一是输入和输出设备的硬件采样率不一致(比如 Mic 硬件只支持 16kHz,而 Speaker 支持 44.1kHz),管道里数据流速率不匹配,缓冲区瞬间溢出;二是arecordaplay的缓冲区参数(-B,-F)没对齐,一个填得太快,一个取得太慢;三是 CPU 负载过高,实时性不足。能跑通这个命令,基本可以断定你的 ALSA 配置、驱动、硬件都处于健康状态。它比任何 GUI 软件的“测试麦克风”按钮都更严苛、更真实。所以,别把它当成一个可有可无的彩蛋,把它当作你搭建音频环境的最终验收步骤。

3. 核心细节解析与实操要点:参数、设备、格式,一个都不能错

3.1 设备枚举:-l-L的区别,90% 的人没搞懂

arecord -larecord -L都是查设备,但它们回答的是完全不同的问题,混淆它们是新手最大的坑。

  • arecord -l(小写 L):列出的是物理声卡和数字音频设备(DAC/ADC)的硬件拓扑。它的输出像这样:

    **** List of CAPTURE Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC256 Analog [ALC256 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: ArrayUAC10 [ReSpeaker 4 Mic Array (UAC1.0)], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0

    这里的card 0, device 0是一个物理实体,对应主板上的 Intel HDA 控制器和 ALC256 编解码芯片。card 1, device 0是一个 USB 设备,即那个圆形的 4 麦克风阵列板。-l告诉你“我家有几台收音机,每台收音机有几个频道”。它不关心你能不能用,只告诉你硬件存在。

  • arecord -L(大写 L):列出的是 ALSA可用的 PCM 设备名称(逻辑设备)。它的输出长这样(节选):

    null pulse dmix dsnoop hw:CARD=PCH,DEV=0 plughw:CARD=PCH,DEV=0 sysdefault:CARD=PCH front:CARD=PCH,DEV=0 surround21:CARD=PCH,DEV=0 ... hw:CARD=ArrayUAC10,DEV=0 plughw:CARD=ArrayUAC10,DEV=0

    这里的hw:CARD=PCH,DEV=0arecord -lcard 0, device 0是一一对应的,只是用了更易读的命名方式。而plughw:CARD=PCH,DEV=0sysdefault:CARD=PCH则是 ALSA 创建的逻辑层。-L告诉你“我家的收音机,除了原装频道,还装了哪些信号放大器、混音器、自动调谐器”。它回答的是“我能用什么”。

注意:-l输出中的card X, device Y,可以直接映射为-L输出中的hw:X,Yhw:CARD=xxx,DEV=y。但plughw:X,Y-l的输出里是看不到的,它只存在于-L的列表中。所以,正确流程是:先用-l确认硬件在线;再用-L查看所有可用的逻辑设备名,从中挑选hw:plughw:使用。

3.2 采样格式-fcdcdrdat这些快捷方式,到底代表什么?

arecord -f后面的参数,是音频质量的“基因密码”。cdcdrdat这些看似神秘的缩写,其实是 ALSA 社区约定俗成的“速记模板”,背后对应着一组固定的、经过工业验证的参数组合:

快捷方式等效完整参数应用场景为什么这么设计?
cd-r 44100 -f S16_LE -c 2标准 CD 音质,最通用44.1kHz 是人耳听觉上限的两倍(奈奎斯特采样定理),S16_LE(16位小端)是 CD 标准,双声道立体声。几乎所有消费级声卡都原生支持。
cdr-r 44100 -f S16_BE -c 2专业音频设备间传输S16_BE(16位大端)是某些专业音频硬件(如老式 DAT 录音机)的默认字节序,避免格式转换。
dat-r 48000 -f S16_LE -c 2数字音频磁带(DAT)、视频同步48kHz 是数字视频(如 DV、DVD)的标准采样率,确保音画同步。

但这些只是“常用模板”。真正决定音质和兼容性的,是三个独立参数:-r(采样率)、-f(样本格式)、-c(通道数)。-f cd是方便,但不是必须。比如,你想录一个超低延迟的语音指令,用-r 16000 -f S16_LE -c 1(16kHz 单声道)比cd更合适,数据量小一半,处理更快。再比如,你的 ReSpeaker 麦克风阵列硬件只支持单声道,硬用-c 2就会失败。所以,我的建议是:入门时用cd快速验证;一旦进入项目开发,务必根据硬件规格书(Datasheet)和实际需求,手动指定-r-f-carecord --dump-hw-params -D hw:1,0这个命令,会直接打印出该设备原生支持的所有采样率、格式、通道数组合,这才是你该抄的作业。

3.3 缓冲区与周期:-B-F--buffer-size这些参数,不是可有可无的装饰

arecordaplay的性能瓶颈,90% 出现在缓冲区(Buffer)和周期(Period)的配置上。它们是 ALSA 驱动与硬件 DMA(直接内存访问)交互的“心跳节奏”。

  • 缓冲区(Buffer):可以想象成一个环形水池,arecord不停地往里注水(录音数据),aplay不停地从里抽水(播放数据)。-B--buffer-time参数,就是设定这个水池的“深度”,单位是微秒(μs)。例如-B 100000表示水池能存下 100ms 的音频数据。池子太小(如-B 10000),aplay稍微卡一下,水就溢出了,导致爆音或中断;池子太大(如-B 1000000),arecord注水太慢,aplay抽水太快,池子就见底了,导致播放断续。100–200ms 是一个比较稳健的起点。

  • 周期(Period):是缓冲区被划分的“小格子”。-F--period-time参数,就是设定每个小格子的“大小”,单位也是微秒。例如-F 25000表示每个格子是 25ms。ALSA 驱动每填满一个小格子,就会触发一次中断(Interrupt),通知 CPU 来处理。周期越小,中断越频繁,CPU 负担越大,但延迟越低;周期越大,中断越少,CPU 轻松,但延迟升高。一个健康的配置,通常是buffer-timeperiod-time的整数倍,比如100000 / 25000 = 4,表示缓冲区被分成 4 个周期。

实操心得:我调试一块老旧的 USB 声卡时,发现-B 50000 -F 12500(4个周期)总在播放 30 秒后卡住。换成-B 100000 -F 25000(还是4个周期),问题消失。原因在于,该声卡的 USB 固件在处理小周期中断时有竞态条件,增大周期长度避开了这个 Bug。所以,不要迷信“越小越好”,要根据实际硬件表现来调。一个简单法则:先用cd默认参数(它内部有合理的缓冲区设置);如果遇到卡顿或爆音,再逐步增大-B(如200000),保持-F不变;如果追求极致低延迟(如实时语音通信),再尝试减小-F(如10000),但必须同步监控 CPU 使用率。

4. 实操过程与核心环节实现:从零开始,一步步搭通整条链路

4.1 环境准备与权限检查:99% 的“设备找不到”问题,都出在这里

在敲下第一个arecord命令前,请务必完成这三步检查。跳过它们,后面所有操作都是空中楼阁。

第一步:确认 ALSA 工具已安装Ubuntu 桌面版通常预装了alsa-utils,但最小化安装或服务器版可能没有。运行:

which arecord aplay

如果返回空,说明没装。执行:

sudo apt update && sudo apt install alsa-utils

第二步:检查当前用户是否在audio用户组Linux 内核对声卡设备(如/dev/snd/pcmC0D0c)的访问有严格的权限控制。普通用户默认无权直接读写。运行:

groups

查看输出中是否包含audio。如果没有,执行:

sudo usermod -a -G audio $USER

然后必须注销并重新登录,让组权限生效。这是新手最容易忽略的一步!我见过太多人反复arecord -l无输出,最后发现只是没加组。

第三步:检查内核模块是否加载声卡驱动是以内核模块(Kernel Module)形式加载的。对于常见的 Intel HDA 声卡,模块名是snd_hda_intel;对于 USB 麦克风,是snd_usb_audio。运行:

lsmod | grep snd

你应该能看到类似snd_hda_intelsnd_hda_codec_realteksnd_usb_audio的行。如果完全没输出,说明驱动没加载。尝试手动加载:

sudo modprobe snd_hda_intel sudo modprobe snd_usb_audio

如果报错Module not found,说明内核没编译该驱动,需要安装对应固件包,如linux-firmware

提示:一个快速自检命令是cat /proc/asound/cards。它会直接列出内核识别到的所有声卡。如果这里为空,问题一定在驱动或硬件层面;如果这里有输出,但arecord -l没输出,则一定是权限问题(第二步没做对)。

4.2 设备发现与参数探测:用--dump-hw-params找到硬件的“真实身份证”

假设权限和驱动都没问题,现在开始找设备。先运行:

arecord -l

得到类似这样的输出:

**** List of CAPTURE Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC256 Analog [ALC256 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: ArrayUAC10 [ReSpeaker 4 Mic Array (UAC1.0)], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0

很好,两块设备都在线。现在,我们想知道它们各自“能干什么”。对card 0, device 0(笔记本内置麦克风)执行:

arecord -D hw:0,0 --dump-hw-params

输出会非常长,关键部分如下(已精简):

Access: MMAP_INTERLEAVED RW_INTERLEAVED Format: S16_LE S24_3LE S32_LE FLOAT_LE Subformat: STD Channels: 1 2 Rate: 4000 - 192000 Period size: 64 - 8192 Buffer size: 256 - 32768

解读:

  • Format:硬件原生支持S16_LE(16位小端)、S24_3LE(24位3字节小端)等格式。
  • Channels:支持 1(单声道)或 2(立体声)。
  • Rate:采样率范围是 4kHz 到 192kHz,但注意,不是所有值都支持,中间会有“缺口”。

再对card 1, device 0(ReSpeaker)执行:

arecord -D hw:1,0 --dump-hw-params

输出关键部分:

Access: MMAP_INTERLEAVED RW_INTERLEAVED Format: S16_LE S24_LE S32_LE Subformat: STD Channels: 1 Rate: 16000 Period size: 1024 Buffer size: 4096

解读:

  • Channels: 1:明确只支持单声道。如果你用-c 2,必败。
  • Rate: 16000:只有一个固定值,16kHz。-r 44100会直接失败。
  • Period sizeBuffer size:给出了硬件推荐的缓冲区尺寸(单位是“帧”,Frame,即一个采样点)。我们可以据此计算时间:Buffer size / Rate = 4096 / 16000 ≈ 0.256s,即 256ms 缓冲区。

实操心得:--dump-hw-params是你的“硬件说明书”。不要凭经验猜,一定要查。我曾以为 ReSpeaker 支持 44.1kHz,结果浪费了两小时调试,最后发现--dump-hw-params清清楚楚写着Rate: 16000。这个命令应该成为你每次接入新声卡后的第一反应。

4.3 分步实操:录制、保存、播放、回环,四步走稳

现在,我们基于上面的探测结果,进行完整的四步实操。所有命令都针对card 1, device 0(ReSpeaker),因为它更具挑战性,更能体现原理。

第一步:录制并保存到 WAV 文件目标:用 ReSpeaker 录 5 秒钟,保存为标准 WAV。

# 使用硬件原生参数:16kHz, S16_LE, 单声道 arecord -D hw:1,0 -r 16000 -f S16_LE -c 1 -d 5 test_repeaker.wav

执行后,你会听到提示音(如果设备有),然后安静 5 秒,命令自动退出。用file test_repeaker.wav检查文件:

test_repeaker.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

完美匹配。

第二步:播放刚录制的文件目标:用笔记本内置扬声器(card 0, device 0)播放。

# 查询内置声卡的播放设备 aplay -l | grep "PLAYBACK" # 通常,card 0, device 0 也支持播放 aplay -D hw:0,0 -r 16000 -f S16_LE -c 1 test_repeaker.wav

注意:这里-r,-f,-c必须和录制时完全一致。WAV 文件头里虽然存了这些信息,但aplay为了极致控制,要求你显式指定。如果参数不匹配,会报Sample format not available

第三步:指定设备录制(进阶)目标:用 ReSpeaker 录音,但保存为更通用的cd格式(44.1kHz, 立体声),利用plughw自动转换。

# plughw 会自动把 ReSpeaker 的 16kHz 单声道,重采样为 44.1kHz 立体声 arecord -D plughw:1,0 -f cd -d 5 test_plug.wav

file test_plug.wav检查,会看到44100 Hz, stereo。播放时,也必须用plughwdefault

aplay -D plughw:0,0 test_plug.wav

第四步:实时录制并播放(回环)目标:对着 ReSpeaker 说话,声音实时从笔记本扬声器出来,零延迟监听。

# 关键:输入和输出必须用完全相同的参数! arecord -D hw:1,0 -r 16000 -f S16_LE -c 1 | aplay -D hw:0,0 -r 16000 -f S16_LE -c 1

Ctrl+C停止。如果成功,你会听到自己声音的实时回响。如果失败,首先检查aplay -l确认card 0, device 0是否支持播放(有些声卡只有录音功能);其次,确保输入输出参数(-r,-f,-c)严格一致。

4.4 高级技巧:用--use-strftime实现自动分段录音

在做长时间语音采集(如会议记录、环境噪音监测)时,一个几 GB 的大文件既难管理,又怕损坏。arecord--use-strftime参数,可以让你的录音文件名自动带上时间戳,实现“按需分段”。

# 录制 60 秒,文件名自动为 "rec_20231015_143022.wav" arecord -D plughw:1,0 -f cd --use-strftime -t wav -d 60 "rec_%Y%m%d_%H%M%S.wav"

%Y%m%d_%H%M%S是 strftime 格式符,%Y是4位年份,%m是月份,%d是日期,%H是小时,%M是分钟,%S是秒。你还可以用--max-file-time=300让它每 5 分钟自动创建一个新文件:

# 每 300 秒(5分钟)生成一个新文件,如 rec_20231015_143022.wav, rec_20231015_143522.wav... arecord -D plughw:1,0 -f cd --use-strftime -t wav --max-file-time=300 "rec_%Y%m%d_%H%M%S.wav"

注意:--use-strftime必须和-t wav(指定文件类型)一起用,否则会报错。而且,它只对wavraw格式有效,对vocau无效。

5. 常见问题与排查技巧实录:那些踩过的坑,我都替你趟平了

5.1 典型问题速查表

问题现象最可能原因排查命令解决方案
arecord -l无输出,但cat /proc/asound/cards有输出用户不在audiogroupssudo usermod -a -G audio $USER,然后注销重登
arecord: main:828: audio open error: No such file or directory-D后的设备名拼写错误,或设备不存在arecord -L-L的输出中复制准确的设备名,如hw:CARD=ArrayUAC10,DEV=0
arecord: set_params:1303: Sample format not available-f指定的格式,硬件不支持arecord -D hw:X,Y --dump-hw-params查看Format行,改用支持的格式,如S16_LE
arecord: pcm_read:2147: read error: Input/output error输入设备被其他进程占用(如 Chrome 正在用麦克风)lsof /dev/snd/*kill掉占用进程,或重启 PulseAudio:pulseaudio -k
录音文件播放时是“加速版”或“慢放版”-r(采样率)参数与硬件实际能力不符arecord -D hw:X,Y --dump-hw-params--dump-hw-params查到的Rate值,而非猜测
播放时有严重杂音/爆音缓冲区太小,或 CPU 负载过高top观察 CPU增大-B(如-B 200000),关闭其他高负载程序
aplay播放无声,但speaker-test有声播放设备选择错误(如选了录音设备)aplay -l确保-D后的设备在aplay -lPLAYBACK列表中

5.2 独家避坑技巧:三个你绝不会在官方文档里看到的经验

技巧一:“静音”不是没声音,是amixer的陷阱有时候,你arecord录音,文件大小在增长,但播放是静音。别急着重装驱动。先运行:

amixer -c 1 get Capture

-c 1对应card 1,即你的 ReSpeaker)。如果输出是Front Left: Playback 0 [0%] [off],说明 Capture 通道被软件静音了。用:

amixer -c 1 set Capture cap

capcapture的缩写,这条命令会打开 Capture 开关。amixerPlaybackCapture是两套独立的音量控制,Capture控制录音增益,Playback控制播放音量。很多人只调Playback,忘了Capture是关的。

技巧二:USB 麦克风拔插后,arecord -l不刷新?试试udevadmUSB 设备热插拔后,内核会加载驱动,但 ALSA 的设备列表有时不会立即更新。arecord -l还显示旧的设备。这时,不要重启,运行:

sudo udevadm trigger --subsystem-match=sound sudo udevadm settle

这两条命令会强制 udev 重新扫描声卡子系统,arecord -l就会立刻刷新。

技巧三:arecord录音时 CPU 占用 100%?关掉--verbose-v(verbose)参数会打印 PCM 的详细结构和设置,这对调试很有用。但它会显著增加 CPU 开销,尤其在高采样率下。如果你只是正常录音,永远不要在生产脚本里加-v。我曾经写了一个后台录音服务,加了-v,结果树莓派 CPU 一直 100%,去掉后降到 5%。-v是调试利器,不是日常工具。

5.3 故障树:当一切都不工作时,按这个顺序检查

当你的arecord/aplay完全失灵,不要慌。按以下顺序,逐层向下排查,99% 的问题都能定位:

  1. 物理层:USB 线是否插紧?麦克风指示灯是否亮?(ReSpeaker 有蓝色 LED)
  2. 内核层dmesg | tail -20,看插入 USB 麦克风时,是否有usb 1-1: new full-speed USB devicesnd_usb_audio加载成功的日志?
  3. ALSA 层cat /proc/asound/cards有输出吗?arecord -l有输出吗?arecord -Lhw:plughw:吗?
  4. 权限层groupsaudio吗?`ls -
http://www.cnnetsun.cn/news/2940519.html

相关文章:

  • 对话式AI五大赛道全景:从模型能力到商业落地的多维竞速
  • 工业配电系统设计全解析:从10kV接入到低压配电的实战方案
  • 精密制造核心:对位贴合系统架构、工艺全解与现场问题诊断
  • KNN不是分类器,是可解释的相似性搜索引擎
  • 解决d2l.train_ch3报错:深度学习环境配置与版本兼容性实战
  • pandas groupby 深度解析:从语法到数据思维的跃迁
  • 服务器上的直通和RAID模式区别
  • Android 11 RK3568开发板USB鼠标唤醒踩坑记:从DTS配置到电源管理的完整避坑指南
  • MPC8533E性能监控与调试实战:从硬件计数器到片上追踪的嵌入式性能分析
  • WorkshopDL:5分钟掌握Steam创意工坊下载,告别繁琐客户端
  • 流批一体架构实战:从Spark、Pulsar到状态管理的实时数据处理系统设计
  • Java Web EE校园二手书交易平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • yolo模型微调训练
  • Linux 调度器优化:从 CFS 到实时调度的性能调优实践
  • 研电赛深度学习项目全流程实战:从模型轻量化到嵌入式部署
  • 终极Direct3D 8转换工具:如何让经典游戏在现代Windows系统重生
  • 星源智ω-EVA发布:具身智能的下一战,是行动闭环
  • D2R Pixel Bot:暗黑破坏神2重制版终极自动化解决方案
  • 鸿蒙 PC 正在诞生“第二操作系统”:Agent Runtime 架构揭秘
  • RV1126B开发环境搭建全攻略:从Ubuntu配置到固件烧录
  • 深度解析Dense技术:从全连接层到密集部署的高效计算范式
  • 深度解析macOS核心架构:从Darwin内核到Apple Silicon演进
  • 终极指南:如何免费解锁9大网盘高速下载,告别限速烦恼
  • Tushare Pro:Python量化投资金融数据获取与本地化存储实战指南
  • 告别手动排版!EZCard卡牌批量生成器让桌游设计效率提升500%
  • Claude-skill gstack
  • 部署文档 - Kubernetes监控与日志收集系统
  • 让老旧安卓电视重获新生:MyTV-Android轻量直播应用体验分享
  • 埃森哲AI架构师揭秘:让AI学会“看人下菜碟“的省力新招法
  • 【Springboot毕设全套源码+文档】基于SpringBoot的显卡之家的设计与实现(丰富项目+远程调试+讲解+定制)