Nov 15, 2020

pulseaudioサーバーを強化する(その2:12月11日、追記あり)

10月17日にアップしたエントリーに追記が積み重なって余りに読みにくいので、その2に移行する。

過去のpulseaudio関連のエントリーは以下のとおり。

Pulseaudioを使ってRaspberry piにAmazon Prime Musicを転送再生する(9月8日追記)
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200906a.htm
音楽ストリーミングサービスのウェブプレーヤーを使う
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200927a.htm
Pulseaudioの備忘録
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200930a.htm
ストリーミング音源をpulseaudioで転送しアップサンプリング再生する(10月15日、追記)
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201011a.htm
pulseaudioサーバーを強化する(10月24、25日、11月01、05、10日、追記あり)
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201017a.htm

運用状況は図のようなイメージ。
普段、日常的な用途に使っているProbook 450G3をpulseaudioクライアントとして運用。音楽ストリーミングサービスdeezerのデータをpulseaudioサーバーにしたElitebook 2570pに送って、アップサンプリングしてusb DACに送る。

Pulseaudio system

上手くいけば、CDと同等のストリーミングデータを、リスニングポイントで扱いやすいウェブプレーヤーを操作しながら、メインシステムのオーディオシステムで良質なアップサンプリングをして再生できる。

ストリーミングサービスを聴くために一般的に必要とされている特別な装置やアプリを走らせる環境を、新たに用意する必要がない。うちにあるもので賄える。うちのメインシステムでデータを処理することが出来れば、音質もそこそこのレベルが狙えるはずだ。
ストリーミング音源のクレジット情報の少なさは本気でどうにかして欲しいレベルだけど、普段から使い慣れているウェブブラウザで音源を探したり再生したりしながら、同時にそのブラウザでその音源やミュージシャンについてウェブで検索することが出来る。まあ、出来ると言っても、限界もあるけど。

しかしノイズを生じることが度々あり、調整を繰り返している。
アナログディスクみたいなものだと思って割り切って聴くというのも、ノイズが増えてきたらそうも言っていられない。
もう弄りたくないと言いながら弄ってきている。

つまり、これを本当の意味で使えるようにしたいという、強い動機が僕の中にあるということだ。

pulseaudioサーバーの現在の設定は下記。

default.paの設定は以前と変わっていない。

vi .pulse/default.pa


#load-module module-alsa-sink
load-module module-alsa-sink device=hw:0,0

.ifexists module-udev-detect.so
# load-module module-udev-detect
load-module module-udev-detect tsched=0
.else
### Use the static hardware detection module (for systems that lack udev support)
# load-module module-detect
load-module module-detect tsched=0
.endif

#load-module module-native-protocol-tcp
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24

daemon.confの設定は変えている。

vi .pulse/daemon.conf


; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
shm-size-bytes =64000000

; high-priority = yes
; nice-level = -11
high-priority = yes
nice-level = -15

; realtime-scheduling = yes
; realtime-priority = 5
realtime-scheduling = yes
realtime-priority = 88

; default-script-file = /usr/local/etc/pulse/default.pa
default-script-file = /home/tc/.pulse/default.pa

; resample-method = speex-float-1
resample-method = src-sinc-fastest

; flat-volumes = yes
flat-volumes = no

; rlimit-nice = 31
; rlimit-rtprio = 9
rlimit-nice = 35
rlimit-rtprio = 88


; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000

default-sample-format = s32le
# default-sample-rate = 384000
# alternate-sample-rate = 384000
default-sample-rate = 352800
alternate-sample-rate = 352800


; default-fragments = 4
; default-fragment-size-msec = 25

default-fragments = 2
default-fragment-size-msec = 25

; enable-deferred-volume = yes
enable-deferred-volume = no

以前は出来なかった「nice-level」の設定が、いつの間にか出来るようになっていた。理由は分からない。あれこれ弄ってるうちに何かが変わったのだろう。
しかし今回、これを設定したところ、俄然安定してノイズが無くなった。
今迄右往左往したの経緯から考えたらまだまだ安心出来ないけど、以前はノイズが多すぎて使えなかった384kHzアップサンプリング再生ですら、ノイズが無くなって?いるようなのだ。ノイズがないということはシステムが安定しているということで、音質も改善してPPAP方式に劣らないと思えるレベルになっている。300kHz台の音は出てるけど本当はもう少しいける筈だがなあ、という足りない感が、すっかり無くなった。
これなら安定運用を期待していいと思いたい。
気をよくして「rlimit-nice」「rlimit-rtprio」も設定している。

nice-level = -15
realtime-priority = 88

rlimit-nice = 35
### 20-(-15)=35
rlimit-rtprio = 88

こんな感じで設定。
nice-levelは、-20から19の間に設定。realtime-priorityは、0から99の間。
rlimit-niceは、20-(nice-level)で設定。
参考にしたのは下記アドレスのサイト。
GETRLIMIT
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/getrlimit.2.html
なんだか分からないが、20から引くということらしい。
rlimit-rtprioもよく分からないが、realtime-priorityに数値を合わせてみた。

これで上がれたらいいが、どうだろうか。

さて、「nice-level」の設定が出来るようになった理由が判明したので追記。
うちのサイトの過去エントリーから引用。

Pulseaudioの備忘録
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200930a.htm

「nice-lebel」は、なぜか、
E: [pulseaudio] conf-parser.c: [/home/tc/.pulse//daemon.conf:40] Unknown lvalue 'nice-lebel' in section 'n/a'.
と表示されてエラーになるので、コメントアウト。

エラーの原因は「nice-lebel」。スペルミスだ。つまり「設定出来なかった」なんて最初から無かったのだ。
いやー、、、記録って残しておくべきものだね。当時はまったく気付かなかったよ。

おかげさまで、この設定が如何に重要かが心底よく分かった。
しかし逆に言えば、必要不可欠な設定がここで出来たということなので、安定して動くシステムが完成したとみなしていいということかな。そうだといいんだけどな。

今更だけど、12月11日追記。daemon.confの現在の設定は下記。

shm-size-bytes =32000000

high-priority = yes
nice-level = -18

realtime-scheduling = yes
realtime-priority = 88

default-script-file = /home/tc/.pulse/default.pa

resample-method = src-sinc-fastest

flat-volumes = no

rlimit-nice = 38
rlimit-rtprio = 88

default-sample-format = float32le
default-sample-rate = 384000
alternate-sample-rate = 384000

default-fragments = 2
default-fragment-size-msec = 100

enable-deferred-volume = no

確かに効いたと思われたのは「nice-level」と「default-sample-format = float32le」だけかなあ、、、
現状でもノイズは残存していて。
しかも、使用開始時に殆どいつも出るという状況になってしまっている。いつ何をしてからか分からないので原因も不明。
しかしpulseaudioをリブートしたらノイズは消えて、あとはずっと安定しているので以前のノイズと比べたらむしろ扱いやすいという、これもどういうことなのかさっぱり分からない。

新たなブレークスルーが欲しいとこだけど、まあ、なさそう。
だいぶ扱いにも慣れたし当面これで使う。
安定してるまま使ってて気付いたらメモリ使用量がいっぱいになってクライアントPCが動かなくなるので注意が要るけど。

Edit this entry...

wikieditish message: Ready to edit this entry.
















A quick preview will be rendered here when you click "Preview" button.