如何将X个通道混合到一个通道中

  • 本文关键字:通道 一个 混合 alsa
  • 更新时间 :
  • 英文 :


我刚进入ALSA和linux,

如何在记录路径上使用ALSA插件将X个频道混合到一个频道中?

如何使用alsamixer为每个通道控制音量?

我正在调查http://www.alsa-project.org/alsa-doc/alsa-libAPI,但没有找到合适的东西,所以在这里询问。请指导我正确的方向,示例代码或教程。我也看过SO,但我得到了关于游戏路径的信息。

您需要dmix插件。它很安静,很容易使用。在/etc/asound.conf 中

pcm.<device_name> {
   type dmix        # plugin type
   ipc_key 321456   # any unique value through /etc/asound.conf
   slave {
      pcm "hw:0,0"  # Sound card name
      format S32_LE # That is you format
      rate 44100    # Sampling rate
      channels 2    # You channels count 
   }
}

重新启动后,您应该可以从不同的位置打开设备,alsa将混合它们的输出。这里有一些关于它的文档:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html

首先,从一个允许多个录制客户端的设备开始:

pcm.snooped {
    type dsnoop
    slave.pcm "hw:0"  # or whatever
}

然后提取单个通道:

pcm.channel1 {
    type route
    slave {
        pcm snooped
        channels 2
    }
    ttable [ [ 1 0 ] ]
}
pcm.channel2 {
    type route
    slave {
        pcm snooped
        channels 2
    }
    ttable [ [ 0 1 ] ]
}

然后在它们每个上加一个softvol

pcm.channel1_softvol {
    type softvol
    slave.pcm channel1
    control.name "Channel 1 Capture Volume"
}
pcm.channel2_softvol {
    type softvol
    slave.pcm channel2
    control.name "Channel 2 Capture Volume"
}

然后将它们合并为一个单独的设备:

pcm.mixed_with_volumes {
    type multi
    slaves {
        a { pcm channel1_softvol channels 1 }
        b { pcm channel2_softvol channels 1 }
    }
    bindings [
        { slave a channel 0 }
        { slave b channel 0 }
    ]
}

并使用plug插件将通道混合在一起:

pcm.my_device {
    type plug
    slave.pcm mixed_with_volumes
    ttable [ [ 0.5 0.5 ] ]
}

最新更新