Alsa и PulseAudio (csound): Соединение отклонено

Вопрос или проблема

Я столкнулся с проблемой, которая меня полностью запутала. Сначала немного информации о системе

Linux quasar-nixos-tr 4.19.87 #1-NixOS SMP Sun Dec 1 08:17:47 UTC 2019 x86_64 GNU/Linux

Теперь; я работаю с библиотекой для генерации звука/музыки под названием csound, и я вижу странную проблему.

Я использую слой над csound через Haskell; библиотека называется csound-expression, и она просто генерирует файл csound на основе некоторого кода Haskell, а затем запускает его через csound.

Насколько я понимаю; csound затем направляет аудио на Alsa, который в моей системе пытается направить его через устройство default PulseAudio.

Теперь на моей системе происходит что-то странное.

  1. После чистой загрузки, если я запускаю код, связанный с csound, я слышу звук. Но, как только я останавливаю выполнение этого кода, никакое другое приложение, похоже, не может больше подключиться к PA. Проверка с помощью systemctl --user status pulseaudio.service pulseaudio.socket показывает, что служба не работает, и она исчерпала максимальное количество попыток запуска.
  2. После чистой загрузки; если я запускаю какое-то другое приложение, скажем, pavucontrol; я теперь могу подключиться к службе PA, но мой Haskell код csound больше не может подключиться. Он вместо этого завершает работу с:

    λ> dac . osc $ 200 
    0dBFS level = 32768.0
    --Csound version 6.13 (double samples) Jan  1 1970
    [commit: none]
    libsndfile-1.0.28
    UnifiedCSD:  tmp.csd
    STARTING FILE
    Creating options
    Creating orchestra
    closing tag
    Creating score
    rtaudio: ALSA module enabled
    rtmidi: ALSA Raw MIDI module enabled
    Elapsed time at end of orchestra compile: real: 0.001s, CPU: 0.001s
    sorting score ...
        ... done
    Elapsed time at end of score sort: real: 0.001s, CPU: 0.001s
    displays suppressed
    0dBFS level = 1.0
    orch now loaded
    audio buffered in 256 sample-frame blocks
    ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused
    
     *** Cannot open device 'default' for audio input: Connection refused
    Failed to initialise real time audio input
    inactive allocs returned to freespace
    end of score.          overall amps:  0.00000
           overall samples out of range:        0
    1 errors in performance
    Elapsed time at end of performance: real: 0.169s, CPU: 0.004s
    

В случае 1 (выше); я вижу что-то интересное в журналах, но я ограничен своим пониманием того, как работает PA, как работает Alsa и как оба эти компонента работают вместе:

Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: Starting Sound Service...
Dec 16 09:28:16 quasar-nixos-tr pulseaudio[2382]: E: [pulseaudio] socket-server.c: bind(): Address already in use
Dec 16 09:28:16 quasar-nixos-tr pulseaudio[2382]: E: [pulseaudio] module.c: Failed to load module "module-esound-protocol-unix" (argument: ""): initialization failed.
Dec 16 09:28:16 quasar-nixos-tr pulseaudio[2382]: E: [pulseaudio] main.c: D-Bus name org.PulseAudio1 already taken.
Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: pulseaudio.service: Main process exited, code=exited, status=1/FAILURE
Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: pulseaudio.service: Failed with result 'exit-code'.
Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: Failed to start Sound Service.
Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: pulseaudio.service: Service RestartSec=500ms expired, scheduling restart.
Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: pulseaudio.service: Scheduled restart job, restart counter is at 4.
Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: Stopped Sound Service.
Dec 16 09:28:16 quasar-nixos-tr systemd[1708]: Starting Sound Service...
Dec 16 09:28:17 quasar-nixos-tr pulseaudio[2390]: E: [pulseaudio] socket-server.c: bind(): Address already in use
Dec 16 09:28:17 quasar-nixos-tr pulseaudio[2390]: E: [pulseaudio] module.c: Failed to load module "module-esound-protocol-unix" (argument: ""): initialization failed.
Dec 16 09:28:17 quasar-nixos-tr pulseaudio[2390]: E: [pulseaudio] main.c: D-Bus name org.PulseAudio1 already taken.
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: pulseaudio.service: Main process exited, code=exited, status=1/FAILURE
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: pulseaudio.service: Failed with result 'exit-code'.
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: Failed to start Sound Service.
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: pulseaudio.service: Service RestartSec=500ms expired, scheduling restart.
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: pulseaudio.service: Scheduled restart job, restart counter is at 5.
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: Stopped Sound Service.
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: pulseaudio.service: Start request repeated too quickly.
Dec 16 09:28:17 quasar-nixos-tr systemd[1708]: pulseaudio.service: Failed with result 'exit-code'.

Пользователь здесь находится в группах audio и sound, и я использую NixOS; что, вероятно, не имеет отношения к этой проблеме.

Может кто-то помочь понять, что здесь может происходить?


Также обратите внимание, что; в случае 2; alsamixer правильно перечисляет все устройства.

Я наконец-то нашел проблему; я описал ее здесь, на случай, если кто-то другой столкнется с этим в будущем.

Ответ или решение

На основании описанного вами вопроса по поводу проблемы с Csound, ALSA и PulseAudio, имеет смысл рассмотреть несколько аспектов, которые могут быть причиной возникновения ошибки "Connection Refused".

1. Общая информация о системе

На системе установлена NixOS с ядром Linux версии 4.19.87. Вы используете библиотеку csound-expression, которая генерирует файлы Csound и запускает их. Csound пытается передать аудиовыход через ALSA, который в свою очередь использует PulseAudio как устройство по умолчанию.

2. Первичные наблюдения

Во-первых, вы заметили, что:

  • После перезагрузки системы, Csound работает, но после его завершения PulseAudio перестает функционировать, так как сервис не может стартовать повторно.
  • Если сначала вы запускаете другие приложения, такие как pavucontrol, PulseAudio работает, но Csound не может установить соединение.

3. Логи PulseAudio

Из логов PulseAudio видно, что сервис не может запуститься из-за ошибки bind(): Address already in use. Эта ошибка свидетельствует о том, что уже существует другой процесс, который использует тот же самый сокет, и это мешает PulseAudio запуститься.

4. Возможные причины и решения

4.1 Конфликт служб

  • Проверьте запущенные процессы PulseAudio: Возможно, у вас запущено несколько экземпляров PulseAudio. Используйте команду ps aux | grep pulse для проверки. Если несколько экземпляров запущены, завершите лишние.

4.2 Неправильная конфигурация

  • Настройки конфигурации: Убедитесь, что файл конфигурации PulseAudio не содержит ошибок. Просмотрите файлы конфигурации, такие как ~/.config/pulse/client.conf и /etc/pulse/client.conf, чтобы убедиться, что в них нет неправильных настроек.

4.3 Отказ в доступе

  • Права доступа: Убедитесь, что ваш пользователь находится в группах audio и sound, что вы уже сделали. Проверьте права доступа к аудиоустройствам с помощью команды ls -l /dev/snd/.

4.4 Состояние ALSA

  • Проверка состояния ALSA: Используйте alsamixer для проверки состояния аудиоустройств. Убедитесь, что устройства не отключены и что уровень громкости достаточно высок.

5. Рекомендации по рефакторингу

Попробуйте перезапустить PulseAudio вручную с помощью команды:

pulseaudio --kill
pulseaudio --start

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

Заключение

Причин возникновения проблемы "Connection Refused" может быть несколько, включая конфликты служб, неправильные конфигурации и ограничения по правам доступа. Убедитесь, что PulseAudio управляется корректно и что у Csound есть доступ к необходимым устройствам. В случае, если проблема сохраняется, рассмотрите возможность обращения к документации по NixOS и поддержке PulseAudio для более детального изучения и устранения данной проблемы.

Если у вас есть дополнительные вопросы или необходима помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...