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

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

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

答案1

  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
    

或添加

    load-module module-remap-sink sink_name=mono master=NAME_OF_AUDIO_SINK_GIVEN_BY_PREVIOUS_COMMAND channels=2 channel_map=mono,mono

使其/etc/pulse/default.pa在启动时运行。

  1. 然后在声音偏好设置选择“单声道”作为输出,但请记住将音量降低一半,因为两个声道会混合成一个,否则会出现失真。要测试,请运行:

    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
    

答案2

我已经将答案 1 放入 perl 脚本中,因此我不需要记住这两个命令:

#!/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));

(我本来想注释这个答案,但是我的运气太差了 ;-))

答案3

如果你正在使用杰克,那么您可以使用 patchage(可以使用 进行安装apt-get install patchage)来完成此操作。它的界面非常直观。

答案4

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

 #!/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

相关内容