首页 > 系统相关 >Linux音频(2):pulseaudio

Linux音频(2):pulseaudio

时间:2024-05-02 17:01:04浏览次数:29  
标签:name -- 音频 pulseaudio cset Switch conf Linux

pulseaudio作为声音服务器,启动时根据配置文件对ALSA子系统进行配置,并作为后台进程进行声音重定向配置。

官方文档位于《Documentation – PulseAudio》,但是没有更多概括性介绍和设计功能介绍。《PulseAudio under the hood (gavv.net)》做了很好的补充,首先可以从这篇文档开始pulseaudio的理解。

1 pulseaudio框架

PulseAudio是一个声音服务器,启动时读取配置文件对ALSA系统Control进行配置。作为一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。PulseAudio的一个目的通过它是重定向所有声音流,包括那些试图访问硬件的进程。

 参考《PulseAudio》、《PulseAudio - ArchWiki (archlinux.org)》、《Modules – PulseAudio (www.freedesktop.org)》、《Linux音频系统研究(ALSA Udev PulseAudio)》。

2 pulseaudio启动

/etc/init.d/S50pulseaudio在系统启动时被调用,启动pulseaudio进程:
#!/bin/sh
#
# Starts pulseaudio.
#


start() {
    printf "Starting pulseaudio: "
    umask 077
    /usr/bin/pulseaudio &
#        --system \
#        --daemonize \
#        --disallow-module-loading \
#        --disallow-exit \
#        --exit-idle-time=-1 \
#        --use-pid-file \
#        --disable-shm
    echo "OK"
}
stop() {
    printf "Stopping pulseaudio: "
    PULSE_RUNTIME_PATH=/var/run/pulse /usr/bin/pulseaudio --kill
    echo "OK"
}
restart() {
    stop
    start
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart|reload)
    restart
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac

exit $?

3 RK3588相关pulseaudio配置

/etc/pulse/daemon.conf

/usr/share/alsa/alsa.conf

UCM定义了用户配置,pulseaudio在启动时对ALSA子系统进行配置(Use Case Configuration)。

/usr/share/alsa/ucm2/ucm.conf

Syntax 4

Define.V1 ""        # non-empty string to enable ucm v1 paths
Define.V2ConfD yes    # empty string to disable
Define.V2Module ""    # non-empty string to enable module name lookups (obsolete)
Define.V2Name ""    # non-empty string to enable driver & card name lookups (obsolete)

Include.libgen.File "/lib/generic.conf"  # private alsa-lib configuration

If.driver {
    Condition {
        Type String
        Empty "${CardNumber}"
    }
...
    False {

        #
        # The probed path when hw-card is found:
        #
        #   ucm2/conf.d/[${CardDriver}|${KernelDriver}]/${CardLongName}.conf
        #   ucm2/conf.d/[${CardDriver}|${KernelDriver}]/[${CardDriver}|${KernelDriver}].conf
        #   ucm2/${KernelModule}/${KernelModule}.conf (obsolete)
        #   ucm2/${CardDriver}/${CardLongName}.conf (obsolete)
        #   ucm2/${CardDriver}/${CardDriver}.conf (obsolete)
        #
...
        If.V2Name {
            Condition {
                Type String
                Empty "${var:V2Name}"
            }
            False.UseCasePath {--指定用户自动以配置文件。
                longname {
                    Directory "${CardDriver}"
                    File "${CardLongName}.conf"
                }
                driver {
                    Directory "${CardDriver}"
                    File "${CardDriver}.conf"
                }
            }
        }
    }
}

根据ucm.conf配置,对应的配置文件为:/usr/share/alsa/ucm2/conf.d/rockchip-es8388/rockchip-es8388.conf:

Syntax 2

Comment "Rockchip ES8388 card"

SectionUseCase."HiFi" {
    File "HiFi.conf"--读取HiFi.conf文件。
    Comment "Default"
}

SectionVerb {
    Value {
        MinBufferLevel "512"
    }

    EnableSequence [--默认启动Control配置流程。
        cset "name='Speaker Switch' off"
        cset "name='Headphone Switch' off"
        cset "name='Headset Mic Switch' off"
        cset "name='Main Mic Switch' off"
        cset "name='Speaker Switch' off"
        cset "name='Headphone Switch' off"
        cset "name='Headset Mic Switch' off"
        cset "name='Main Mic Switch' off"
        cset "name='PCM Volume' 192"--PCM默认音量。
        cset "name='Output 1 Playback Volume' 27"
        cset "name='Output 2 Playback Volume' 27"
        cset "name='Capture Digital Volume' 192"
        cset "name='Left Channel Capture Volume' 3"
        cset "name='Right Channel Capture Volume' 3"
        cset "name='Left Mixer Left Playback Switch' on"
        cset "name='Right Mixer Right Playback Switch' on"
        cset "name='Capture Mute' off"
        cset "name='Right PGA Mux' DifferentialR"
        cset "name='Left PGA Mux' DifferentialL"
    ]
}

SectionDevice."Speaker" {--外放喇叭。
    Comment "Speaker"

    ConflictingDevice [
        "Headphones"
    ]

    Value {
        PlaybackPriority 100
        PlaybackPCM "hw:${CardId}"
    }

    EnableSequence [
        cset "name='Speaker Switch' on"
    ]

    DisableSequence [
        cset "name='Speaker Switch' off"
    ]
}

SectionDevice."Mic" {--单Mic。
    Comment "Internal Microphone"

    ConflictingDevice [
        "Headset"
    ]

    Value {
        CapturePriority 100
        CapturePCM "hw:${CardId}"
    }

    EnableSequence [
        cset "name='Differential Mux' Line 2"
        cset "name='Main Mic Switch' on"
    ]

    DisableSequence [
        cset "name='Main Mic Switch' off"
    ]
}

SectionDevice."Headphones" {--头戴式耳机。
    Comment "Headphones"

    ConflictingDevice [
        "Speaker"
    ]

    Value {
        PlaybackPriority 200
        PlaybackPCM "hw:${CardId}"
        JackControl "Headphone Jack"
        JackHWMute "Speaker"
    }

    EnableSequence [
        cset "name='Headphone Switch' on"
    ]
    DisableSequence [
        cset "name='Headphone Switch' off"
    ]
}

SectionDevice."Headset" {--头戴式单麦克。
    Comment "Headset Microphone"

    ConflictingDevice [
        "Mic"
    ]

    Value {
        CapturePriority 200
        CapturePCM "hw:${CardId}"
        JackControl "Headset Mic Jack"
        JackHWMute "Mic"
    }

    EnableSequence [
        cset "name='Differential Mux' Line 1"
        cset "name='Headset Mic Switch' on"
    ]

    DisableSequence [
        cset "name='Headset Mic Switch' off"
    ]
}

标签:name,--,音频,pulseaudio,cset,Switch,conf,Linux
From: https://www.cnblogs.com/arnoldlu/p/18139069

相关文章

  • Linux extcon概要记录
    关键词:extcon、uevent等。1extcon介绍extcon是ExternalConnector的简称,用于抽象外部连接器,比如说AudioJack、USBMicroB/TypeC接口等。extcon驱动的主要功能是识别外部连接器状态变化,并将状态变化通知到与外部连接器相关的其他驱动。2extcon内核配置extcon配置如下:Dev......
  • Linux-centos8-samaba配置
    安装samba:yuminstallsambasamba-clientsamba-swat检查是否安装成功:rpm-qa|grepsambasamba文件配置先将smb.conf备份,网上很多人都用rm,后面再建立个新文件cp/etc/samba/smb.conf/etc/samba/smb2.confls-laF/etc/samba/创建目录文件,并进行权限和安全相关设......
  • Linux常见命令-目录命令
    1.ls命令:显示目录下的内容基本格式[root@localhost~]#ls[选项][参数是文件名或目录名]常用选项-a:显示所有文件--color=when:支持颜色输出-d:显示目录信息,并非目录下的文件-h:易读化显示。文件的大小按照KB,MB为单位显示-i:显示文件的i节点号-l:显示文件的详细信息范例参......
  • 在Linux中,如何管理SSL/TLS证书?
    在Linux系统中,管理SSL/TLS证书是确保Web服务安全的重要环节。SSL(SecureSocketsLayer)和TLS(TransportLayerSecurity)证书用于加密服务器和客户端之间的通信,保护数据传输的安全。以下是管理SSL/TLS证书的一般步骤:1.获取SSL/TLS证书从证书颁发机构(CA)购买:如果你需要一个商业网......
  • Linux白屏部署OceanBase集群版
    本次将部署三个节点,将介质OceanBaseAllinOne传到一个节点上即可。#下载并解压安装包[root@tidb01db_ob]#tar-xzvfoceanbase-all-in-one-4.3.0.1-100000242024032211.el7.x86_64.tar.gz[root@tidb01db_ob]#cdoceanbase-all-in-one/[root@tidb01oceanbase-all-in-on......
  • Linux如何完全卸载OceanBase单机版
    OceanBase单机版重新部署的时候,遇到提示demoisrunning,因为之前部署的demo还在运行中,可以直接重启使用,如果想重新部署,需将之前的删除干净。本文将介绍如何删除OceanBase单机版。1.查看OB集群信息[root@tidb01bin]#obdclusterlist+-------------------------------------......
  • linux11-vi&vim
    linux11-vi&vimvi\vimvi,visualinterfacevim是vi的加强版本,兼容vi的所有指令,不仅能编辑文本,而且还具有shell程序编辑的功能,带有语法高亮#文件不存在,则创建并编辑新文件vim不存在路径#文件存在,则编辑已有文件vim已存在路径操作:i键,插入模式ESC,回......
  • linux12-root
    linux12-root为root用户设置密码sudopasswdrootsusu,switchuser,切换用户选项-,表示是否在切换用户后加载环境变量,建议加参数user不填写,默认切换root用户#切换到root用户su-root可以通过exit回退到上一个用户,也可以用快捷键ctrl+dsudosuperuse......
  • linux10-echo&重定向符&tail
    linux10-echo&重定向符&tailecho在终端输出语句echo"HelloWorld"echo输出命令#此处pwd被当做文本输出echopwd通过反引号``,输出pwd执行内容echo`pwd`重定向符>将左侧命令的结果,覆盖写入到右侧指定的文件中>>将左侧命令的结果,追加写入到右侧指......
  • Linux系统命令-目录命令
    1.ls命令:显示目录下的内容基本格式[root@localhost~]#ls[选项][参数是文件名或目录名]常用选项-a:显示所有文件--color=when:支持颜色输出-d:显示目录信息,并非目录下的文件-h:易读化显示。文件的大小按照KB,MB为单位显示-i:显示文件的i节点号-l:显示文件的详细信息范例参......