web-dev-qa-db-ja.com

再開後にPulse Audioが機能しない

Hy、After Suspend-Resume Soundアプリケーションは引き続き再生されますが、音はありません。

(シェルで)発行する必要があります

/usr/bin/pasuspender /bin/true

音が再びあります。

もちろん、このコマンドも機能しますが、再生を中断します(サウンドアプリケーションでの再生を再起動する必要があります)。

pulseaudio -k 

2つのコマンドについて説明します。

https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting (「サスペンドから再開した後に音が出ない」を参照)

だから問題は:

コマンド「psasuspender ...」を

/etc/systemd/system/[email protected]

中断後、機能しません。だから私はで再開スクリプトを設定します

/etc/pm/sleep.d/

このような:

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

/var/log/pm-suspend.logでもこれは機能しません。

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.

私の結論:Systemdでは、スクリプトは実行されません。理由はわかりません。 /etc/pm/sleep.dでスクリプトが実行されますが、早すぎるため、Pulseオーディオが再び起動する前に実行されているようです。私が発行するなら

/usr/bin/pasuspender /bin/true

シェルで再開した後は常に動作します。

質問は次のとおりです。

/ usr/bin/pasuspender/bin/trueをどこに置くと、再開プロセスの非常に遅く実行されますか?なぜこのコマンドを発行しなければならないのか、@ Suspendの再生が中断する原因がわからないのは興味深いことです。

Ubuntu:15.10サウンドカード:Xonar U7 USB

1
Peter Fleix

スクリプトの問題を解決する方法に関するあなたの質問には答えていません。しかし、私はこれがなぜ起こっているのかについて説明します。オーディオはオーディオデバイスに送信されるストリームであり、一方向の通信です。ターゲットが特定され、ストリームが進行すると、デバイスからのさらなる応答を待機します。そのため、双方向データフローとは異なり、ストリームが切断されたことを検出することは簡単ではありません。したがって、ストリームが中断によって中断された後、フローは停止し、ターゲットを失います。ただし、ストリームの開始時にのみターゲットロケーションプロセスが発生するため、これが発生したことは認識されません。メモリポインタが初期化されるとき。

回避策は、これらのメモリ位置を調査して再初期化することです。

Pulse Audioは、ハードウェアに応じて複数のバッファを使用しているようです。もちろん、ハードウェアはストリームの最終的なターゲットです。これらのバッファのいずれかが、メモリ位置へのポインタを失うと、再生が停止します。ここに興味深い小さな記事があります:

http://voices.canonical.com/david.henningsson/2014/11/21/pulseaudio-buffers-and-protocol/

このプロセス中にdmaが発生している可能性が最も高いため、重いCPU依存関係からストリームを解放できます。もちろん、ハードウェアに依存します。

https://en.wikipedia.org/wiki/Direct_memory_access

これが何らかの形で役立つことを願っています。

1
iain