mpris лаги\несрабатывание.. playerctl audacious

В принципе время выполнения процессов посмотреть довольно просто, используя sysdig (чизел proc_exec_time)
sudo sysdig -c proc_exec_time
proc.duration proc.name    proc.args
------------- ------------ --------------------
41ms          amixer       sset Master 10%+
61ms          amixer       sset Master 10%+
3.00s         sleep        3
3.27ms        date         +%d-%m-%Y (%a), %H:%M
12ms          awk          { print $1/1000 } /sys/class/thermal/thermal_zone6/temp
3.46ms        cat          /sys/class/power_supply/BAT0/uevent
………
42ms          amixer       sset Master 10%-
68ms          amixer       sset Master 10%-
3.00s         sleep        3
3.25ms        date         +%d-%m-%Y (%a), %H:%M
13ms          awk          { print $1/1000 } /sys/class/thermal/thermal_zone6/temp
4.24ms        cat          /sys/class/power_supply/BAT0/uevent
Но вот не пойму - почему команда amixer показана дважды, впервые обратил на это внимание, остальные процессы это вывод информации в bar
Ошибки не исчезают с опытом - они просто умнеют
vasek
sudo sysdig -c proc_exec_time
та не, время норм
кстати аж 6 раз выполняется ) причём 3 раза без параметра, так:
22ms          playerctl    -p audacious volume 0.05+
29ms          playerctl    -p audacious volume 0.05+
13ms          playerctl    -p audacious volume 0.05+
15ms          playerctl    -p audacious volume
12ms          playerctl    -p audacious volume
11ms          playerctl    -p audacious volume
grayich
кстати аж 6 раз выполняется ) причём 3 раза без параметра, так:
Не понятно, на скоро ничего в голову не приходит ...
Ошибки не исчезают с опытом - они просто умнеют
наверно отпишу в багтрекер audacious, пущай копают)
В части 2-х процессов - записал полный лог sysdig и сделал выборку
sysdig -r ~/sysdig.log | grep amixer | grep sset
32241 20:53:31.163401314 3 amixer (110609) < execve res=0 exe=amixer args=sset.Master.10%+. tid=110609(amixer) pid=110609(amixer) ptid=110314(bash) cwd= fdlimit=1024 pgft_maj=0 pgft_min=27 vm_size=400 vm_rss=4 vm_swap=0 comm=amixer cgroups=cpuset=/.cpu=/.cpuacct=/.io=/.memory=/user.slice/user-1000.slice/session-1.sc... env=SHELL=/bin/bash.COLORTERM=truecolor.HISTCONTROL=ignoreboth.HISTSIZE=1000.SWM_... tty=34820 pgid=110609(amixer) loginuid=1000

33624 20:53:31.189019132 3 amixer (110609) < clone res=110610(amixer) exe=amixer args=sset.Master.10%+. tid=110609(amixer) pid=110609(amixer) ptid=110314(bash) cwd= fdlimit=1024 pgft_maj=0 pgft_min=397 vm_size=86520 vm_rss=4900 vm_swap=0 comm=amixer cgroups=cpuset=/.cpu=/.cpuacct=/.io=/.memory=/user.slice/user-1000.slice/session-1.sc... flags=41990659(CLONE_FILES|CLONE_FS|CLONE_PARENT_SETTID|CLONE_SIGHAND|CLONE_SYSVSEM|CLONE_THREAD|CLONE_VM|CLONE_CHILD_CLEARTID|CLONE_SETTLS) uid=1000 gid=100 vtid=110609(amixer) vpid=110609(amixer)

33631 20:53:31.189084871 0 amixer (110610) < clone res=0 exe=amixer args=sset.Master.10%+. tid=110610(amixer) pid=110609(amixer) ptid=110314(bash) cwd= fdlimit=1024 pgft_maj=0 pgft_min=0 vm_size=86520 vm_rss=4900 vm_swap=0 comm=amixer cgroups=cpuset=/.cpu=/.cpuacct=/.io=/.memory=/user.slice/user-1000.slice/session-1.sc... flags=41990659(CLONE_FILES|CLONE_FS|CLONE_PARENT_SETTID|CLONE_SIGHAND|CLONE_SYSVSEM|CLONE_THREAD|CLONE_VM|CLONE_CHILD_CLEARTID|CLONE_SETTLS) uid=1000 gid=100 vtid=110610(amixer) vpid=110609(amixer)
и, как видно, образуется клон - 1-ая запись сам процесс, 2-ая запись клон, ... а 3-я тоже клон, но он не считается

PS - а вот у тебя, при использовании playerctl похоже считаются оба клона ...
Ошибки не исчезают с опытом - они просто умнеют
grayich
audacious
Напрямую пульсу пинать не пробовали?
volume_down
#!/usr/bin/env python
import subprocess
import os
x=0
y=0
env = os.environ
env['LANG'] = 'en_US'
app = '"audacious"'

pactl = subprocess.check_output(['pactl', 'list', 'sink-inputs'], env=env).decode().strip().split()

if app in pactl:
    for e in pactl:
        x += 1
        if e == app:
            break
    for i in pactl[0 : x -1 ]:
        y += 1
        if i == 'Sink' and pactl[y] == 'Input' and '#' in pactl[y + 1]:
            sink_id = pactl[y+1]
        if i == 'Volume:' and '%' in pactl[y + 3]:
            volume = pactl[y + 3]
    sink_id = sink_id[1: ]
    volume = volume[ : -1 ]

    if not int(volume) <= 0:
        subprocess.run(['pactl', 'set-sink-input-volume', sink_id, '-1%'])

# Audacious part
volume = subprocess.check_output( ['audtool', 'get-volume'] )
if not int(volume) <= 0:
    subprocess.run(['audtool', 'set-volume', str(int(volume) - 1)] )

volume_up
#!/usr/bin/env python
import subprocess
import os

x=0
y=0
env = os.environ
env['LANG'] = 'en_US'
app = '"audacious"'

pactl = subprocess.check_output(['pactl', 'list', 'sink-inputs'], env=env).decode().strip().split()

if app in pactl:
    for e in pactl:
        x += 1
        if e == app:
            break
    for i in pactl[0 : x -1 ]:
        y += 1
        if i == 'Sink' and pactl[y] == 'Input' and '#' in pactl[y + 1]:
            sink_id = pactl[y+1]
        if i == 'Volume:' and '%' in pactl[y + 3]:
            volume = pactl[y + 3]
    sink_id = sink_id[1: ]
    volume = volume[ : -1 ]

    if int(volume) < 100:
        subprocess.run(['pactl', 'set-sink-input-volume', sink_id, '+1%'])

# Audacious part
volume = subprocess.check_output( ['audtool', 'get-volume'] )
if int(volume) < 100:
    subprocess.run(['audtool', 'set-volume', str(int(volume) + 1)] )

https://redmine.audacious-media-player.org/boards/1/topics/2292
grayich
для проверки выполняю в терминале последовательность playerctl -p audacious volume 0.05+ несколько раз подряд без задержек, в audacious громкость поднимается не как ожидалось 0.5*количество, а значительно меньше, каждый раз разное значение.
при этом чем больше нагружен процессор в текущий момент, тем сильнее сказывается эффект
Не потдверждаю … ради интереса проверил … и ничего такого не заметил.
Делал и ручками и даже автоматизировал, написал скриптик - проверял в 2-х вариациях - с задержкой 0.5с и без задержки (удалил в скрипте sleep 0.5)
cat ~/test_audio.sh
#!/bin/bash
#
audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.4-; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
sleep 0.5
playerctl -p audacious volume 0.05+; audtool get-volume
echo " было 100, убавили до 60 .... увеличили 8*0.05=0.4 .... должно стать снова 100"
echo "смотрим сколько стало"
audtool get-volume
#
exit 0
Результаты запуска скрипта
1. С задержкой 0.5с
~/test_audio.sh
100
60
65
70
75
80
85
90
95
100
 было 100, убавили до 60 .... увеличили 8*0.05=0.4 .... должно стать снова 100
смотрим сколько стало
100
2. Без задержки .... скрипт отрабатывал практически мгновенно ...
~/test_audio.sh
100
60
65
70
75
80
85
90
95
100
 было 100, убавили до 60 .... увеличили 8*0.05=0.4 .... должно стать снова 100
смотрим сколько стало
100
Ошибки не исчезают с опытом - они просто умнеют
vasek
Не потдверждаю
Vasek у вас пульса в настройках вывода?
Судя по всему у тс глючит именно ее управление через audacious, уровень звука именно этого синка

У меня на алсе он тоже четко работает , но в настройках алса
Пульсу не проверял, не использую
vs220
у вас пульса в настройках вывода?
да - Модуль вывода/Вывод PulseAudio
Ошибки не исчезают с опытом - они просто умнеют
в плеере выбирал альсу, пульсу, в принципе без разницы

vs220
Напрямую пульсу пинать не пробовали?
попробовал скрипт, вроде всё хорошо
но сам скрипт(vup.py) не понял, почему столько телодвижений, установил 4% и почему неровные числа
результат:
  ~>repeat 20 (./vup.py && sleep 0.1; (playerctl -p audacious volume; date +%s.%3N)|tr '\n' ' ';echo); echo "========================"; sleep 1; playerctl -p audacious volume
0.050000 1605281393.950
0.100000 1605281394.209
0.150000 1605281394.460
0.200000 1605281394.730
0.250000 1605281394.983
0.300000 1605281395.217
0.350000 1605281395.500
0.400000 1605281395.757
0.450000 1605281396.020
0.490000 1605281396.283
0.540000 1605281396.547
0.590000 1605281396.827
0.600000 1605281397.100
0.650000 1605281397.365
0.700000 1605281397.643
0.750000 1605281397.900
0.850000 1605281398.177
0.900000 1605281398.483
0.950000 1605281398.777
0.990000 1605281399.037
========================
1.000000

в тоже время через playerctl, хоть пульса хоть альса
  ~>repeat 20 (playerctl -p audacious volume 0.05+ && sleep 0.1; (playerctl -p audacious volume; date +%s.%3N)|tr '\n' ' ';echo); echo "========================"; sleep 1; playerctl -p audacious volume
0.050000 1605281703.857
0.100000 1605281704.010
0.150000 1605281704.180
0.150000 1605281704.337
0.150000 1605281704.507
0.150000 1605281704.660
0.200000 1605281704.820
0.250000 1605281704.987
0.300000 1605281705.153
0.300000 1605281705.307
0.350000 1605281705.507
0.350000 1605281705.658
0.350000 1605281705.820
0.350000 1605281705.974
0.350000 1605281706.133
0.350000 1605281706.287
0.400000 1605281706.447
0.400000 1605281706.597
0.400000 1605281706.747
0.450000 1605281706.903
========================
0.450000

вот такая фигня

з.ы.
а есть альтернативы playerctl ?
 
Зарегистрироваться или войдите чтобы оставить сообщение.