Есть ли способ скопировать файлы истории команд, записанные и скопированные одновременно дважды?

Вот скрипт, адаптированный из 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
0
23.09.2020, 15:33
1 ответ

вы можете установить acctили psacctдля аудита того, что пользователи делают в ваших системах. С этим инструментом поставляется команда lastcomm, которая может сообщить вам, какие команды были введены пользователем.

Здесь есть очень хороший туториал

В этом инструменте гораздо больше функций аудита, которые могут быть очень полезны для аудита аккаунта.

1
18.03.2021, 23:03

Теги

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