LINUX.ORG.RU

apulse

 ,


23

13

Everyone! Listen up! Today... today...

$ apulse <program-name> [program parameters]

https://github.com/i-rinat/apulse — эмуляция PulseAudio. Когда приложение пытается загрузить libpulse.so, ему подсовывают её версию от apulse, в которой реализована часть функций, достаточная, чтобы запустить Skype и некоторый другой софт.

★★★★★

Ответ на: комментарий от i-rinat

А еще, на всякий пожарный, ключик -L/usr/lib$LIBDIRSUFFIX надо. А то иной раз встречаются кривые файлы для pkg-config, из-за которых оно пытается линковаться с библиотекой не той разрядности... Именно с apulse не встречал такого, но все же.

yars068 ★★★★ ()
Ответ на: комментарий от O02eg

Нет, это надо альсу пилить. Точку зрения i-rinat уже озвучивал выше.

yars068 ★★★★ ()
Ответ на: комментарий от yars068

В Debian и Ubuntu теперь вместо lib32 и lib64 используют поддиректории. Что-то типа /usr/lib/i386-linux-gnu/libsomething.so.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

libasound2-dev:i386 да этого и не хватало, почемуто в синаптике его нет, через апт гет инсталл поставился, правда у меня ничего не заработало с 64 битной версией хром и фаерфокс не подружились, причем фаерфокс начинает играть дальше тишина и виснет, с 32 битной скайп тож чтото не заработал(

alexdarktech ()
Ответ на: комментарий от alexdarktech

LD_PRELOAD=/usr/lib/apulse/как_там_ее.so apulse skype $@ тебе должен помочь. Но нужно убедиться, что 1) у тебя есть необходимый apulse набор библиотек мультилиба и 2) ты собрал именно 32-разрядную apulse. А с 64-разрядной apulse шкайп и не заработает, так как он 32-разрядный.

yars068 ★★★★ ()
Последнее исправление: yars068 (всего исправлений: 4)
Ответ на: комментарий от i-rinat

Попробовал версию media-sound/apulse-0.1.6-r1, разговор длительностью 02:10:12 - проблемы не было.

До этого стояла версия 0.1.7. Номера версий справедливы для Gentoo.
Может просто повезло?:)

afterlanding ★★ ()
Ответ на: комментарий от alexdarktech

хром и фаерфокс не подружились

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

В коде была возможность включить трассировку, которая выводит все функции, которые вызываются. Было включено для Debug. Сейчас вставил параметр WITH_TRACE для cmake, со значениями 0, 1 и 2. Вариант «1» включает отображение вызовов тех функций, для которых нет реализации. Использовать примерно так: cmake -DWITH_TRACE=1 ..

i-rinat ★★★★★ ()
Ответ на: комментарий от yars068

Чтото както

alexlu@alexlu-OEM:~$ LD_PRELOAD=/usr/lib/apulse/libpulse.so.0 apulse skype $@
ERROR: ld.so: object '/usr/lib/apulse/libpulse.so.0' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
 
скайп вобще не стартанул, а можно по подробнее про этот необходимый набор библиотек, и да забыл скзать алса через джэк плагин работает с другими алса приложениями все норм.

alexdarktech ()
Ответ на: комментарий от alexdarktech

LD_PRELOAD=/usr/lib/apulse/libpulse.so.0 apulse skype $@

Какая-то часть лишняя.

Суть — сделать так, чтобы Skype при запуске взял libpulse.so.0 не системную, а от apulse. Это можно сделать, впрыснув её явно через LD_PRELOAD, но тогда не нужен запускающий скрипт:

$ LD_PRELOAD=/usr/lib/apulse/libpulse.so.0 skype

А можно использовать запускающий скрипт, который называется apulse. Он устанавливает другую переменную, LD_LIBRARY_PATH. Она используется при поиске библиотек при запуске программ. Сначала библиотеки ищутся в директориях, указанных в LD_LIBRARY_PATH, а уже потом в системных. Тогда надо запускать так:

$ apulse skype

Сообщение о том, что предзагрузить не удалось, возникает потому что скрипт исполняется командным интерпретатором, bash или sh, а они 64-битные.

«$@» означает все параметры команды. Это для скриптов, и тут вообще не нужно.

алса через джэк плагин работает

Плагин-то скорее всего юзерспейсный. Поэтому нужно, чтобы в системе была ещё установлена его 32-битная версия.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Неполучается победить qjack

да не хочет 32 битная алса с 64 битным плагином работать а 32 битный плагин не дружит с qjack64 битным и хз как это подружить.

alexdarktech ()
Ответ на: Неполучается победить qjack от alexdarktech

Как-то я не понимаю сути проблемы, соотношения чего с чем конфликтует.

Вот есть 32bit приложение, использующее PulseAudio. Оно грузит libpulse (apulse), та грузит libasound, та грузит плагин для JACK, который шлёт данные в сокет. Вся цепочка до сокета — 32bit. На другой стороне сокета слушает 64bit jackd, который через 64bit libasound пишет данные в файл устройства, а дальше с эти разбирается ядро.

qjackctl 64bit. Он соединяется через сокет с jackd и шлёт ему управляющие команды. Ему в принципе не надо загружать ни libasound, ни плагины к ALSA.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

В теории да а вот на практике плагин запускается, соединение в джеке появляется, а звука нет джэк ругается

Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackEngine::XRun: client = jack was not finished, state = Triggered
Mon Feb 15 14:24:16 2016: ERROR: JackEngine::XRun: client = jack-01 was not finished, state = Triggered
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Feb 15 14:24:16 2016: ERROR: JackEngine::XRun: client = jack was not finished, state = Triggered
Mon Feb 15 14:24:16 2016: ERROR: JackEngine::XRun: client = jack-01 was not finished, state = Triggered
Mon Feb 15 14:24:16 2016: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
 

alexdarktech ()
Ответ на: комментарий от alexdarktech

Попробовал я звук в jack через плагин загонять. С 64-битным mpv играет, а с 32-битным — нет. То есть баг есть, воспроизводится и без apulse. А лезть в нутра JACK мне совсем не хочется.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

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

alexdarktech ()

Привет! Я нащупал баг. Когда я записывал видео про то, как отключить PulseAudio, запись с микрофона внезапно отвалилась после того, как я выключил скайп (продемонстрировав, что он работает). Я перезаписал видео, на этот раз не выключая скайп. Звук отвалился при включении Skype. Отправляю тебе видео, вот посмотри: https://yadi.sk/i/OG_WKOr4p8p3h (немонтированное и несжатое). Лучше предварительно сохранить на комп.

При запуске пишет следующее:

[apulse] [error] do_connect_pcm, snd_pcm_open, Устройство или ресурс занято

А ещё каждый раз при записи видео с экрана скайп не выключался. С экрана исчезал, а в процессах оставался. Я его убивал с помощью killall -9 skype.

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

do_connect_pcm, snd_pcm_open, Устройство или ресурс занято

Не думаю, что errno врёт. Скорее всего, устройство действительно было занято. Конфиг ALSA дефолтный? Я тут недавно выяснил, что если менять конфигурацию, то надо настраивать dmix и dsnoop явно.

Всё время считал, что вывод в plughw включает это автоматически, ан нет. plughw прозрачно преобразует частоту дискретизации и формат отсчётов, но на этом всё.

У меня встроенный кодек, у него один канал воспроизведения. И у меня два экземпляра аудиоплеера не могут выводить звук одновременно через plughw:0,0. Возможно, для дискретных аудиоадаптеров возможно параллельное использование нескольких каналов. Никогда не пробовал.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Дефолтный, да.

> Возможно, для дискретных аудиоадаптеров возможно параллельное использование нескольких каналов. Никогда не пробовал.

Вообще, на этой карте можно играть в Героев 3 и одновременно слушать музыку. На Intel HDA нельзя: игра старая, умеет только OSS. Чудеса, да и только!

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Дефолтный, да.

А, да. Ты ж древние версии любишь. Может, там ещё не было dmix по умолчанию?

игра старая, умеет только OSS

aoss не помогает?

i-rinat ★★★★★ ()

alsa-oss обвязка была ж вроде...

Gonzo ★★★★★ ()
Ответ на: комментарий от i-rinat

Там не древняя, там 1.1.0, недавно прилетевшая из Packman (это репозиторий с кодеками в Opensuse).

aoss с Героями скорее всего работает, но я не заморачивался и запускал прямо так. И вдруг внезапно обнаружил, что плеер и игра, запущенные вместе, работают конкретно на креативовской карте.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от afterlanding

На версии 0.1.7 - да, в каждом разговоре.

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

Возможно, даже с выключенной возможностью крутить громкость Skype пытается её выровнять программно, и в какой-то момент алгоритм заклинивает.

i-rinat ★★★★★ ()

Привет! Помнишь я постил видео, в котором внезапно прекратился звук? Так вот, проблема не в apulse.

libasound2 1.1.0, который прилетел ко мне из Packman, глючный. В процессе записи видео с экрана появляется надпись ALSA buffer overrun, и веселье начинается. В интернете нашёл решение: разделить команды записи аудио и видео, и пустить две копии ffmpeg раздельно. И всё записалось, в том числе и демонстрация того, что скайп работает!

Правда, начался рассинхрон звука в видео. И чем дальше смотришь, тем сильнее рассинхрон! В этот раз, проблема в видео: запись идёт со скоростью 28-29 FPS вместо 30-ти.

Ещё с новым libasound2 глючат War Thunder и скайп: собеседник перестаёт слышать меня через несколько минут. Откат библиотеки на старую версию помогает, но тогда отваливаются ffmpeg и VLC.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 3)
Ответ на: комментарий от ZenitharChampion

В процессе записи видео с экрана появляется надпись ALSA buffer overrun, и веселье начинается.

Действительно странно. Бисектить не пробовал?

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

А что такое бисектить?

Не знаешь как запустить обе команды ffmpeg синхронно? А то я убил кучу нервов, синхронизируя аудио и видеодорожки.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Ответ на: комментарий от ZenitharChampion

А что такое бисектить?

Это способ поиска ошибочного изменения. Выбирается некое старое состояние, в котором было хорошо, и текущее, в котором плохо. Потом история между ними делится пополам, проверяется это состояние. По результатам проверки диапазон сокращается вдвое. Действие повторяют, пока не найдут тот самый патч, который всё поломал. В git есть команда bisect, которая помогает это делать.

Не знаешь как запустить обе команды ffmpeg синхронно?

Нет, такого не знаю. И насколько я понял, проблема с синхронизацией у тебя из-за того, что скорости захвата не совпадают. Так что простое совмещение начал ничего не даст.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Там ключевое слово «libasound2 1.1.0, который прилетел из Packman, глючный». Попробуй теперь отследи это в гите... А если брать из реп (pacman), то одна версия глючит с одним, другая - с совсем другим уже... Нос вытащил - хвост увяз, как говорится (с)

Gonzo ★★★★★ ()
Последнее исправление: Gonzo (всего исправлений: 2)

Использую apulse для запуска qemu с десяточкой профессиональной внутри. Возникла проблемка:
Первый запуск apulse+qemu проходит нормально, звук есть и в qemu и в остальном софте.
Но после выключения apulse+qemu, звук ломается:

$ aplay /usr/share/sounds/alsa/Front_Center.wav
ALSA lib /var/tmp/portage/media-libs/alsa-lib-1.1.1/work/alsa-lib-1.1.1/src/pcm/pcm_dmix.c:1079:(snd_pcm_dmix_open) unable to open slave
aplay: main:786: audio open error: File descriptor in bad state

$ mpg123 test.mp3 
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
	version 1.23.4; written and copyright by Michael Hipp and others
	free software (LGPL) without any warranty but with best wishes
Segmentation fault

Повторный запуск apulse+qemu выдает всякую ругань, но при этом в qemu звук есть.
$ sudo QEMU_AUDIO_DRV=pa apulse qemu-system-x86_64 \ [...skipped 100500 qemu args...]
 
QEMU 2.6.0 monitor - type 'help' for more information
(qemu) ALSA lib /var/tmp/portage/media-libs/alsa-lib-1.1.1/work/alsa-lib-1.1.1/src/pcm/pcm_dmix.c:1079:(snd_pcm_dmix_open) unable to open slave
[apulse] [error] do_connect_pcm, snd_pcm_open, File descriptor in bad state
[apulse] [error] do_connect_pcm, snd_pcm_open, File descriptor in bad state
pulseaudio: pa_simple_new for playback failed
pulseaudio: Reason: Oops.
ALSA lib /var/tmp/portage/media-libs/alsa-lib-1.1.1/work/alsa-lib-1.1.1/src/pcm/pcm_dsnoop.c:654:(snd_pcm_dsnoop_open) unable to open slave
[apulse] [error] do_connect_pcm, snd_pcm_open, File descriptor in bad state
[apulse] [error] do_connect_pcm, snd_pcm_open, File descriptor in bad state
pulseaudio: pa_simple_new for capture failed
pulseaudio: Reason: Oops.

Починить можно запустив один раз что-нибудь из-под root, например mpg123 или aplay. Чинится до следующего запуска/выключения apulse, после чего опять всё ломается.
Раньше такого не было. Длительное время не пользовался qemu, потому не могу сказать в какой момент оно сломалось. Наверняка наобновлялось что-нибудь, например ядро или alsalib.
В .asounrc у юзера настройки для клонирования звука analog+hdmi, но они всегда там были и раньше всё работало. У root .asoundrc нету. Версия apulse 0.1.7.

Lavos ★★★★★ ()
Ответ на: комментарий от Lavos

Пробовал на заново запущенной системе сначала aplay (или что-нибудь другое, что через ALSA звук проигрывает) запускать сначала от рута, а потом то же самое от пользователя?

Содержимое каталога /dev/snd меняется после запуска qemu от рута? Файлы там не пропадают? После закрытия qemu остаётся что-нибудь в выводе lsof /dev/snd/*?

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Пробовал на заново запущенной системе сначала aplay (или что-нибудь другое, что через ALSA звук проигрывает) запускать сначала от рута, а потом то же самое от пользователя?

Да, проблем нет.

Содержимое каталога /dev/snd меняется после запуска qemu от рута? Файлы там не пропадают? После закрытия qemu остаётся что-нибудь в выводе?

Содержимое /dev/snd не изменяется, вот оно (и сразу после перезагрузки и после запуска sudo apulse qemu и после выключения qemu):

$ ls -hla /dev/snd/
total 0
drwxr-xr-x   3 root root      260 May 28  2016 .
drwxr-xr-x  18 root root     3.6K May 28 16:03 ..
drwxr-xr-x   2 root root       60 May 28  2016 by-path
crw-rw----+  1 root audio 116,  2 May 28  2016 controlC0
crw-rw----+  1 root audio 116,  4 May 28 16:05 pcmC0D0c
crw-rw----+  1 root audio 116,  3 May 28 16:05 pcmC0D0p
crw-rw----+  1 root audio 116,  5 May 28  2016 pcmC0D1p
crw-rw----+  1 root audio 116,  6 May 28  2016 pcmC0D2c
crw-rw----+  1 root audio 116,  7 May 28  2016 pcmC0D3p
crw-rw----+  1 root audio 116,  8 May 28  2016 pcmC0D7p
crw-rw----+  1 root audio 116,  9 May 28 16:04 pcmC0D8p
crw-rw----+  1 root audio 116,  1 May 28  2016 seq
crw-rw----+  1 root audio 116, 33 May 28  2016 timer

lsof после выключения qemu показывает только крыскину крутилку громкости:

# lsof /dev/snd/*
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
panel-10- 2757  leo    8u   CHR  116,2      0t0 2181 /dev/snd/controlC0

leo       2757  0.0  0.1 471736 23284 ?        Sl   16:04   0:00 /usr/lib64/xfce4/panel/wrapper-1.0 /usr/lib64/xfce4/panel/plugins/libmixer.so 10 16777261 mixer Регулятор громкости Регулирует уровень звука

Lavos ★★★★★ ()
Ответ на: комментарий от Lavos

Судя по сообщениям, dmix пытается открыть зависимое устройство, но у него почему-то не получается. Но вот какой именно вызов возвращает -EBADFD, не понятно. Было бы здорово подцепиться отладчиком и поставить точку останова на вызове snd_pcm_open_slave() в pcm_dmix.c:1079, чтобы потом по шагам проследить, где происходит возврат -EBADFD.

(Кстати, в этой функции, snd_pcm_dmix_open, две ветки. Одна для первого запуска, другая для последующих. Баг генерируется во второй.)

Я почти ничего не понимаю в конфигах ALSA, но как-то странно, что в конфиге используется dmix:0,0. Есть возможность прописать dmix устройство явно?

Ещё я бы рекомендовал убрать на время .asoundrc у пользователя и повторить тот же эксперимент: qemu от рута, потом aplay от пользователя.

i-rinat ★★★★★ ()
Ответ на: комментарий от Lavos

В alsa-lib dmix, оказывается, умеет форкаться, создавая звуковой сервер для смешивания звуков. Этот сервер создаёт сокет для передачи данных. И по умолчанию права на него ставятся 0600, то есть только для пользователя. Возможно, это как-то влияет.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Убрал asoundrc, перезагрузился, проблема воспроизводится. :(
А в отладчиках я ничего не понимаю, я же не прогер... :((((
Попробую пооткатывать пакеты хоть как-то связанные со звуком, может найду из-за чего оно сломалось...

Lavos ★★★★★ ()

отлично, не знал про такую штуку.

Благодарю.

Olegarch ()
Ответ на: комментарий от i-rinat

не попадалась ли ситуация когда в скайпе микрофон отваливается через 1-2 минуты разговора? незнаю даже как начать отлавливать проблему.

irton ★★★★★ ()
Ответ на: комментарий от Lavos

alsa-lib-1.1.0 = всё хорошо, alsa-lib-1.1.1 = всё плохо.

Хорошая начальная точка. Попробую воспроизвести у себя это.

i-rinat ★★★★★ ()
Ответ на: комментарий от irton

не попадалась ли ситуация когда в скайпе микрофон отваливается через 1-2 минуты разговора?

Попадалась. Иногда помогает снять галочку «Позволить Skype автоматически подстраивать громкость». Иногда не помогает.

Часть API, связанная с регулировкой громкости вообще не реализована. Я пробовал её делать, но Skype выкручивал громкость в ноль и не было слышно ничего.

i-rinat ★★★★★ ()
Ответ на: комментарий от Lavos

Попробовал поставить alsa-lib 1.1.1, запускать mpv из-под рута, потом из-под обычного пользователя, но ничего не воспроизвелось. Потом до меня дошло, что раз с aplay ты это не смог воспроизвести, то и у меня с mpv вряд ли получится. Я попробовал запускать qemu с QEMU_AUDIO_DRV=pa, но всё продолжило работать.

Слушай, а ведь ты qemu не просто так запускаешь, да? Наверняка туда что-то из PCI устройств пробрасывается. Может ли быть такое, что qemu отбирает звуковую карту у основной системы? Возможно, это пробрасывание как-то влияет.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Туда пробрасывается видяха и usb-контроллер. Звук qemu эмулирует. DRV=pa, т.к. qemu не умеет эмулировать для гостя HDA, используя ALSA, только через pulseaudio. :(
AC97 умеет через ALSA, но драйверов нет для десяточки.

Lavos ★★★★★ ()
Ответ на: комментарий от i-rinat
wget 'http://git.alsa-project.org/?p=alsa-lib.git;a=commitdiff_plain;h=fdba9e1bad8f769a6137e565471f0227f23a3132' -O /etc/portage/patches/media-libs/alsa-lib/123.patch
emerge -1 =media-libs/alsa-lib-1.1.1

Теперь после выключения qemu aplay и всё остальное от юзера работают.
Но apulse второй раз совсем не запускается:

QEMU 2.6.0 monitor - type 'help' for more information
(qemu) ALSA lib /var/tmp/portage/media-libs/alsa-lib-1.1.1/work/alsa-lib-1.1.1/src/pcm/pcm_dsnoop.c:589:(snd_pcm_dsnoop_open) unable to create IPC shm instance
[apulse] [error] do_connect_pcm, snd_pcm_open, Cannot allocate memory
[apulse] [error] do_connect_pcm, snd_pcm_open, Cannot allocate memory
pulseaudio: pa_simple_new for capture failed
pulseaudio: Reason: Oops.
ALSA lib /var/tmp/portage/media-libs/alsa-lib-1.1.1/work/alsa-lib-1.1.1/src/pcm/pcm_dsnoop.c:589:(snd_pcm_dsnoop_open) unable to create IPC shm instance
[apulse] [error] do_connect_pcm, snd_pcm_open, Cannot allocate memory
[apulse] [error] do_connect_pcm, snd_pcm_open, Cannot allocate memory
pulseaudio: pa_simple_new for capture failed
pulseaudio: Reason: Oops.
audio: Failed to create voice `adc'
GLib (gthread-posix.c): Unexpected error from C library during 'malloc': Cannot allocate memory.  Aborting.

Lavos ★★★★★ ()
Ответ на: комментарий от Lavos

драйверов нет для десяточки

На самом деле есть. До дома вечером доберусь, скину ссыль.

false ★★★★★ ()
Последнее исправление: false (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.