7

OrangePiPC2升级Armbian后无法发声的解决方案

 2 years ago
source link: https://www.lujun9972.win/blog/2018/09/27/orangepipc2%E5%8D%87%E7%BA%A7armbian%E5%90%8E%E6%97%A0%E6%B3%95%E5%8F%91%E5%A3%B0%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/index.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

OrangePiPC2升级Armbian后无法发声的解决方案

某一次在对OrangePiPC2进行系统升级后,提示内核已更新,需要进行重启。

然而在重启后发现播放音乐不再有声音了。

  1. 怀疑是不是音量被调成0了,因此运行 alsamixer,发现提示 This sound device does not have any controls.

    screenshot-01.png

  2. 注意到现在这张声卡是hdmi的,按下 F6 选择其他声卡,可以发现还有一张 H3 Audio Codec 声卡

    screenshot-02.png

  3. 而选择 H3 Audio Codec 声卡可以看到熟悉的音量控制界面

    screenshot-03.png

  4. 大致可以推测出,由于我的音响是接到 H3 Audio Codec 上的,而alsa默认声卡变成了 hdmi 从而导致了播放音乐没有声音
  5. 将ALSA默认声卡修改为 H3 Audio Codec, 步骤为:

    查看声卡极其对应的编号

    cat /proc/asound/cards
    echo 或者
    aplay -l | awk -F \: '/,/{print $2}' | awk '{print $1}' | uniq
    
     0 [allwinnerhdmi  ]: allwinner_hdmi - allwinner,hdmi
                          allwinner,hdmi
     1 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                          H3 Audio Codec
    或者
    allwinnerhdmi
    Codec
    

    可以看到我想要的默认声卡名为 Codec,其编号为1,那么创建文件 /etc/asound.conf 填入下面内容

    pcm.!default {
        type hw
        card 1
    }
    
    ctl.!default {
        type hw           
        card 1
    }
    

    其中的 1 就是声卡对应的编号

  6. 再次播放音乐,就可以正常发声了。

另一种解决方法

其实还有另一种解决方法就是控制声卡module的载入顺序,让 H3 Audio Codec 声卡成为第一顺位的声卡就行了. 方法如下:

  1. 查看加载的声卡驱动

    lsmod |grep snd
    
    snd_soc_hdmi_codec     16384  1
    snd_soc_simple_card    16384  0
    snd_soc_simple_card_utils    16384  1 snd_soc_simple_card
    snd_soc_core          155648  6 sun4i_i2s,sun8i_codec_analog,snd_soc_hdmi_codec,sun4i_codec,snd_soc_simple_card_utils,snd_soc_simple_card
    snd_pcm_dmaengine      16384  1 snd_soc_core
    snd_pcm               106496  4 sun4i_i2s,snd_soc_hdmi_codec,snd_soc_core,snd_pcm_dmaengine
    snd_timer              32768  1 snd_pcm
    

    你会发现查出来了好多module,但只有两个module是不被别人引用的: snd_soc_hdmi_codecsnd_soc_simple_card.

    可以推测出 snd_soc_hdmi_codec 对应的是 hdmi 声卡, snd_soc_simple_card 对应的是 H3 Audio Codec 声卡

  2. 创建 /etc/modprobe.d/alsa-base.conf 文件,填入下面内容

    options snd_soc_hdmi_codec index=-1
    options snd_soc_simple_card index=-2
    

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK