如需最新版本,请参阅github.com/pzmarzly/mic_over_mumble。

如需最新版本,请参阅github.com/pzmarzly/mic_over_mumble。

我有 Windows 和 Ubuntu 双启动系统。由于我的桌面上没有麦克风,我开始使用一款名为“WO Mic”的应用程序将我的 Android 手机的麦克风连接到 Windows 中的桌面。这是一个不错的选择,对吧?

嗯,遗憾的是,WO Mic 不支持任何基于 Linux 的操作系统,所以我想知道是否有任何替代品或应用程序可以通过 Wi-Fi 或 USB 在 Ubuntu 上将我的手机用作麦克风。(但最好是 Wi-Fi)。

答案1

我使用 Mumble(桌面客户端)+ Murmur(作为 LAN 服务器)+ Plumble(Android/iOS 客户端)。这实现了我有史以来最低的延迟(听起来几乎像正常的环回,理论上 7ms WiFi 延迟 + 2x 10ms 编解码器延迟 = 27 ms)。

如需最新版本,请参阅github.com/pzmarzly/mic_over_mumble

README 片段(rev 8c827fe)

  1. 安装 Mumble(桌面客户端)+ Murmur(服务器)+ Plumble(Android/iOS 客户端)。将所有 3 个程序设置为使用最佳质量和最小延迟。将移动客户端设置为始终流式传输。

  2. 要在 Ubuntu 上安装 Mumble + Murmur,您可以使用:

    sudo apt install mumble mumble-server
    sudo systemctl stop mumble-server.service
    sudo systemctl disable mumble-server.service
    
  3. 复制到mic_over_mumble任何地方 - 它将用作~/.mic_over_Mumble配置目录。

  4. 运行mic_over_mumble。它将在 LAN 上启动服务器,然后启动 Mumble(如果要求输入昵称,请输入除 SuperUser 之外的任何内容)。然后手动将您的移动设备连接到 LAN 服务器。请注意,Mumble 移动应用程序有一些问题

  5. 然后,设置您的程序以使用“Monitor_of_Mumble”或“VirtualMic”作为输入设备(它们是链接的)。例如在 OBS 中:

    OBS 配置截图

脚本副本mic_over_mumble(rev 8c827fe)

#!/bin/bash
set -euo pipefail
# PAID = PulseAudio ID
# ID = PID / process ID

function main () {
    if [ ! -e ~/.mic_over_Mumble ]; then
        mkdir ~/.mic_over_Mumble
    fi
    cd ~/.mic_over_Mumble

    rm murmur.ini || true
    echo "bonjour=true" >> murmur.ini
    echo "bandwidth=130000" >> murmur.ini

    if [ ! -e ./initdone ]; then
        echo "You will need to configure Mumble client to use the lowest possible latency."
        echo "We will start Mumble now. Please complete setup wizard and go to settings to increase quality and decrease latency."
        echo "Also, mute your microphone (if you have one) in Mumble."
        echo "Then close Mumble."
        run_mumble_client_wizard
        touch ./initdone
    fi

    echo "Starting Mumble server (murmurd)..."
    run_mumble_server_bg
    sleep 5
    echo "Starting Mumble client..."
    MUMBLE_CLIENT_ID=$(run_mumble_client_bg)
    sleep 15
    echo "Fetching PulseAudio configuration..."
    MUMBLE_CLIENT_PAID=$(get_mumble_client_paid)

    echo "Changing PulseAudio configuration..."
    echo "Adding sink..."
    SINK_MODULE_PAID=$(add_sink)
    sleep 3

    echo "Fetching current configuration to redirect Mumble..."
    SINK_PAID=$(get_sink_paid)
    pacmd move-sink-input "$MUMBLE_CLIENT_PAID" "$SINK_PAID"

    echo "Adding a virtual microphone..."
    SOURCE_MODULE_PAID=$(add_source)

    echo "Done. Please use pavucontrol to ensure everything works."
    echo "Press Return to shut down..."
    read -n1 -s -r
    echo "Shutting down..."

    echo "Stopping Mumble client..."
    kill -KILL "$MUMBLE_CLIENT_ID" || true
    sleep 2
    echo "Stopping Mumble server..."
    # TODO: find a better way to kill murmurd
    # (it forks, so we cannot use its PID)
    pkill murmurd || true
    echo "Restoring PulseAudio configuration..."
    pactl unload-module "$SOURCE_MODULE_PAID"
    pactl unload-module "$SINK_MODULE_PAID"
}

function run_mumble_client_wizard () {
    mumble >/dev/null 2>&1
}

function run_mumble_client_bg () {
    MUMBLE_URL="mumble://localhost"
    mumble $MUMBLE_URL >/dev/null 2>&1 &
    echo $!
}

function run_mumble_server_bg () {
    murmurd -ini ./murmur.ini &
    # echo $!
    # TODO: here we can get murmur's PID
    # (uncomment the line above)
}

function get_mumble_client_paid () {
    pacmd list-sink-inputs |
        grep -F -e "index: " -e "media.name = " |
        cut_every_second_newline |
        grep -F -e "Mumble" |
        print_second_column
}

function add_sink () {
    pactl load-module \
        module-null-sink \
        sink_name=Loopback_of_Mumble \
        sink_properties=device.description=Loopback_of_Mumble
}

function add_source () {
    pactl load-module \
        module-virtual-source \
        source_name=VirtualMic \
        master=Loopback_of_Mumble.monitor \
        source_properties=device.description=VirtualMic
}

function get_sink_paid () {
    pacmd list-sinks |
        grep -F -e "index: " -e "name: " |
        cut_every_second_newline |
        grep -F -e "Loopback" |
        print_second_column
}

# https://serverfault.com/a/375098/449626
function cut_every_second_newline () {
    awk 'ORS=NR%2?" ":"\n"'
}

function print_second_column () {
    awk '{print $2}'
}

main

答案2

编辑2020-06-07:该软件最初托管的网站似乎是改名请注意:我在这里只是回答用户的问题。我自己没有使用过该软件,我不会推荐我自己不使用的软件。


沃麦克程序?您是否尝试过下载客户端/驱动程序并按照 Ubuntu 的说明进行操作?

  1. 加载驱动模块

     $ sudo insmod wo_snd_capture-x86.ko
    
  2. 从客户端连接

    • 通过 Wifi 连接。您可以在 WO Mic 应用程序 UI 上找到 IP 地址。

         $ micclient-ubuntu-x86 -t Wifi 192.168.1.100
      
    • 通过蓝牙连接。

         $ micclient-ubuntu-x86 -t Bluetooth xx:xx:xx:xx:xx:xx
      

      xx:xx:xx:xx:xx:xx 代表手机蓝牙地址,您可以在手机上查询:设置->关于手机->状态->蓝牙地址。

以上示例适用于 32 位 Ubuntu。如果您使用的是 64 位,请将客户端和驱动程序文件名替换为下载的 xxx-x86_64。

答案3

嗯,我以前尝试过该应用程序,但它对我没有用,所以我推荐这种方法:

  • 首次安装网络摄像机在手机上,然后安装脉冲音频,完成后,打开 ipcamera 并在手机上启动服务器,确保您的电脑连接到同一个网络。
  • 打开 Chrome 或 Firefox 并输入 ipcamera 提供给您的 IP 地址(该 IP 将显示在应用程序中)。
  • 在浏览器中单击音频播放器并选择 HTML5,并确保您能听到声音。
  • 打开 pulseaudio 并转到回放选项卡,然后单击并显示并选择所有流。您将看到 chrome 或 firefox 应用程序正在播放麦克风。
  • 在应用程序部分选择回望适用于 Chrome 或 Firefox;这会将您手机中的音频重定向到麦克风通道,您可以执行相同的操作,但使用 VLC 并更好地处理诸如滞后之类的问题。

答案4

最佳答案的 Mumble 脚本不适用于 Pipewire,并且目前存在问题。在问题讨论中找到了由它编写的与 Pipewire 兼容的脚本:https://github.com/siddhpant/broo

对我来说这很好用。只需使用broo它启动服务器,它就会自动设置。由于没有活跃的 Mumble 客户端项目,iOS 支持对我来说似乎不太可靠。

相关内容