【问题标题】:How to do mixing of X channels into a single channel如何将 X 通道混合为单个通道
【发布时间】:2014-11-21 06:05:16
【问题描述】:

我刚接触 ALSA 和 linux,

如何使用记录路径上的 ALSA 插件将 X 通道混合成单个通道?

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

我正在研究http://www.alsa-project.org/alsa-doc/alsa-lib API,但没有找到合适的,因此在这里问。请指导我正确的方向,示例代码或教程。我也看过 SO,但我得到了有关播放路径的信息。

【问题讨论】:

  • 您会自动获得格式转换。 softvol 插件只支持两个通道。
  • 你需要两个独立的softvol插件。
  • softvol 混音器控件可以像任何其他混音器控件一样访问。

标签: alsa


【解决方案1】:

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

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 ] ]
}

【讨论】:

    【解决方案2】:

    您需要 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

    【讨论】:

    • dmix与录音无关。
    • JRC,是的,它适用于任意数量的频道,我从不使用音量,但你可以试试这个stackoverflow.com/questions/6787318/…
    • @JRC 这是一个单独的问题,不应在对不同问题的评论中提出。
    猜你喜欢
    • 2011-06-01
    • 2018-07-10
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多