linux - Pulseaudio - 组合麦克风流以在组合扬声器接收器上播放输出

标签 linux pulseaudio

在Ubuntu 15.10中使用pulseaudio,我想将两个不同的麦克风组合到一个接收器中,并让它们在两个不同的输出上播放组合的输出。下面的脚本执行第一部分(在网络上找到它),但输出似乎只在单个输出上播放。

执行后一步需要什么?

#!/bin/bash

#    Script to map two pulseaudio hardware input sources as mono inputs
#    to left and right channel of a new loopback-sink respectively. This
#    sink can be used e.g. to use VoIP or record two microphones seperately.
#    Copyright (C) 2013, Henning Hollermann, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="046865676865766b4469656d682a676b69" rel="noreferrer noopener nofollow">[email protected]</a>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

do_activate() {
    while [ "x" = "x$LEFT" ]; do
        echo "Choose Source for left channel by ID"
        pactl list short sources
        read ID
        LEFT=$(pactl list short sources|awk '/^'$ID'/{print $2}')
    done
    while [ "x" = "x$RIGHT" ]; do
        echo "Choose Source for right channel by ID"
        pactl list short sources | grep -v $LEFT
        read ID
        RIGHT=$(pactl list short sources | grep -v $LEFT|awk '/^'$ID'/{print $2}')
    done
    # Create the name of the Combined sink
    NAME="Combined_Mics:_Left:_"$(echo $LEFT|awk -F'.' '$0=$2')"_Right:_"$(echo $RIGHT|awk -F'.' '$0=$2')

    echo "[LOAD] null sink as \"$NAME\" to connect the two mics to"
    pactl load-module module-null-sink \
            sink_name=combined channels=2 \
            sink_properties="device.description=$NAME"

    echo "[LOAD] map source 1 ($LEFT) to left channel of \"$NAME\""
    pactl load-module module-remap-source \
            source_name=${LEFT}_left_channel master=$LEFT channels=2 \
            master_channel_map=mono,mono channel_map=left,left
    pactl load-module module-loopback sink=combined source=${LEFT}_left_channel

    echo "[LOAD] map source 2 ($RIGHT) to right channel of \"$NAME\""
    pactl load-module module-remap-source \
            source_name=${RIGHT}_right_channel master=$RIGHT channels=2 \
            master_channel_map=mono,mono channel_map=right,right
    pactl load-module module-loopback sink=combined source=${RIGHT}_right_channel
    echo "[DONE] Now adjust the left and right channel volume of the new sink to be equally loud"


}

do_deactivate() {
    echo "[UNLOAD] pulseaudio modules..."
    echo "[UNLOAD] module-loopback"
    pactl unload-module module-loopback
    echo "[UNLOAD] module-remap-source"
    pactl unload-module module-remap-source
    echo "[UNLOAD] module-null-sink"
    pactl unload-module module-null-sink
}

init() {
    for exe in /usr/bin/pulseaudio /usr/bin/pactl; do
        if [ ! -x "$exe" ]; then
            echo "[ERROR] required file $exe not found or not executable"
            exit 1
        fi
    done
    [ ! -x /usr/bin/pavucontrol ] && echo "[NOTICE] pavucontrol might be very useful."
}

# MAIN
init;
case $1 in
activate|enable|start)
    do_activate;;
deactivate|disable|stop)
    do_deactivate;;
*)
    echo "Usage: $0 [enable|disable]";;
esac;

最佳答案

这实现了我想要的:

pactl load-module module-loopback latency_msec=1 source=alsa_input.pci-0000_00_1b.0.analog-stereo sink=bluez_sink.00_02_5B_00_FF_03

pactl load-module module-loopback latency_msec=1 source=bluez_source.00_02_5B_00_FF_03 sink=alsa_output.pci-0000_00_1b.0.analog-stereo

关于linux - Pulseaudio - 组合麦克风流以在组合扬声器接收器上播放输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37688300/

相关文章:

c - 管道、Fifo、read() 和 write() 函数

linux - (如何)我能否获得从我的计算机未产生的麦克风录制的所有声音的流? (使用 PulseAudio 或其他东西)

ubuntu - 系统上有声音,但脉冲音频访问被拒绝问题

alsa - 为什么当pulseaudio运行时aplay工作,否则不工作?

linux - 使用 Linux 脚本和 Cron 定期比较变量

linux - GNU 找到 : test for file size greater/smaller-equal a certain size

python - 可以是 "C++ application signal python script on completion"吗?

c++ - 无法在 linux (i686-w64-mingw32-g++) 上交叉编译包含 sqlite 的 c++ 类(未定义引用)

audio - Docker:JACK 服务器未运行

c - 在cygwin中编译linux C程序时遇到问题