Linux音频问题

关键字: alsa, pulseaudio, gnome, gnome-volume, 右下角,喇叭,音量

alsactl, alsa-utils, pulseaudio-utils

一、音频调节工具

alsaunmute (alsa-utils) 是一个脚本,用于初始化ALSA声音设备。它调用了alsactl,并且以init为参数。它没有任何参数,直接就是:

$ alsaunmute
它的内容如下:

#!/bin/sh

exec /sbin/alsactl \
  -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf \
  --initfile=/lib/alsa/init/00main \
  init

alsactl 是alsa系统最重要的工具,它主要用于对alsa的声卡进行控制。它支持多块声卡,

如果你的声卡的功能不能在图形界面中进行控制,那么你就应该使用这个 alsactl 工具。

alsa最主要的三个用法如下:

1)alsactl store 命令将当前声卡的驱动程序状态保存到一个配置文件(默认是/etc/asound.state, 可以用 -f 来指定)中去;

2)alsactl restore 则从这个配置文件恢复原来的声卡驱动状态。

3)alsactl init 将声卡的状态初始化为默认状态。


二、配置文件语法


三、ALSA配置文件(/etc/asound.conf)的格式

# 从#开始的地方是注释

# 把其他配置文件包含进来
<filename>

# 简单赋值语句
name [=] value [,|;]

# 结构体赋值 (第一种风格)
name [=] {
	name1 [=] value [,|;]
	...
}

# 结构体赋值 (第二种风格)
name.name1 [=] value [,|;]

# 数组赋值 (第一种风格)
name [
	value0 [,|;]
	value1 [,|;]
	...
]

# 数组赋值 (第二种风格)
name.0 [=] value0 [,|;]
name.1 [=] value1 [,|;]

# ******************************************************************************

# 对服务器的定义
server.NAME {
  host STR		# host where the server is located (if map to local address 
			# server is local, and then it may be started automatically)
  [socket STR]		# PF_LOCAL socket name to listen/connect
  [port INT]		# PF_INET port number to listen/connect
}

# PCM类型定义
pcm_type.NAME {
  [lib STR]		# 共享库文件 (默认 libasound.so)
  [open	STR]		# 打开函数 (默认 _snd_pcm_NAME_open)
  [redirect {		# 将这个PCM重定向到另一个PCM
     [filename STR]	# 配置文件说明
     name STR		# PCM名称说明
  }]
}

# PCM范围类型定义
pcm_scope_type.NAME {
  [lib STR]		# 共享库文件 (默认 libasound.so)
  [open STR]		# 打开函数 (default _snd_pcm_scope_NAME_open)
}

# PCM 范围定义
pcm_scope.NAME {
  type STR		# Scope type
  ...
}

# 从属 PCM 定义
pcm_slave.NAME {
  pcm STR		# PCM name
#or
  pcm { }		# PCM definition
  format STR		# Format
  channels INT		# Channels
  rate INT		# Rate
  period_time INT	# Period time
  buffer_time INT	# Buffer time
  etc.
}

# Hook arguments definition
hook_args.NAME {
  ...			# Arbitrary arguments
}

# PCM hook type
pcm_hook_type.NAME {
  [lib STR]		# Library file (default libasound.so)
  [install STR]		# Install function (default _snd_pcm_hook_NAME_install)
}

# PCM hook definition
pcm_hook.NAME {
  type STR		# PCM Hook type (see pcm_hook_type)
  [args STR]		# Arguments for install function (see hook_args)
  # or
  [args { }]		# Arguments for install function
}

# PCM 定义
pcm.NAME {
  type STR		# Type
  [comment ANY]		# Saved comments


# PCM 类型:
  type hw 		# Kernel PCM
  card INT/STR		# Card name or number
  [device] INT		# Device number (default 0)	
  [subdevice] INT	# Subdevice number, -1 first available (default -1)
  mmap_emulation BOOL	# enable mmap emulation for ro/wo devices


  type hooks 		# PCM with hooks
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
  }
  hooks {
    ID STR		# Hook name (see pcm_hook)
    # or
    ID { }		# Hook definition (see pcm_hook)
  }

  type plug		# Format adjusted PCM
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
    [format STR]	# Slave format (default nearest) or "unchanged"
    [channels INT]	# Slave channels (default nearest) or "unchanged"
    [rate INT]		# Slave rate (default nearest) or "unchanged"
  }
  route_policy STR	# route policy for automatic ttable generation
			# STR can be 'default', 'average', 'copy', 'duplicate'
			# average: result is average of input channels
			# copy: only first channels are copied to destination
			# duplicate: duplicate first set of channels
			# default: copy policy, except for mono capture - sum
  ttable {	 	# Transfer table (bidimensional compound of 
	        	# cchannels * schannels numbers)
    CCHANNEL {
      SCHANNEL REAL	# route value (0.0 ... 1.0)
    }
  }


  type copy		# Copy conversion PCM
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
  }


  type linear		# Linear format conversion PCM
  type adpcm		# IMA-ADPCM format conversion PCM
  type alaw		# A-Law format conversion PCM
  type mulaw		# Mu-Law format conversion PCM
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
    format STR		# Slave format
  }


  type rate		# Rate conversion PCM
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
    [format STR]	# Slave format (default client format)
    rate INT		# Slave rate
  }


  type route		# Attenuated static route PCM
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
    [format STR]	# Slave format (default client format)
    [channels INT]	# Slave channels (default client channels)
  }
  ttable {	 	# Transfer table (bidimensional compound of 
	        	# cchannels * schannels numbers)
    CCHANNEL {
      SCHANNEL REAL	# route value (0.0 ... 1.0)
    }
  }


  type multi		# Linked PCMs (exclusive access to selected channels)
  slaves {		# Slaves definitions
    ID STR		# Slave name for slave N (see pcm_slave)
    # or
    ID {		# Slave definition for slave N
      pcm STR		# Slave PCM name
    # or
      pcm { }		# Slave PCM definition
      channels INT	# Slave channels
    }
  }
  bindings {		# Bindings table
    N {			# Binding for client channel N
      slave STR		# Slave key
      channel INT	# Slave channel
    }
  }
  [master INT]		# Define the master slave


  type file		# File plugin
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
  }
  file STR		# File name
  # or
  file INT		# File descriptor
  [format STR]		# File format (NYI)
  [perm INT]		# File permission (default 0600)

  type meter		# Meter PCM
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition or name
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
  }
  [frequency INT]	# Updates per second
  scopes {		# Scopes
    ID STR		# Scope name (see pcm_scope)
  # or
    ID { }		# Scope definition (see pcm_scope)
  }


  type droute		# Attenuated dynamic route PCM (NYI)
  slave STR		# Slave name (see pcm_slave)
  # or
  slave {		# Slave definition
    pcm STR		# Slave PCM name
    # or
    pcm { }		# Slave PCM definition
    [format STR]	# Slave format (default client format)
    [channels INT]	# Slave channels (default client channels)
  }
  ctl STR		# Ctl name
  bindings {		# Bindings table
    ID {		# Binding entry
      cchannels {	# Client channels
        C INT		# Client channel
      }
      schannel {	# Slave channels
        S INT		# Slave channel
      }
      control STR	# Control name of C * S (or C values: only if C == S)
    }
  }


  type null		# Null endpoint plugin
  [time INT]		# Time related or not (NYI)


  type shm		# Shared memory client PCM
  server STR		# Server name
  pcm STR		# PCM name on server


  type share		# Share PCM
  slave STR		# Slave name (see pcm_slave)
  bindings {		# Bindings table
    N INT		# Slave channel for client channel N
  }


  type mix		# Mix PCM
  slave STR		# Slave name (see pcm_slave)
  bindings {		# Bindings table
    N INT		# Slave channel for client channel N
  }


  type ladspa		# LADSPA plugin PCM
  slave STR		# Slave name (see pcm_slave)
  path STR		# Path or paths (delimited with ':')
  plugins | playback_plugins | capture_plugins {
    N {			# Configuration for LADSPA plugin N
      id #		# LADSPA plugin ID (for example 1043)
      label STR		# LADSPA plugin label (for example 'delay_5s')
      filename STR	# Full filename of .so library with LADPA plugin code
      policy STR	# Policy can be 'none' or 'duplicate'
      input | output {
        bindings {
          C INT or STR  # C - channel, INT - audio port index, STR - audio port name
        }
        controls {
          I INT or REAL # I - control port index, INT or REAL - control value
        }
      }
    }
  }

  type dmix		# Direct mixing plugin
  slave STR		# Slave name (see pcm_slave)
  ipc_key INT		# Unique ipc key
  ipc_perm INT		# ipc permissions (default 0600)
  ipc_gid INT		# ipc gid (default -1 = disable)
  ipc_key_add_uid BOOL  # Add current uid to ipc_key
  bindings {		# Bindings table
    N INT		# Slave channel for client channel N
  }

  type dsnoop		# Direct snoop (split one capture stream to more)
  slave STR		# Slave name (see pcm_slave)
  ipc_key INT		# Unique ipc key
  ipc_perm INT		# ipc permissions (default 0600)
  ipc_gid INT		# ipc gid (default -1 = disable)
  ipc_key_add_uid BOOL  # Add current uid to ipc_key
  bindings {		# Bindings table
    N INT		# Slave channel for client channel N
  }

  type dshare		# Share channels from one stream
  slave STR		# Slave name (see pcm_slave)
  ipc_key INT		# Unique ipc key
  ipc_perm INT		# ipc permissions (default 0600)
  ipc_gid INT		# ipc gid (default -1 = disable)
  ipc_key_add_uid BOOL  # Add current uid to ipc_key
  bindings {		# Bindings table
    N INT		# Slave channel for client channel N
  }
}

# CTL type definition
ctl_type.NAME {
  [lib STR]		# Library file (default libasound.so)
  [open STR]		# Open function (default _snd_ctl_NAME_open)
}

# CTL definition
ctl.NAME {
  type STR		# Type
  [comment ANY]		# Saved comments

# CTL types
  type hw
  card STR/INT		# Card name or number


  type shm		# Shared memory client CTL
  server STR		# Server name
  ctl STR		# CTL name on server


}


# RAWMIDI type definition
rawmidi_type.NAME {
  [lib STR]		# Library file (default libasound.so)
  [open STR]		# Open function (default _snd_rawmidi_NAME_open)
}

# RAWMIDI definition
rawmidi.NAME {
  type STR		# Type
  [comment ANY]		# Saved comments

# RAWMIDI types:
  type hw 		# Kernel RAWMIDI
  card INT/STR		# Card name or number
  [device] INT		# Device number (default 0)	
  [subdevice] INT	# Subdevice number, -1 first available (default -1)


}

# SEQ 类型定义
seq_type.NAME {
  [lib STR]		# Library file (default libasound.so)
  [open STR]		# Open function (default _snd_seq_NAME_open)
}

# SEQ 定义
seq.NAME {
  type STR		# Type
  [comment ANY]		# Saved comments

# SEQ types:
  type hw 		# Kernel SEQ


}

# 别名
DEF.NAME1 NAME2		# DEF.NAME1 是 DEF.NAME2 的别名

举例如下:

pcm.trident {
	type hw
	card 0
	device 0
}

pcm.ice1712 {
	type hw
	card 1
	device 0
}

pcm.ice1712_spdif {
	type plug
	ttable.0.8 1
	ttable.1.9 1
	slave.pcm ice1712
}

pcm_slave.rs {
	pcm trident
	rate 44100
}

pcm.r {
	type rate
	slave rs
}

pcm.m {
	type meter
	slave.pcm plug:trident
	frequency 50
	scopes [
		{
			type level
		}
	]
}

pcm_scope_type.level {
	lib /home/abramo/scopes/scope-level.so
} 

# an example command is 'aplay -D plug:ladspa <filename>'
# otherwise, the ladspa plugin expects FLOAT type which
# is very rare
pcm.ladspa {
        type ladspa
        slave.pcm "plughw:0,0";
        path "/home/perex/src/ladspa_sdk/plugins";
        plugins [
                {
                        label delay_5s
                        input {
                                controls [ 0.8 0.2 ]
                        }
                }
        ]
}

# an example command for dmix plugin to force 44100Hz mixing rate:
# aplay -D"plug:'dmix:RATE=44100'" <filename>
# an example command for dmix plugin to force 44100Hz and hw:1,0 output device
# aplay -Dplug:\'dmix:SLAVE=\"hw:1,0\",RATE=44100\' <filename>
# an example command for dmix plugin to force 32-bit signed little endian format
# aplay -D"plug:'dmix:FORMAT=S32_LE'" <filename>


你可能感兴趣的:(Linux音频问题)