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 (всего исправлений: 2)

Ответ на: комментарий от unfo

Никогда не был специалистом в настройке ALSA, да так и не стал. У меня без каких-либо настроек default устройства обрабатываются через dmix и dsnoop, так что можно открывать сколько угодно клиентов, ALSA как-нибудь разберётся. Поэтому никаких попыток микширования внутри apulse не предпринимается.

Кстати, не обязательно менять настройки ALSA для default. Используемые apulse устройства можно задавать через переменные среды:

$ APULSE_CAPTURE_DEVICE=plughw:0,0 APULSE_PLAYBACK_DEVICE=plughw:0,0 apulse skype

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

У тебя похоже, что все нормально с аппаратным микшером. С моей встроенной в ноутбук звуковушкой все похуже.

После ряда изменений в итоге получился вот такой .asoundrc:

pcm.dmixed {
        type asym
        playback.pcm {
                type dmix
                ipc_key 1024
                slave {
                        pcm "hw:0,0"
                        period_time 0
                        period_size 1024
                        buffer_size 4096
                        rate 44100
                }
                bindings {
                        0 0
                        1 1
                }
        }
        capture.pcm "hw:0,0"
}
 
pcm.!default {
        type plug
        slave.pcm "dmixed"
}

Перезупустил alsasound, и вроде теперь vlc и skype нормально дружат.

А про переменные среды — в генте скайп живет в /opt/bin/skype, а при использовании USE-флага apulse его содержимое меняется на

#!/bin/sh
exec i686-pc-linux-gnu-apulse skype-bin "$@"

Менять его во избежание проблем с обновлениями не хочется.

P.S. большое спасибо за годную утилиту, упрощающую борьбу с ненужными сущностями :)

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

Никакого экслюзивного доступа ему не надо. Это у вас, вероятно, ALSA настроена на блокирующий режим доступа. У меня скайп нормально выводит звук, если даже устройство уже кеми-то используется. Гляньте здесь и сравните с вашими /{etc,usr/share}/asound.conf и/или ~/.asoundrc. Внимание на nonblock. P.S. По поводу skype vs skype-bin: а симлинк создать?

yars068 ★★★★
()
Последнее исправление: yars068 (всего исправлений: 1)
13 мая 2015 г.
Ответ на: комментарий от backburner

Я так понял, что для проброса из контейнера в хост-систему, PulseAudio должен стоять и на хост-системе.

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

а можно с помощью apulse пробрасывать звук из контейнера Docker?

Не вижу способа. PulseAudio состоит из двух частей: сервера и библиотеки, код которой выполняется в процессе клиента. Наличие двух отдельных процессов и позволяет делать передачу звука из системы в систему. У apulse же есть только клиентская часть, которая сразу преобразует вызовы PA API в ALSA API.

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

А можно тогда запустить skype в контейнере с apulse и как-нибудь пробросить звук с помощью ALSA? Я просто никогда с этим не сталкивался.

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

Вроде кто-то как-то направлял ALSA по сети, но я такое никогда не пробовал делать.

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

А bluez можно заставить воспроизводить звук через apulse?

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

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

Жаль, буду тогда старую версию с поддержкой alsa вкорячивать.

aplay ★★★★★
()

Почему-то не хочет работать на свежеустановленной Debian 7 (Wheezy). Собирается нормально, без ошибок. Скайп запускается, но звука нет, Test Call почему-то фейлится - просто пишет в окошке, что test call failed.

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

но звука нет

Работает ли mplayer -ao pulse file.mp3? Я сейчас попробовал отключить PulseAudio и в скайпе позвонить на echo123. Ожидаемо звука нет, но звонок не фейлится.

Ещё стоит переконфигурировать с cmake -DCMAKE_BUILD_TYPE=Debug .. и запустить из терминала со сбором вывода в файл. Может, скайп начал запрашивать какие-то нереализованные в apulse функции. Они будут помечены буквой Z .

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

http://pastebin.com/kHxbiCu7

Запускаю скайп, захожу в настройки, пытаюсь воспроизвести любой файл в разделе Notifications и тишина... Да и при запуске нет привычного звука старта.

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

У меня нет pulseaudio в системе, вообще :) Нет, конечно.

Я имел в виду:

apulse mplayer -ao pulse file.mp3

apulse реализует часть PulseAudio API, и для MPlayer его хватало. Проверив на MPlayer'е, можно понять, совсем всё не работает, или дело во взаимодействии со Skype.

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

а какие-то *-dev пакеты нужны или нет? Ну, кроме libpulse-dev.

Нужны libasound2-dev, libglib2.0-dev и pkg-config. И обычный набор из cmake и build-essential. А вот libpulse-dev не нужен, нужные заголовки уже есть в составе проекта.

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

Нормально, играет, из Z только одна запись:

1434461749.649 [apulse 14946] Z pa_channel_map_init_auto m=0xbfedf9ac, channels=2, def=1
Gonzo ★★★★★
()
Ответ на: комментарий от Deleted

Ок, не знал. Тогда радует. Может потому у меня не пашет, хаха...

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

Кстати, с месяц назад были правки некоторых косяков в коде. Если ты используешь самую свежую версию, стоит попробовать версии постарше. Правки могли что-то значимое поломать.

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

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

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

когда новый релиз?

А когда надо? У меня нет особых планов по работе над apulse, всегда находятся более важные занятия. Разве что вот баги правлю по мере того, как знания приобретаю.

i-rinat ★★★★★
() автор топика

Все равно не выходит... Я уже прошерстил самые древние релизы: и 0.1.1 и 0.1.0. Не могу понять ничего, все ж работало когда-то. Правда, это было 9 месяцев назад, судя по форуму тут. Я же все правильно делаю?

git checkout v0.1.0
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release ..

Как пример...

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

stderr всё равно выводится в консоль, даже если перенаправляешь вывод в файл (apulse skype > log). Поток ошибок тоже можно перенаправлять (apulse skype >log 2>log2).

i-rinat ★★★★★
() автор топика

Не могу понять. Попробовал все релизы тегнутые, даже initial пробовал самый первый. Работало же раньше! Месяцев девять назад...

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

Может быть, какие-то внешние условия заставляют его использовать другой набор функций. Или требуют результатов там, где раньше не требовали.

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

Заработало! Проблема была в отсутствии пакета libasound2-plugins, который ставится автоматом с официальным .deb, в то время как у меня стоял скайп из их архива .tar.bz2, которые они именуют «Dynamic».

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

Несмотря на то, что делал преобразователь одного API в другое, я до сих пор не понимаю, что там и как в ALSA (и PulseAudio). И даже желания вникать нет. Такое месиво.

Вот последнее, на что подумал бы — плагины к ALSA.

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

И даже желания вникать нет. Такое месиво.

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

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

Кстати, работает самая последняя версия из гита. Так что все норм.

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

Вообще было бы интересно знать, как установка плагинов к ALSA всё починила; что именно было не так. Я у себя попробовал попереименовывать установленные плагины, звук работает и без них. Возможно, дело в конфигурационных файлах?

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

А фиг его знает...

apt-cache show libasound2-plugins
Package: libasound2-plugins
Source: alsa-plugins
Version: 1.0.25-2
Depends: libasound2 (>= 1.0.25), libavcodec53 (>= 6:0.8.2-2) | libavcodec-extra-53 (>= 6:0.8.2-2), libavutil51 (>= 6:0.8.2-2), libc6 (>= 2.7), libjack-jackd2-0 (>= 1.9.5~dfsg-14) | libjack-0.116, libpulse0 (>= 0.99.1), libsamplerate0 (>= 0.1.7), libspeexdsp1 (>= 1.2~beta3.2-1)
Pre-Depends: multiarch-support
Description-en: ALSA library additional plugins
 This package contains plugins for the ALSA library that are
 not included in the main libasound2 package.
 .
 The following plugins are included, among other:
   - a52: S16 to A52 stream converter
   - jack: play or capture via JACK
   - oss: run native ALSA apps on OSS drivers
   - pulse: play or capture via Pulse Audio
   - lavcrate, samplerate and speexrate: rate converters
   - upmix and vdownmix: convert from/to 2 and 4/6 channel streams

А вообще, у меня нет каких-либо конфигов: ни asoundrc, ничего вообще. Все дефолтное.

В пакете libasound2-plugins есть такое в /usr/lib/i386-linux-gnu/alsa-lib:

libasound_module_conf_pulse.so
libasound_module_ctl_arcam_av.so
libasound_module_ctl_oss.so
libasound_module_ctl_pulse.so
libasound_module_pcm_a52.so
libasound_module_pcm_jack.so
libasound_module_pcm_oss.so
libasound_module_pcm_pulse.so
libasound_module_pcm_speex.so
libasound_module_pcm_upmix.so
libasound_module_pcm_usb_stream.so
libasound_module_pcm_vdownmix.so
libasound_module_rate_lavcrate_faster.so
libasound_module_rate_lavcrate_fast.so
libasound_module_rate_lavcrate_higher.so
libasound_module_rate_lavcrate_high.so
libasound_module_rate_lavcrate.so
libasound_module_rate_samplerate_best.so
libasound_module_rate_samplerate_linear.so
libasound_module_rate_samplerate_medium.so
libasound_module_rate_samplerate_order.so
libasound_module_rate_samplerate.so
libasound_module_rate_speexrate_best.so
libasound_module_rate_speexrate_medium.so
libasound_module_rate_speexrate.so

А также в /usr/share/alsa/alsa.conf.d лежит файлик 50-pulseaudio.conf:

# Add a specific named PulseAudio pcm and ctl (typically useful for testing)

pcm.pulse {
    type pulse
    hint {
        show on
        description "PulseAudio Sound Server"
    }
}

ctl.pulse {
    type pulse
}
Gonzo ★★★★★
()
Ответ на: комментарий от i-rinat

Вообще было бы интересно знать, как установка плагинов к ALSA всё починила; что именно было не так. Я у себя попробовал попереименовывать установленные плагины, звук работает и без них. Возможно, дело в конфигурационных файлах?

skype работает поначалу нормально. Но потом отваливается микрофон и меня перестает быть слышно.

Конфиг .asoundrc

ctl.equal {
  type equal;
}

pcm.plugequal {
  type equal;
  # Modify the line below if you don't
  # want to use sound card 0.
  slave.pcm "plughw:0,0";
  # or if you want to use with multiple applications output to dmix
  # slave.pcm "plug:dmix"
}

pcm.equal {
  # Or if you want the equalizer to be your
  # default soundcard uncomment the following
  # line and comment the above line.
# pcm.!default {
  type plug;
  slave.pcm plugequal;
}

# отсюда идет конфиг apulse

pcm.skype {
    type plug
    slave.pcm "asymed"
}


pcm.asymed {
    type asym
    playback.pcm {
        @func getenv
        vars [ ALSAPCM ]
        default "dmix"
    }
    capture.pcm "dsnoop"
}

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

есть ли возможность это выкинуть?

В принципе, реально, надо просто заново реализовать использованные функции, их немного. Хеш-таблицы, упрощаторы printf и слайс-аллокатор. Только зачем, если в GLib это уже есть?

i-rinat ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.