Как управлять эквалайзером в командной строке?

Пример, который Вы описали в своем вопросе, будет единственным способом, которым я знаю, как сделать это, не создавая отдельные разделы на Вашем жестком диске.

6
27.10.2014, 18:49
4 ответа

Эквалайзер pulseaudio считывает свои настройки в пользовательском файле ~ / .config / pulse / equalizerrc

Чтобы отобразить его:

cat ~/.config/pulse/equalizerrc

Итак, в качестве примера, чтобы задать значение 10 дБ на 5-й полосе эквалайзера и непосредственно уловить изменение:

sed -i '19s/.*/10.0/' ~/.config/pulse/equalizerrc | pulseaudio-equalizer toggle

Для пояснения, sed заменит все строки с номерами 19 , и заменит его на 10.0 в файле конфигурации, затем эквалайзер перезапускается / переключается для получения результата.

3
27.01.2020, 20:31

Основываясь на странице технических сведений для этого дистрибутива, я предполагаю, что он получен от Lubuntu. Lubuntu происходит от Ubuntu, который происходит от Debian.

отрывок
Package Management     : Debian Packager with APT
Desktop Environment    : Gnome Classic (also contains Unity & Gnome Shell)
Kernel Version         : 3.2.0.30.32
OS Family              : Unix-like
Source Model           : Partially Open Source (Contains non-free applications)
Current Version        : 12.04.1
Parent Distribution    : Ubuntu Linux 12.04 LTS
License                : Mainly the GNU GPL and various other free software
Architecture           : Intel x86 (32bit)
Installation Medium    : 2.5 GB ISO image
MD-5 Checksum          : ba092dad03317677887565a4aa0a59f1
-121--15077-

ПРИМЕЧАНИЕ: Я только что понял, что он хотел уменьшить BookmarkPageNumber на произвольное целое число, которое я изначально перечитал, и мое решение ниже работает только для уменьшения его на 1. Тем не менее, я чувствую себя сильно нажатым удаление полностью учитывая усилия, которые я вложил в него:

--------------

В случае, если вы чертовски склонны использовать только sed, у меня есть этот 1 лайнер для вас: sed-r '/^BookmarkPageNumber: / {s/([0-9] *) $/\1/;:loop {s/0 / 9/;/0 @/b петля;}; s/1 / _ 0/; s/2 / _ 1/; s/3 / _ 2/; s/4 / _ 3/; s/5 / _ 4/; s/6 / _ 5/; s/7 / _ 6/; s/8 / _ 7/; s/9 / _ 8/; s/$ @9+ / ПОДЗЕМНЫЙ ГЛУБИННЫЙ ПОТОК/; s/_0*//; s/_//}' 1$> Примечание metadata.txt

: это только работает на естественные десятичные числа, я надеюсь, что это хорошо для вас.

О, он даже имеет обнаружение недостаточного потока. Так что если вы хотите, чтобы ваши номера страниц насытились до 0, просто замените UNDERFLOW на 0

И я согласен с тем, кто называет это просто интеллектуальным блужданием, потому что это то, что есть.

p.s.: Вероятно, следует проверить, что дескрипторы входных и выходных файлов не указывают на один и тот же файл, иначе файл будет усечен, если пользователь имеет доступ на запись.

-121--93522-

Я полагаю, что команда pacmd .

EDIT:

Если перейти по адресу:

/usr/share/pulseaudio/alsa-mixer/profile-sets

, вы найдете несколько файлов конфигурации. Можно попробовать изменить default.conf .

-2
27.01.2020, 20:31

рассмотрим pulseaudio-mixer-cliиз здесь . это скрипт на основе Python, обеспечивающий индивидуальный контроллер громкости потока на основе текста:

[++] Jack sink (PulseAudio JACK Sink) M [ ########################## ] [++] HDMI 0 (hdmi-stereo@snd_hda_intel) M [ ########################## ] [81] ID 440 Analog (snd_hda_intel) - [ #####################----- ] [35] mpv - Bax - Perceptions 206 on ETN.fm - [ #########----------------- ] [38] VLC media player (fraggod@malediction) - [ ##########---------------- ] [54] Skype (fraggod@malediction:24202) - [ ##############------------ ] [27] ALSA plug-in [PillarsOfEternity] - [ #######------------------- ]

-1
27.01.2020, 20:31

Вот скрипт, адаптированный из qpaeq, поставляемый с Pulseaudio:

#!/usr/bin/env python
# pulse-set-eq
import os,math,sys
import dbus

# Source adapted from utils/qpaeq of PulseAudio

def connect(): # copied from qpaeq
    try:
        if 'PULSE_DBUS_SERVER' in os.environ:
            address = os.environ['PULSE_DBUS_SERVER']
        else:
            bus = dbus.SessionBus() # Should be UserBus, but D-Bus doesn't implement that yet.
            server_lookup = bus.get_object('org.PulseAudio1', '/org/pulseaudio/server_lookup1')
            address = server_lookup.Get('org.PulseAudio.ServerLookup1', 'Address', dbus_interface='org.freedesktop.DBus.Properties')
        return dbus.connection.Connection(address)
    except Exception as e:
        sys.stderr.write('There was an error connecting to pulseaudio, '
                         'please make sure you have the pulseaudio dbus '
                         'module loaded, exiting...\n')
        sys.exit(-1)

def get_sink(str):
    connection=connect()
    path='/org/pulseaudio/core1/sink%s'%str
    sink=connection.get_object(object_path=path)
    return sink

args = sys.argv[1:]
if len(args)<5:
    print("Usage: "+sys.argv[0]+" SINK_NUM CHANNEL_NUM PREAMP_VALUE FREQ1 COEF1 [FREQ2 COEF2...]")
    sys.exit()


sinknum = args.pop(0);
sink = get_sink(sinknum);

prop_iface='org.freedesktop.DBus.Properties'
eq_iface='org.PulseAudio.Ext.Equalizing1.Equalizer'
sink_props=dbus.Interface(sink,dbus_interface=prop_iface)

def get_eq_attr(attr):
    return sink_props.Get(eq_iface,attr)

sample_rate=get_eq_attr('SampleRate')
filter_rate=get_eq_attr('FilterSampleRate')
nchannels=get_eq_attr('NChannels')

sys.stderr.write('channels %d, sample rate: %f, filter sample rate: %f\n'%
    (nchannels, sample_rate, filter_rate))

channel = int(args.pop(0));
preamp = float(args.pop(0));

freqs = [];
coeffs = [];
while len(args) > 0:
    if len(args)==1:
        sys.stderr.write('Odd number of frequency/amplification arguments (%d)\n'%(len(freqs)*2+1))
        sys.exit(-1)
    sys.stderr.write('(%s, %s)\n'%(args[0],args[1]))
    freqs.append(float(args.pop(0)))
    coeffs.append(float(args.pop(0)))

#sys.stderr.write("freqs: "+str(freqs)+'\n');

freqs = list([int(round(x*filter_rate/sample_rate)) for x in freqs])
#sys.stderr.write("translated freqs: "+str(freqs)+'\n');

freqs = [0]+freqs+[filter_rate//2];
coeffs = [coeffs[0]]+coeffs+[coeffs[-1]];
#sys.stderr.write("proper freqs: "+str(freqs)+'\n');

# for some reason this fixes the types of the arguments to SeedFilter
sink=dbus.Interface(sink,dbus_interface=eq_iface)

# set the filter coefficients
sink.SeedFilter(channel,freqs,coeffs,preamp)

Использование :

Получите номер приемника, используя pacmd list-sinks, затем

./pulse-set-eq SINK_NUM CHANNEL_NUM PREAMP_VALUE FREQ1 COEF1 [FREQ2 COEF2 …]

Обратите внимание, что кажется, что КАНАЛ _NUM 0 будет соответствовать первому каналу, 1 — второму и т. д., и если вы используете фактическое количество каналов (, например. 2, если у вас есть два канала ), он установит выравнивание для всех каналов.

Вы можете в любое время проверить примененные настройки с помощью qpaeq.

Предпосылки:

Обратите внимание, что сначала вы хотите загрузить модуль эквалайзера, а также модуль протокола DBus:

pactl load-module module-dbus-protocol
pactl load-module module-equalizer-sink sink_name=... sink_master=...
pactl set-default-sink...

Игра со сценарием

Затем сделайте какой-нибудь шум, или музыку, или что-нибудь еще:

play -n synth pinknoise gain -10

Затем вызовите сценарий с номером приемника, индексом канала, к которому вы хотите применить эквалайзер, предусилителем (, коэффициентом масштабирования )и списком пар (частоты и коэффициента ). Список частот не обязательно должен быть плотным, так как он интерполируется (, см. seed_filterвpulseaudio/src/modules/module-equalizer-sink.c)для получения коэффициентов фильтра. Если вы укажете общее количество каналов в качестве индекса канала, то обновление будет применено ко всем каналам. Используйте pacmd list-sinks, чтобы получить номер приемника.

Например, если номер приемника $SINKNUM и он имеет 2 канала, то это сбрасывает эквалайзер на все единицы, в чем вы можете убедиться, открывqpaeq:

./pulse-set-eq $SINKNUM 2 1.0    100 1.0

Здесь 100 Гц произвольно; список должен быть не пустым и не может начинаться с нуля. Частоты должны быть между 0 и 32768 (максимум для меня, не уверен, что это настраивается, см. переменную filter_rateвыше -это половина ). Скрипт использует коэффициенты усиления наименьшей и наибольшей частот, указанных в командной строке, для частот ниже и выше этих соответственно, поэтому в этом случае всему спектру будет присвоен коэффициент усиления 1,0. При этой настройкеэквалайзер оставит сигнал неизменным (в теории по крайней мере ).

Будьте осторожны, чтобы не повредить динамики, но, например, вы можете поиграть, создав розовый шум и установив эквалайзер на шип (со 100-кратным усилением )на одной частоте (500 Гц):

./pulse-set-eq $SINKNUM 2 1.0    499 0 500 100 501 0

Когда я это делаю, я слышу дискретную последовательность тонов разной случайной громкости, все на частоте 500 Гц, которые, как я полагаю, принадлежат последовательным окнам ДПФ в реализации фильтра. Это несколько приятно. Воспроизведение музыки через этот фильтр забавно. Такой резкий "пропуск" был бы невозможен при использовании обычного графического эквалайзера без командной -строчной версии.

В следующем примере создается фильтр, повышающий и понижающий частоту, немного похожий на сирену. Очевидно, вам нужно, чтобы играла какая-то музыка, или шум, или что-то еще, чтобы услышать эффект.

SINKNUM=12; NCHAN=2;
while true; do
    for i in $(seq 500 10 1500) $(seq 1500 -10 500); do
       ./pulse-set-eq $SINKNUM $NCHAN 1 \
            0 1 $(( $i - 300 )) 1 \
            $i 5 $(( $i + 300 )) 1 \
            32768 1;
    done;
done
4
27.01.2020, 20:31

Теги

Похожие вопросы