linux - ALSA 有时在重新启动后不起作用(大约 30 个中的 1 个)
问题描述
几天来,我一直在努力解决这个问题。
我有一个用 C++ 编写的嵌入式应用程序,它使用 ALSA 驱动程序来播放一些音频。
大多数情况下,没有问题,但有时在重新启动后,音频无法正常工作,而且我尝试过的任何命令似乎都无法使其正常工作(alsactl restore,alsamixer 上的任何命令......)。
如果我再次重新启动系统,它很可能会正常工作。但是我想立即检测到问题并在不重新启动的情况下解决它。
我已经运行 alsa-info.sh 来比较损坏状态和正常状态之间的输出。当系统不播放任何音频时,我将节点 0x14 作为“IN”:
Node 0x14 [Pin Complex] wcaps 0x40018d: Stereo Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0001003c: IN OUT HP EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x01014030: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green
DefAssociation = 0x3, Sequence = 0x0
Pin-ctls: 0x20: IN
但是当声音正常时,引脚 ctls 设置为 0x40:OUT。这是最让我印象深刻的事情。虽然,可能会涉及更多的事情,因为我对 ALSA 了解不多。
我的内核是:Linux dmi 2.6.32.43 #32 SMP Thu Apr 18 10:57:48 CEST 2013 i686 GNU/Linux
有没有人有任何提示?
出于信息目的,我将完整的 alsa-info.sh 放在 Justpate 中,因为它很长: https ://justpaste.it/8d55a
解决方案
推荐阅读
- java - 使用 iText Java 签署 PDF 所有页面
- r - 如何通过 R 从数据帧中获取扬声器的数量
- hashicorp-vault - 如何知道用于连接保险库的保险库令牌的有效性?
- c# - C# EF 查询优化
- c++ - 我在阅读和打印课程时遇到问题
- c# - 如何使用 C# 代码呈现 TagHelper,而 TagHelper 需要一些 HTML 内容?
- javascript - Picktime 时间选择器在启用后未禁用时间
- apache-spark - AWS EMR Spark 作业在分区或位置更改时读取 Glue Athena 表
- python - 录制算法:OSError:[Errno -9998] pyaudio 中的通道数无效
- openlayers - OpenLayers:我可以以 POST 方式使用 getGetFeatureInfoUrl 吗?