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

时间:2014-09-26 09:10:46

标签: alsa

我刚进入ALSA和linux,

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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