O pulso de áudio não funciona depois de retomar

1

Hy, After Suspend - Resume Sound Applications ainda é reproduzido, mas não há som.

Eu preciso emitir (em um shell)

/usr/bin/pasuspender /bin/true

então o som está lá novamente.

Este comando também funciona, mas quebra a reprodução (a reprodução em Sound Applications tem que ser reiniciada), por isso não quero isto:

pulseaudio -k 

Os dois comandos são descritos aqui:

link (Consulte "Não há som após o reinício da suspensão")

Então o problema é:

Se eu colocar o comando "psasuspender ..." em

/etc/systemd/system/[email protected]

depois da suspensão, não funciona. Então eu configurei um script de currículo em

/etc/pm/sleep.d/

assim:

case "" in
    hibernate|suspend)
            # Stopping is not required
            ;;
    thaw|resume)
            /usr/bin/pasuspender /bin/true
            ;;
    *) exit $NA
            ;;
esac

Isso não funciona nem em /var/log/pm-suspend.log Eu então recebo:

Running hook /etc/pm/sleep.d/50alsa resume suspend:
Connection failure: Connection refused
pa_context_connect() failed: Invalid argument
/etc/pm/sleep.d/50alsa resume suspend: Returned exit code 1.

Minha conclusão: No Systemd o script não é executado, não sei porque. Em /etc/pm/sleep.d, o script é executado, mas é muito cedo, parece que ele é executado antes que o áudio de pulso seja ativado novamente. Porque se eu emitir

/usr/bin/pasuspender /bin/true

depois de Resume in a Shell, ele sempre funciona.

Então a questão é:

Onde colocar / usr / bin / pasuspender / bin / true, então é executado muito tarde no processo de continuação? Seria interessante também saber por que eu tenho que emitir este comando, não consegui descobrir o que quebra a reprodução @Suspend.

Ubuntu: 15.10 Placa de som: Xonar U7 USB

    
por Peter Fleix 23.01.2016 / 09:39

1 resposta

1

Não estou respondendo sua pergunta sobre como resolver o problema do script; No entanto, vou arriscar uma explicação sobre o porquê isso está acontecendo. O áudio é um fluxo que é enviado para o dispositivo de áudio, é uma comunicação unidirecional; Não espere mais resposta do dispositivo, uma vez que o alvo esteja localizado e o fluxo esteja em andamento. Como tal, não é fácil detectar quando o fluxo é interrompido, ao contrário de qualquer fluxo de dados bidirecional, quando seria óbvio que não há mais nenhuma comunicação; assim, depois que o fluxo é interrompido, por uma suspensão, o fluxo é interrompido e ele perde seu alvo. No entanto, não percebe que isso aconteceu devido ao processo de localização de destino acontecer apenas quando o fluxo está sendo iniciado; quando o ponteiro de memória é inicializado.

O trabalho mais provável é pesquisar e reinicializar esses locais de memória.

O Pulse Audio, ao que parece, usa vários buffers dependendo do hardware, o hardware é, naturalmente, o alvo final do fluxo. Qualquer um desses buffers, se eles perderem o ponteiro para o local da memória, interromperá a reprodução. Aqui está um pequeno artigo interessante:

link

É mais provável que dma esteja acontecendo durante este processo, de modo a liberar o fluxo de qualquer dependência pesada de cpu; claro, dependendo do seu hardware.

link

Espero que isso ajude de alguma forma.

    
por iain 23.01.2016 / 10:23