c - 使用 ALSA 从 Line IN 录制声音

标签 c linux alsa

我开发了一个小型应用程序,可以在嵌入式系统上使用 ALSA 驱动程序录制声音。
现在我在选择要从 MIC/Line IN 录制的设备时遇到问题。
该应用程序设置为在系统启动时启动,但我的默认录音设备设置为 MIC。为了让我的应用程序正常工作,我必须转到 amixer 并将录音设备从 MIC 设置为 Line IN,然后启动我的应用程序。

你们知道从应用程序或 amixer 命令进行更改的方法吗,这将更改此录音设备,我可以将其放入脚本中并在启动时运行它。

我是否说过此应用程序在嵌入式系统上运行,我需要一种在我的应用程序启动之前配置系统的方法。

编辑 1:
这是我的混合器输出:

root@freescale ~$ amixer
Simple mixer control 'Headphone',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 127
  Front Left: 103 [81%]
  Front Right: 103 [81%]
Simple mixer control 'Playback',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 192
  Front Left: 192 [100%]
  Front Right: 192 [100%]
Simple mixer control 'Capture',0
  Capabilities: cvolume
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 15
  Front Left: Capture 15 [100%]
  Front Right: Capture 15 [100%]
Simple mixer control 'Capture Vol Reduction',0
  Capabilities: enum
  Items: 'No Change' 'Reduced by 6dB'
  Item0: 'No Change'
Simple mixer control 'ADC Mux',0
  Capabilities: enum
  Items: 'MIC_IN' 'LINE_IN'
  Item0: 'MIC_IN'
Simple mixer control 'DAC Mux',0
  Capabilities: enum
  Items: 'DAC' 'LINE_IN'
  Item0: 'DAC'
Simple mixer control 'MIC GAIN',0
  Capabilities: enum
  Items: '0dB' '20dB' '30dB' '40dB'
  Item0: '0dB'

非常感谢, 加布里埃尔

最佳答案

我终于做到了。我正在使用带有“cset”命令的 amixer 来完成它。

amixer -c 0 cset numid=7 1

"-c 0"为第一张声卡
"numid=7"是激活的录音设备。
“1”是第二个输入……在我的例子中是 0-MIC 1-LINEIN

amixer info  

获取所有控件及其 numids 例如:

    amixer info
Card default 'mxsevk'/'mxs-evk (SGTL5000)'
  Mixer name    : ''
  Components    : ''
  Controls      : 7
  Simple ctrls  : 7
root@freescale ~$ amixer contents
numid=5,iface=MIXER,name='Headphone Volume'
  ; type=INTEGER,access=rw---,values=2,min=0,max=127,step=0
  : values=103,103
numid=7,iface=MIXER,name='ADC Mux'
  ; type=ENUMERATED,access=rw---,values=1,items=2
  ; Item #0 'MIC_IN'
  ; Item #1 'LINE_IN'
  : values=1
numid=3,iface=MIXER,name='Capture Vol Reduction'
  ; type=ENUMERATED,access=rw---,values=1,items=2
  ; Item #0 'No Change'
  ; Item #1 'Reduced by 6dB'
  : values=0
numid=2,iface=MIXER,name='Capture Volume'
  ; type=INTEGER,access=rw---,values=2,min=0,max=15,step=0
  : values=15,15
numid=4,iface=MIXER,name='Playback Volume'
  ; type=INTEGER,access=rw---,values=2,min=0,max=192,step=0
  : values=192,192
numid=6,iface=MIXER,name='DAC Mux'
  ; type=ENUMERATED,access=rw---,values=1,items=2
  ; Item #0 'DAC'
  ; Item #1 'LINE_IN'
  : values=0
numid=1,iface=MIXER,name='MIC GAIN'
  ; type=ENUMERATED,access=rw---,values=1,items=4
  ; Item #0 '0dB'
  ; Item #1 '20dB'
  ; Item #2 '30dB'
  ; Item #3 '40dB'
  : values=0

关于c - 使用 ALSA 从 Line IN 录制声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535918/

相关文章:

c - 从信号处理程序中获取保存的指令指针地址

c - 最后一个 fork 的 child 不会死

google-chrome - Chromium --alsa-output-device 标志不起作用

c - 在几个 header 中重新定义 'struct timeval'

c - 如何在C中打印参数的值

没有类型指示符的带参数的 C 函数仍然有效吗?

python - 无法在 Linux 中的 python 命令行中编辑行

linux - Alsa异步回调

c - 显示星号与使用函数显示字符

c - 具有可能的静态共享库函数的 LD_PRELOAD