我可以将立体声音频缩混为单声道吗?


40

我的计算机旁边有一个扬声器,该扬声器主要用作耳机放大器。有时我需要将其用作扬声器。是否可以在系统范围内或作为媒体播放器的插件将音频输出从立体声快速更改为单声道?

sound 

附带说明一下,我可以使用Voodoo Control应用程序在Android手机上执行此操作,该应用程序需要自定义内核,该内核可以调整星系电话中的耳机放大器
daithib8 2011年

Answers:


58
  1. 通过运行查找音频接收器的名称

    pacmd list-sinks | grep name:
  2. 然后运行以下命令(注意卸下尖括号):

    pacmd load-module module-remap-sink sink_name=mono master=<name_of_audio sink_given_by_previous_command> channels=2 channel_map=mono,mono

    或添加参数pacmd,以/etc/pulse/default.pa有它在启动时运行。

  3. 然后在“ 声音首选项”中选择“单声道”作为输出,但是请记住将音量减小一半,因为两个声道混合成一个,否则会失真。要测试,请运行:

    speaker-test -c 2 -t sine

单个命令中的相同内容:

pacmd load-module module-remap-sink sink_name=mono master=$(pacmd list-sinks | grep -m 1 -oP 'name:\s<\K.*(?=>)') channels=2 channel_map=mono,mono
  1. 要删除单声道,只需使用:

    pacmd unload-module module-remap-sink

像魅力一样工作!好东西!我之所以必须这样做,是因为我只剩下1个扬声器(在4个扬声器中,仅使用前连接器),并且Phone Booth DVD在错误的通道中播放了某些声音或其他声音。
Bruce van der Kooij 2012年

当我尝试此操作时,我是否是唯一一个即使在小音量下也会产生系统声音失真的人?
Severo Raz 2012年

2
确保减小“应用程序”音量(也在“声音首选项”中找到)和“输出”音量。如果您从终端播放音乐,则可以从那里调节音量。
daithib8

4
只是对任何有点困惑(如我所做的事情)的人的评论:@ daithib8编写“或将pacmd参数添加到/etc/pulse/default.pa”时,这意味着sudo emacs /etc/pulse/default.pa(或sudo nano您喜欢的任何编辑器),向下滚动到末尾,然后将命令中的所有内容(pacmd 部分除外)粘贴到文件底部的新行中。然后保存并重新启动:-)
machineghost

1
对于单侧听力损失的人来说,您是救生员。
Omri Barel'3

14

我已将答案1转换为perl脚本,因此无需记住以下2条命令:

#!/usr/bin/perl
use strict;

my @choices = ();
my $i = 0;
for (`pacmd list-sinks`) {
    if( /name:.*<(.+)>/) {
        $choices[$i++] = $1;
        print "$i:\t$1\n";
    }
}
my $choice = $choices[<>-1] or die "invalid choice";
exec (qw(pacmd load-module module-remap-sink sink_name=mono),
    "master=$choice",
    qw(channels=2 channel_map=mono,mono));

(我会注释这个答案,但是我的业力很低;-))


如何隐藏pacmd命令的输出?
jarno 2015年

2
哦,您可以用以下命令替换exec命令exec "pacmd load-module module-remap-sink sink_name=hono master=$choice channels=1 channel_map=mono >/dev/null";(这将隐藏输出,并使用稍微简单的映射。)
jarno

3

如果您使用jack,那么您可以使用patchage(可以通过进行安装apt-get install patchage)进行操作。它具有非常直观的界面。


那么,安装修补程序后该怎么办?“帮助”菜单中没有任何帮助,我也无法在网站上找到手册或简介。
user800

@ user800:将Pulse_sink左/右和杰克接收器左/右连接到系统回放
_1

1

似乎没有简单的方法可以做到这一点。

不过,您可以通过将所有PulseAudio输出代理到Jack Sink来实现。太累了,不能随便使用...


0

您可能可以使用PulseAudio声音设置管理器将立体声更改为单声道。或者,您可以尝试将所有声音平移到左右扬声器上。


平移将不起作用。它不会将两个声道混在一起,只会使其中一个扬声器静音,而只取其中一个声道的输出。
拉法尔Cieślak

David要求平移。平移是两个声道混合在一起以便将它们输出到一个扬声器的动作,通常是为了给人留下声音来自特定方向的印象。因此,名称为pan(orama)ing。此方法的一个变种,称为“ 向上平移”,将声道混合在一起,但向每个扬声器输出相等量的结果。由于他只使用一个扬声器,这也将对他有用。Pulseaudio音量控制只能调节平衡,尽管没有发生混音,但每个扬声器的音量都可以调节。
daithib8 2011年

0

作为附录,在使用上述答案创建单声道接收器之后,可以将此脚本映射到热键:

 #!/bin/bash

 if [ "* index: 0" == "$(pacmd list-sinks | grep "*" | sed 's/^ *//')" ];
    then pacmd set-default-sink 1 && notify-send "Mono";
    SINK=1;
 else
    pacmd set-default-sink 0 && notify-send "Stereo";
    SINK=0; 
 fi;
 pacmd list-sink-inputs | grep index | grep -o '[0-9]*' | while read -r line; 
    do pacmd move-sink-input $line $SINK;
 done;

这将在接收器之间切换并将当前流重新映射到新接收器(ma

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.