如何通过麦克风在扬声器中听到我的声音?

我有一个USB麦克风可以在Skype上聊天、录音等。但是如何让当我的麦克风打开并且我说话时,能够实时通过扬声器听到自己的声音,而不需要先录下来再回放呢?我需要哪些应用程序或者在哪里可以启用此选项?

我正在使用Ubuntu 10.10。


2有一件需要考虑的事是根据你的声卡不同,可能会出现延迟(在你说话和从耳机传出声音之间会有一个轻微的延迟)。这非常令人不安,并且是由于模拟到数字再到模拟的处理和转换所引起的。我听说在Ubuntu中,你可能需要安装Jack音频库来减少延迟。http://superuser.com/questions/87571/how-to-hear-mic-sound-over-speakers-ubuntu-karmic - Colin Matheson
1好的,但是我怎么才能让声音首先发出来呢? - Martin Zeltin
你不需要Jack。我使用的是Ubuntustudio的低延迟内核,也可以通过apt-get轻松获取,没有任何问题。 - mchid
14尝试这个命令:arecord | aplay - user619271
你甚至不需要做任何事情。你只需搜索“在线麦克风测试”,就能找到一些让你听到自己声音的网站。 - Eray Erdin
你知道有没有任何开源的替代品?这个来自Mozilla MDN只是在视觉上起作用。 - Pablo Bianchi
11个回答

这是我在Ubuntu 12.04上使用Pulse Audio测试过的解决方案。
  • 安装PulseAudio音量控制(pavucontrol):

    sudo apt install pavucontrol
    
  • 现在我们将把您的麦克风路由到扬声器。通过运行以下命令来完成:

    pactl load-module module-loopback latency_msec=1
    
  • 在pavucontrol的录音选项卡上,您可以显示所有流(底部的下拉框),然后配置哪个麦克风(如果有多个)应该回传到内置模拟立体声中

停止它的运行,执行以下命令:
pactl unload-module module-loopback

10解决方案运行良好,但我该如何撤销此设置? - Ionică Bizău
5要撤销它,请查看此答案 - Gramic
3当我这样做时,扬声器会发出声音,但只有静音,如果我对着麦克风说话就没有声音。有什么想法吗?我使用的是14.04版本。 - andrewmh20
2延迟毁了播放...试着跟它一起唱吧:\ - neu-rah
1你也可以登出并登录以撤销这个操作。 - Smile4ever
2或者,不用退出登录,可以执行以下命令:pactl unload-module module-loopback - Hedede
3它仍然存在一点点可察觉的延迟,当演奏乐器时这是很烦人的。有没有什么办法可以避免它呢? - Daniel Vartanov
1这个解决方案在Dell Inspiron 7720上的Ubuntu Budgie 18.04(内核4.20.17)上无效。 - Marecky
3@DanielVartanov:为了显著降低延迟,您可以使用实时启用的内核,并配置pulseaudio以实时优先级和较低的nice值运行(我在/etc/default/pulse.pa中设置了nice-level = -19realtime-scheduling = yesrealtime-priority = 97,以及rlimit-nice = 39rlimit-rtprio = 98)。为了使其正常工作,您还需要配置限制(在/etc/systemd/system.conf.d/limits.conf中)。对于realtime组(我是该组的用户),我设置了DefaultLimitNICE=-19DefaultLimitRTPRIO=98。效果非常好。 - Marc.2377
哦,还有一个好办法是使用module-loopback并设置latency_msec=20,这样可以避免太多的源被丢弃并自动增加延迟(可以通过journalctl --user-unit pulseaudio -n 1000 -f来监控)。 - Marc.2377
这是我写的一个方便的脚本,用于包装它们。https://github.com/aalok-sathe/dotfiles/blob/master/loopback - axolotl
1它发出很大的噪音。 - Jobayer Shajal
我已经制作了一个简单的脚本来使用这个解决方案,只需将代码复制到一个文件(openmic.sh)脚本中:#!/bin/bash echo -e "\nusage: openmic.sh on / openmic.sh off \n" switch=$1 if [ $switch = on ] then pactl load-module module-loopback latency_msec=1 fi if [ $switch = off ] then pactl unload-module module-loopback fi最后使脚本可执行:chmod +x openmic.sh。为了避免混淆,在脚本中每个大间隔(空格)表示新的一行。 - Andrés Chandía

简单解决方案

只需使用:

arecord -f cd - | aplay -

如果你想在节省的同时玩耍:
arecord -f cd - | tee output.wav | aplay -

1绝对是将话筒的声音传到耳机里最简单的方法。我想要一个图形用户界面。 - user278319
9很遗憾,使用这个解决方案会导致非常糟糕的延迟问题。 - Daniel Vartanov
19这将有助于减少延迟:arecord --buffer-time=1 - | aplay --buffer-time=1 - - Brent Bradburn
2非常好的记录媒体的方式!你还可以听它,这样就不会那么痛苦地慢了!不过有个问题,如果我连接了多个麦克风,我该如何选择其中一个呢? - Mark Deven
31毫秒的缓冲时间将导致欠运行。我建议至少20毫秒 - 如果不使用实时内核,则将其增加到40毫秒。 - Marc.2377
31ms导致格式较低,这对我来说起到了强制特定格式和采样率的作用:arecord -r 192000 -f s16_le --buffer-time=1 - | aplay --buffer-time=1 - - chaz
1非常感谢,这真的是一个很好而且简单的解决方案 :-) - Fred
感谢您的回答,也感谢其他人的评论(尤其是@BrentBradburn和@Marc.2377)。我可以确认它也适用于电吉他。;) 如果有人想要使用tee进行录制,仍然可以使用:arecord --buffer-time=20 - | tee output.wav | aplay --buffer-time=20 -。赞美至上! - undefined

首先安装PulseAudio音量控制器/pavucontrol。 可以通过软件管理器进行安装。 或者在终端中运行以下命令: sudo apt-get install pavucontrol
要启动麦克风到扬声器的工作,请在终端中运行以下命令。 pactl load-module module-loopback latency_msec=1
要停止相同的操作,请在终端中运行以下命令。 pactl unload-module $(pactl list short modules | awk '$2 =="module-loopback" { print $1 }' - )

2这个解决方案在Dell Inspiron 7720上的Ubuntu Budgie 18.04(内核4.20.17)上无效。 - Marecky
1这个(module-loopback)似乎无法与Focusrite Scarlett 4i4配合使用。由于某种原因,它在一两秒后会随机断开连接。不过,module-loopback可以与内置麦克风一起使用。而且Scarlett并没有损坏,我可以在Audacity中正常录音 :/. - gatoatigrado
此外,附上文档链接:https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#module-loopback - JOHN_16
汪汪。那太奇怪了。感觉好像延迟很长。我能给延迟应用一个负数吗?;) - Costa Michailidis

我把其他人的答案打包成了一个 Bash 脚本,叫做 'listen'。运行它可以监听你的麦克风输入。它会一直休眠。要停止监听,请终止它(例如按下 Ctrl-C)。
#!/usr/bin/env bash

# Directs audio input (e.g. mic) to audio output (e.g. speakers),
# then sleeps forever. Stops audio redirection when it is killed.
# So, for example, plug your phone into the PC's mic, run 'listen',
# and listen to phone audio through your computer's speakers.
#
# Requires:
# sudo apt-get install pactl

set -e

module=$(pactl load-module module-loopback latency_msec=10)

function cleanup {
  pactl unload-module $module
}

trap cleanup EXIT

sleep infinity

哇,太完美了! - Héliton Martins

你可以使用 jackdqjackctl 来完成。

jackd 是 Linux 上的音频声音服务器守护程序,而其对应的 qjackctl 是一个简单的用户界面,可让您处理 JACK 音频服务器。从这里,您可以将麦克风的输出“虚拟”连接到扬声器。

您可以通过终端安装它们:

sudo apt-get install jackd qjackctl

安装并运行qjackctl后,所提到的连接将如下截图所示:

qjackctl app in action

注意,我是一名专业的音频编辑师,每周都会使用它来录制会议。

6如果连接那里没有任何内容,我该怎么办?我没有那个系统-捕获-回放的东西...那里什么都没有... - Martin Zeltin
1我觉得不起作用是因为我有一个USB麦克风... - Martin Zeltin
奇怪...当你启动qjackctl时,它是不是没有抱怨地启动了? - Rubens Mariuzzo
3@MartinZeltin:对我来说,问题是因为Jack服务器没有启动。点击“消息”按钮,在日志中寻找该错误。为了解决这个问题,我打开了“设置”,然后进入“其他”选项卡,勾选了“应用程序启动时启动JACK音频服务器”。然后我关闭了qjackctl并重新打开它。这样之后,我就可以看到与上面的图片完全一致的内容了。 - Baggers
qjackctl在Ubuntu 22.04桌面版上无法工作:出现无法连接到服务器的错误: 09:27:15.279 统计数据已重置。 09:27:15.282 ALSA连接发生变化。 09:27:15.291 JACK正在启动... 09:27:15.292 /usr/bin/jackd -dalsa -dhw:0 无法连接到服务器套接字,错误=没有该文件或目录 无法连接到服务器请求通道 jack服务器未运行或无法启动。 - undefined


你能详细说明一下如何安装它以及它应该如何工作吗?我想我已经正确地安装了这个扩展(使用Firefox Gnome Shell扩展插件),但是没有任何反应,而且我不知道如何启用/配置它。 - bluenote10
安装完成后,应该会出现一个托盘图标。点击该图标应该可以启用麦克风回环。如果托盘图标没有显示,你可能需要安装类似TopIcon Plus的软件,这样很可能会使其出现。很抱歉我不能给出更具体的说明,因为我切换到了Windows系统,而且已经有一段时间没有使用Linux作为主要系统了。 - Lucas D'Abate
扩展与Ubuntu 22.04桌面和/或shell 42不兼容。 - undefined

您可以使用Audacity的“播放录音”功能来放大您的声音。在编辑菜单中选择“偏好设置”,然后进入“录音”选项,勾选软件播放。

2我不确定音频录制软件是否是将麦克风输入回放到扬声器的正确解决方案。 - David Foerster

Mixxx太棒了!我在Ubuntu(Budgie)18.04上使用它。快速设置,只需打开它,设置好硬件(我只需要设置输入设备),然后打开麦克风。你可以立即开始运行,没有延迟,并且如果你想要的话还能做更多事情。我是从软件商店下载的。

你还可以使用ffplay(ffmpeg的一部分)来监听ALSA设备hw:1,并禁用ffplay的显示功能(-nodisp),这样就不需要X11了。
ffplay -nodisp  -f alsa -i hw:1

请注意:您可以使用ffplay列出可能的ALSA [input]源。
ffplay --sources alsa

你也可以使用OBS Studio。 在添加输入源(如麦克风)后,点击旁边的齿轮图标,选择高级音频属性,在此菜单中选择“监视和输出”作为“音频监视”选项。
我用它将我的任天堂Switch的音频通过USB捕获卡传输到我的电脑耳机上,没有注意到任何延迟。
我相信它使用的是PulseAudio,但在我看来,它的用户界面更友好。

如何在Ubuntu 22.04桌面上安装OBS Studio? - undefined