Page 1 / 31 :  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Next › »

Current filter: »pulseaudio« (Click tag to exclude it or click a conjunction to switch them.)

Jul 06, 2021

pulseaudioでMQAデータを転送再生する

以前のエントリーで、pulseaudio経由の音声信号伝達について書いていた。
現在は、ras pi2とM500(USB-DAC)をつないでシステム化している。piCore7にalsaとpulseaudioだけ組み込んだ簡素なサーバーだ。
Youtubeなどの再生に使うんだけど、実はもうひとつ他に目的があって、MQA再生環境が必要な時にM500を使おうと考えていた。

今回、普段使いのノートPCでmpdを動かして、MQAデータをpulseaudio出力しpulseaudioサーバーに転送、M500で再生したところ、MQAを認識し再生した。
MQAはpulseaudio経由で転送することも可能なことが分かった。

大したことはしていない。
ノートPC(OSはFedora)の.mpdconfに下記のようにpulseaudio出力を設定、サーバーのipアドレスを設定し、mpdでMQAファイルを再生しただけだ。

audio_output {
        type            "pulse"
        name            "My Pulse Output"
##      server          "remote_server"         # optional
      server          "192.168.1.77"
##      sink            "remote_server_sink"    # optional
}

MQAの音は、綺麗だと思う。
うちではメインの音源は主にCD相当のデータをlibsamplerateでアップサンプリングして鳴らしていて、これはこれで高音質なんだけど、なんというか、MQAの音には無理がない軽やかさがある。スムーズで余裕があり歌心がある鳴り方をする。

MQA対応のハードというのは「オーダーメイドの服」みたいな理解を僕はしていて、つまり、MQA音源とハードウェアがあつらえた服のように合っている、というイメージだ。
従来のPCM再生はハードウェアがPCM音源に合わせないといけないが、限界があるというイメージ。
MQAはハードウェアの合わせ方が予め決まっていて、ハード側がそれに沿って合わせるように作られているので、PCMの限界を越えるというイメージ。
うちでやっているPCM768kHzへのアップサンプリングは音源をハードに合わせる努力であって、だから良質な仕立て(libsamplerate)が必要なんだけど、確かに音質改善があって楽音の情報量としても多いけど、何処かしら頑張ってる音という感触がある。これはハードのスペック向上によって改善するのかもしれないけど。
MQAの音は、そういう野暮ったさがない。スマートな音がする。

今回はpulseaudioで転送したけど、一般的なUPnPでも転送は可能だと思う。そもそも、UPnPで転送してMQAだと読めなくなるようなら、使いものになってない筈だ。
うちではUPnPで転送するなら、転送先にmpd、upmpdcliをインストールしないといけない。他にUPnPレンダラーの作り方を知らないからだ。
そうそうMQAは使わないし、当面は現在のシステムでいいと思っているけど。

Posted at 10:46 in audio_diary | WriteBacks (0) | Edit Tagged as: , ,

Feb 16, 2021

PulseaudioによるLan経由音声データ転送のデータ量が大きすぎる(未解決案件)

Pulseaudioによる音声データ転送は快適で、サブスクストリーミング音源を聴くのにすごく重宝している。
だけど、どうにも気になっているのが、pulseaudioサーバーへのデータ転送量が余りにも大きいことだ。

過去にアップしたエントリーから引用してみる。

Pulseaudioを使ってRaspberry piにAmazon Prime Musicを転送再生する(9月8日追記)
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200906a.htm

6730bのネットワーク出力をモニターしてみたら、400KiB/s前後でデータ転送されている。
youtubeの音源だとどうなるか確かめたら、s32le 48000。サイトや音源によって変化するようだ。
DACをRAL-2496ut1に換えると、s16leにフォーマットが変わる。こういう調整はRaspberry Pi2がやってくれているみたい。

最初にRaspberry Piで試みた時には「400KiB/s前後」の転送量だったようだ。
それが現在は「3 MiB/s」で転送されているのが、通常の運用だ。
3 MiB/s、って、動画じゃないのかという容量だ。
いつのまにそんなことになったのか、、、

最初は、メモリ使用量も気になる程ではなかった筈。
それが注意していないとクライアントPCのメモリがウェブブラウザのキャッシュで溢れて、PCのシステム自体が不安定になるようになった。そういった理由で、昨年秋にクライアントPCを変更したのだ(前の機種は既に古すぎたという理由もあったのだけど)。
今はそういうことはなくなったけど、、、

Deezerを使った場合の音声データ量は音楽データはCDと同等。
1秒あたりのデータ量を計算してみる。

44100×16×2 = 1411200 bit =「176.4 KiB」
s32leだったらx2で、350 KiB前後のデータ量になる。

3MiB/sは、その10倍近い。なんでこんな大量のデータ量を転送しているのか全く分からない。
たぶん音楽データだけではなくてブラウザ表示の画像表示データなんかも一緒くたにして送っているんだと思う。pulseaudioサーバーでは、そのデータの中から音声データだけを抽出して処理しているのではないだろうか。
ほんとうは、音声データだけ送るほうがサーバーの負担も小さくなるのではないか、と思うのだけど、、、

さて。
ものは試しだと思って、クライアントPCのHDDに保存してあったflacファイルをウェブブラウザで開いて、再生、転送してみた。
その結果をキャプチャ。
なんと、、
データ転送量は「1.7 Mb/s」、200 KiB/s前後で、CD相当の音楽データ+α、で納得できるデータ量になった。

webplayer1

そこで、、、同じそのウェブブラウザで、Deezerウェブプレーヤーを開いて再生、転送してみた。
なんとまあ、、、データ転送量は「1.7 Mb/s」のままだ。設定を引き継いでいる、ということなのか、、、

webplayer2

ウェブブラウザを閉じて、再起動して、Deezerウェブプレーヤーを開いて再生、転送。
データ転送量は「26 Mb/s」つまり、3 MiB/s強になった。
ウェブブラウザを閉じたら、設定を引き継いでいない。

webplayer3

先刻とは逆の操作も試してみた。
つまり、Deezerウェブプレーヤーを開いて再生、転送した後、HDDのflacファイルをウェブブラウザで開いて、再生、転送。
データ転送量は「26 Mb/s」、3 MiB/sで変わらず、設定を引き継いだ。
ブラウザ画面にはflacを意味する横棒が表示されている。いったい、どんなデータがサーバーに転送されているんだろう、、、

Deezerウェブプレーヤーを開く前にflacファイルを開く操作をしておけば、その後で開くDeezerウェブプレーヤーからもほぼ音楽データだけを転送できるかもしれない。ウェブブラウザを閉じない限り出力の設定を引き継ぐということは、何処かに設定保存している一時ファイルがあるということだ。そのファイルを見つけられたら、何か手掛かりが得られるかも、、、

しかし、ことは簡単ではなかった。
繰り返し試してみた結果、この挙動には再現性がないことが分かった(おい、ここまで書いてきてそれかよ)。
いつも転送量を減らせるとは限らない。
転送量を減らせるのは、ターミナル端末画面に「××が拒否されました」という感じのエラーが表示されるときのようなのだ。
拒否されてるときに、上手く行ったら音楽データのみの伝送が出来る、という感じ。拒否られて音が出ないときもある。こんなんじゃ使えない。

せっかくなので、表示されるエラーを追記しておく。

[128966:128966:0217/195040.344216:ERROR:alsa_util.cc(204)] PcmOpen: plug:default,接続を拒否されました

こんな感じ。
エラー表示されたまま音が出るのは不思議だ。
書き忘れていたが、使っているウェブブラウザは「chromium-freeworld」。普段使用のfirefoxと音楽再生用のブラウザは分けた方がいいのかな、ということで。音質の問題ではなく、その方が使い勝手がいいのではないかということだ。

転送量が3 MiB/sだろうが200 KiB/sだろうが、音質は変わらないみたいだ。
十分使える。
だったら、もういいんじゃないかなあ、って感じ。

Pulseaudioは、Pipewireというサウンドサーバーシステムに移行が検討されているようで、うちで使っているFedoraにはいつの間にかインストールされていた(たぶん、アップデートの告知に僕が気付かなかったんだと思うけど)。
うちの現状のシステムはいつまで使うことになるのか分からないけど、将来的にはPipewireに移行することになるのかな。
Pipewireはもう少し扱いやすかったらいいと思う。

Posted at 21:16 in audio_diary | WriteBacks (0) | Edit Tagged as: ,

Dec 19, 2020

ソフトを起動する順番を変えてみる ~ pulseaudioによる音声データ転送 使い方まとめ(2021.01.31. 06.26. 追記)

2021年1月31日、タイトルに「まとめ」と書いている割にまとまってないので、下の方、構成を変えて多少追記した。

6月26日、追記。
やっぱりまとまってないので、思い付いたら適宜追記加筆訂正再編していくことにした。
だからこのエントリーに関しては、本編文章では追記の断り書きを記載しないことにする。
読みやすくなっていくかどうかは神のみぞ知るだ。

以前のエントリーでブレイクスルーは無いだろうと書いたことがあったが、以外なところからノイズの解決策が見つかった。
ソフトを起動する順番を変えることで、ノイズが消えてしまった。

思えば、Pulseaudioによる音声データ転送を今のシステムで始めた頃は、いつノイズが出るのか分からないような状態で、対策も闇雲な感があった。
しかし、daemon.confの「nice-level」を設定して以降から状況が変わってきた。使用開始時の再生音はノイズが増えたが(考えてみたら、これも原因不明なんだよね、、)、Pulseaudio serverを再起動したら、その後はノイズがすっかり消えてずっと安定するようになったのだ。

ただ、最初の起動時点からノイズ無しに再生できるようにする方法が見えなかった。
再起動しなければずっとノイズが続く。
サーバーで「top」を打って確認したら、再起動前後ではCPUの使用%も違う。ノイズが出ているときの方が負荷が大きい。

設定を弄るばかりで行き詰まってしまったので、操作方法とノイズの有無について再確認してみようと思い付いた。

まずサーバー起動し、Firefox、Deezerを起動し音を出したら、ノイズまみれの音になる。
ここでサーバーを再起動したら、ノイズが無くなる。 サーバー再起動の変わりにFirefoxの再起動やDeezerの再起動では、ノイズは無くならない。改めてサーバーを再起動したら、そこでノイズは無くなる。サーバーを再起動しないことにはノイズは無くならないようだ。

手順についてあれこれ考え試みているうちに、最初のサーバー起動と再起動とで何が違うのかというと、FirefoxとDeezerが動いているかどうかだ、ということに気付いた。
ここで最初の音出しに際しての手順については、今まで全く検討していないことに思い至った。
つまり、サーバーを起動した後にクライアントを動かすものだという、固定観念があったのだ。

試しに、先にFirefox、Deezerを起動して後に、サーバーを起動してみたら、ノイズがない音が再生された。
ちょっと呆れてものも言えない。

何時またノイズが出始めるか分からないので、これで最終型と言い難いのだけど、本当にこれで完成して欲しい。そんなこといいながら、実はノイズの原因とか、ほとんど原因不明なままだ。そんなことでいいのかな、という気持ちもないではないのだけど。でも解明するには分からないことが多すぎかな。

はああ、しかし取り敢えず、何とかなったぜ、、、

しかし、ここまでの記載内容は、2020年度までのシステム運用上で大事だったことで、21年春からDaphile経由でDeezerを再生できるようになってからは、pulseaudio経由で音源をアップサンプリングすることはなくなった。pulseaudioサーバーは別建てになり、Raspberry Pi2ベースでシンプルな運用になり要求する内容も軽くなって、サーバーとクライアントどっちが先かなんて、気にしなくてもよくなった。
本来あるべき、無理のない運用だと感じられる。まあ、いろいろ勉強になったかな、、、

取ってつけたようだが、取り敢えずまとめ

Pulseaudio関連のエントリーは、以下のとおり。

  1. Pulseaudioを使ってRaspberry piにAmazon Prime Musicを転送再生する(9月8日追記)
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200906a.htm

  2. 音楽ストリーミングサービスのウェブプレーヤーを使う
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200927a.htm

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

  4. ストリーミング音源をpulseaudioで転送しアップサンプリング再生する(10月15日、追記)
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201011a.htm

  5. pulseaudioサーバーを強化する(10月24、25日、11月01、05、10日、追記あり)
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201017a.htm

  6. pulseaudioサーバーを強化する(その2:12月11日、追記あり)
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201115a.htm

  7. pulseaudio クライアントのFirefoxを強化する
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201212a.htm

  8. ソフトを起動する順番を変えてみる ~ pulseaudioによる音声データ転送 使い方まとめ(2021.01.31. 06.26. 追記)
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201219a.htm

    (当エントリー)

  9. PulseaudioによるLan経由音声データ転送のデータ量が大きすぎる(未解決案件)
    http://blown-lei.net/endive/blosxom.cgi/audio_diary/20210216a.htm

Pulseaudio system

2020年末時点での運用は、図のようなイメージ。
普段、日常的な用途に使っているProbook 450G3を、pulseaudioクライアントとして運用。
音楽ストリーミングサービスdeezerのデータはCDと同等の音質で、ロスレスだ。
だから、これをpulseaudioサーバーにしたElitebook 2570pにLANを経由して送って、libsamplerateでアップサンプリングしてusb DACに送ることで、高音質再生を目指す。

このときの音質だけど、CD音源同等のストリーミングデータを、libsamplerateで384kHzにアップサンプリングし、SMSL M500、Brooklyn Ampで出力している音として、全く不満がない再生音が得られていた。Pulseaudioといえば、昔は音が良くないといわれていたようだけど、本当にそうなのかな?と思うだけの音が出ていた。
ADI-2 DAC、SM-SX100で鳴らしてみても、その印象は変わらなかった。

そういうわけで、Pulseaudio運用の記録を残しておく。

Pulseaudio クライアント

クライアントの扱いは前回のエントリーのとおり。
pulseaudio クライアントのFirefoxを強化する

しかし、2020年末、再生時にノイズが無くなった頃からは余り細かいことを気にしなくなった。前回エントリーの内容、クライアントの強化についても気にしない。
firefox以外のウェブブラウザを使ってみたりしたが、操作性以外に大きな差異はないようだ。

基本的に、一般的なワークステーション用Linux PCであればクライアントとして運用できるはず。大抵、pulseaudioはインストールされているからだ。
ウェブブラウザも一般的なので大抵は問題無いだろう。というか、問題があったら他のを使うだけだ。

クライアントの使い方は、過去のエントリーから一部引用し書き変えて記載しておく。

クライアント側の設定。設定というか、使い方だ。
先ずターミナルソフトでコマンドを打つ。

$ export PULSE_SERVER=192.168.1.xx

これで、このターミナルウィンドウから起動させるプロセスが、赤字のアドレスのpulseaudioサーバーに音声データを伝送できるようになる。
同じターミナルウィンドウからコマンドを打ってウェブブラウザ(例:firefox)を起動させる。

$ firefox

firefoxが起動したら、Deezerやyoutubeなど、聴きたい音源のサイトを開く。
続いて、pulseaudioサーバーでpulseaudioを起動した後、firefoxで音源を鳴らす操作を行う。
このfirefoxが出力する音声が、lanを通じてpulseaudioサーバーに転送される。うまくいけばサーバーで設定された出力から音が出る。

この順序が重要で、順序を間違えたら再生音にノイズが乗る。

以上、ざっと引用。

この順序を間違えたらノイズが乗るという案件なんだけど、Raspberry Pi2をpulseaudioサーバーにして、アップサンプリング無しで運用した場合には、まったく見られないようだ。
つまり、サーバー側でpulseaudioを起動したままにして(daemon.confに関連して後述)、好きな時にクライアント側の操作をしたら、サーバー側から音が出る。
扱い易いのはありがたい。
だけど、理由は分からないままになっている。

引き続いて、サーバーについての説明。
音質の追求や不具合への対処に付いては、複数のエントリーに渡ってああでもないこうでもないと色々やっていて、わけが分からない。

サーバー運用にあたって、最も大事なことが書いてあるのは最初のエントリー(Pulseaudioを使ってRaspberry piにAmazon Prime Musicを転送再生する(9月8日追記))かもしれない。ここにはpulseaudioのインストールとサーバー運用に必要な初期設定、pulseaudioで使うコマンド(音量調整など)についても幾つか説明を書いてある。

うちではデフォルトでは使用できないlibsamplerateを使えるようにする必要があったので、pulseaudioをソースから再インストールする必要があり面倒だった。顛末は下記エントリーに記載。
ストリーミング音源をpulseaudioで転送しアップサンプリング再生する(10月15日、追記)
libsamplerateでアップサンプリングするなら、ハードにはそれなりのスペックが必要になる。

アップサンプリングに拘りがないのであれば、もっと簡単に運用できる。
基本的に、pulseaudioがインストールされているLinux PCであれば、設定さえすればサーバーとして機能する筈だ。うちでは21年初夏の時点でRaspberry Pi2に回帰した。簡単な運用であればそれでまったく問題ない。

使用前に「default.pa」ファイルで出力先と入力先を設定。「daemon.conf」ファイルでpulseaudioの優先度やアップサンプリングなど設定。
sshを使ってLan経由でサーバーの起動終了、音量とかを操作する。
しかし、慣れない人にはハードルが高いかも。
サーバーの設定は以下。

Pulseaudio サーバー default.paの設定

「/home/tc/.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

あれこれ運用した結果、「tsched=0」の設定を止めてデフォルトに戻している。
もともと特定のサウンドボードに対応するための設定だった筈で、実際、戻しても不具合は感じなかった。

出力先の設定が「load-module module-alsa-sink device=hw:0,0」。
aplay -lで音声データ出力先を確認し記載。

入力の設定が「load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24」。
この記載だと、LANネットワーク内のipアドレスが「192.168.1.xxx」であるクライアントから、音声データを受けることができる。

Pulseaudio サーバー daemon.confの設定

「/home/tc/.pulse/daemon.conf」の設定は以下。
項目が多いので分けて記載。

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

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

libsamplerate(SRC)で高いサンプリング周波数にアップサンプリングするために「shm-size-bytes」は大きくとっている。
しかし、どの程度の数値が良いのかは、はっきり分からないままだ。
アップサンプリングしないなら設定不要だと思う。

優先度も「nice-level」で設定する必要がある。
設定して以降、384/32が問題なく鳴らせるようになった。



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

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

このあたりの設定は、結局よく分からないままだ。
過去のエントリー(pulseaudioサーバーを強化する(その2:12月11日、追記あり) )によると、あちこち他のサイトを参考にしながら計算した筈だけど、読み返しても何をやってるのか分からない。実際、分からないまま設定したのだ。
ちょっと引用。

GETRLIMIT https://linuxjm.osdn.jp/html/LDP_man-pages/man2/getrlimit.2.html

RLIMIT_NICE (Linux 2.6.12 以降, 下記の「バグ」の節も参照)

This specifies a ceiling to which the process's nice value can be raised using setpriority(2) or nice(2).
The actual ceiling for the nice value is calculated as 20 - rlim_cur.
The useful range for this limit is thus from 1 (corresponding to a nice value of 19) to 40 (corresponding to a nice value of -20).
This unusual choice of range was necessary because negative numbers cannot be specified as resource limit values, since they typically have special meanings.
For example, RLIM_INFINITY typically is the same as -1.
For more detail on the nice value, see sched(7).

nice-levelは、-20から19の間に設定。realtime-priorityは、0から99の間。
rlimit-niceは、20-(nice-level)で設定。
なんだか分からないが、20から引くということらしい。
rlimit-rtprioもよく分からないが、realtime-priorityに数値を合わせてみた。

このあたりは効果があったかどうかもはっきりしなかった。



; exit-idle-time = 20
; scache-idle-time = 20

exit-idle-time = -1
scache-idle-time = 180


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

上の例では「exit-idle-time」に「-1」を設定している。
デフォルトは「20」で、クライアントからの音声データが20秒間途切れたらシャットダウンする設定だ。
この数値をマイナスに設定したら、データが途切れてもシャットダウンせずに待機するようになる。
以下、ネット上のマニュアルから引用。

IDLE TIMES

exit-idle-time= Terminate the daemon after the last client quit and this time in seconds passed. Use a negative value to disable this feature. Defaults to 20. The --exit-idle-time command line option takes precedence.
scache-idle-time= Unload autoloaded sample cache entries after being idle for this time in seconds. Defaults to 20. The --scache-idle-time command line option takes precedence.

1つのハードでmpdサーバーとpulseaudioサーバーを切り替えて使うような環境だったら自動的にシャットダウンする設定もそれなりに意味があるけど、pulseaudioサーバー専用ハードでサーバーを建てた場合はむしろずっと動いてくれている方が運用しやすい。

「default-script-file」は「default.pa」のパス設定。
意外に設定する方が安定すると過去のエントリーに記載がある。



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

; flat-volumes = yes
flat-volumes = no

リサンプリングにlibsamplerate(SRC)を使う設定を「resample-method = src-sinc-fastest」で記載。

flat-volumesは一応、noに。
入力と出力のボリュームを合わせるということなのでデータが変わるかもしれないと思ったので。
設定する方がいいのかどうかは確認していない。



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

default-sample-format = float32le

default-sample-rate = 384000
alternate-sample-rate = 384000

アップコンバートの設定。
default-sample-formatに「s32le」ではなく「float32le」を設定することで、音質改善があった。



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

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

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

これはあれこれやったけど、結局よく分からなかった。 pulseaudioのマニュアルから引用。

DEFAULT FRAGMENT SETTINGS

Some hardware drivers require the hardware playback buffer to be subdivided into several fragments.
It is possible to change these buffer metrics for machines with high scheduling latencies.
Not all possible values that may be configured here are available in all hardware.
The driver will to find the nearest setting supported.
Modern drivers that support timer-based scheduling ignore these options.

default-fragments= The default number of fragments. Defaults to 4.
default-fragment-size-msec=The duration of a single fragment. Defaults to 25ms (i.e. the total buffer is thus 100ms long).

Modern drivers that support timer-based scheduling ignore these options. とある。
タイマーベースのスケジューリングをサポートする最新のドライバーは、これらのオプションを無視します、と。、、、、

過去のエントリーから引用。

default-fragments関係の設定は初心に還って、計算値に合わせた。
20だろうが500だろうが、数値を何にしても大して挙動は変わらず、pulseaudioが最適値を勝手に決めているのだろうと思うに至ったのだけど、じゃあ、詳しいサイトに載っている計算に合わせた設定を書き込んでおいてもいいだろう。もうこれ以上は弄らないことにする。
参考にしたのはarchlinuxのサイト。
https://wiki.archlinux.jp/index.php/PulseAudio/トラブルシューティング
計算の仕方は下記。
コマンド「pactl list sinks」でusbデバイスへの伝送の状況が表示されるので、その数値から計算する。

pactl list sinks

Sample Specification: s32le 2ch 352800Hz
Properties:
 device.buffering.buffer_size = "1048576"
 device.buffering.fragment_size = "524288"

32*2*352800 = 22579200 (bps)
device.buffering.buffer_size (1048576) / 22579200 = 0.046439909 (50ms)
device.buffering.fragment_size (524288) / 22579200 = 0.023219955 (25ms) = default-fragment-size-msec

default-fragments = buffer_size/fragment_size = 0.046439909/0.023219955 =2

これも設定による明確な音質変化は分からなかった。まあ、これらのオプションは無視されていたのかも知れない。

Posted at 07:44 in audio_diary | WriteBacks (0) | Edit Tagged as: ,

Dec 13, 2020

pulseaudio クライアントのFirefoxを強化する

Pulseaudioを使ってFirefoxをクライアントにして(こんな言い方でいいのかね?)音声データをコンポに転送しているんだけど、Firefoxのパフォーマンス向上のために何をしているか記録しておく。効いてるかどうかは判然としないけど、端末ソフト上のエラー表示は減るようだ。
ただ、エラーがでていても聴感上は分からないんだけど。
逆にノイズがある時にエラーが表示されるわけでもない。

備忘録なので、何かあったら追記する。

about:config : Firefoxの設定変更

下記の通り設定変更。
firefoxを高速化させるとネット上にあるのをいくつか設定した。

browser.cache.disk.enable → false
browser.cache.memory.capacity → 233016

network.http.pipelining → true
network.http.pipelining.ssl → true
network.http.proxy.pipelining → true

browser.cache.memory.capacityの数値はkb。233016が上限ということらしい。
Firefoxのメモリ使用量が増えていくのを何とか出来ないかと思ってabout:configを調べているのだけど、項目が多くて調べ切れない状況。

優先度の調整

これはFirefoxを起動する度に行う必要がある。
FirefoxのPIDを確認し「renice」コマンドで設定する。

[ab@fedora1 ~]$ renice -n -15 149587
renice: 149587 (process ID) の優先順位の設定に失敗しました: 許可がありません
[ab@fedora1 ~]$ sudo renice -n -15 149587
149587 (process ID) 従来の優先順位は 0 で, 新しい優先順位は -15 です

[ab@fedora1 ~]$ renice -n 0 149587
149587 (process ID) 従来の優先順位は -15 で, 新しい優先順位は 0 です

[ab@fedora1 ~]$ sudo renice -n -20 149587
149587 (process ID) 従来の優先順位は 0 で, 新しい優先順位は -20 です
[ab@fedora1 ~]$ 

こんな感じ。

プロセスの「nice値」でプロセスの優先度を表す。
-20~19の間で値が小さいほど優先度が高い。
優先度を上げるには「sudo」で行う必要がある。下げる分には必要ない。
なお「nice」コマンドを使ってFirefoxを起動と同時に優先順位を上げるのは、Firefoxの仕様で出来ないようだ。

Posted at 15:23 in audio_diary | WriteBacks (0) | Edit Tagged as: , ,

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が動かなくなるので注意が要るけど。

Posted at 13:32 in audio_diary | WriteBacks (0) | Edit Tagged as: ,

Oct 17, 2020

pulseaudioサーバーを強化する(10月24、25日、11月01、05、10日、追記あり)

エントリーをアップした時には出来たと思ったけど、音源によってはノイズが残存していることが分かった。
あれこれ設定を変えたので、該当箇所に追記する。というか、変更が多いので次々に追記している。

11月01日、仮想アース使用でどう変わったかをエントリーの最下部に追記している。
ようやくこれで落ち着いた、となればいいのだけど。
と思ったけど、甘かったな。

11月10日、更にエントリーの最下部に追記している。
今回の手入れで、そこそこ安定となってほしいけど、まだ完璧ではない。当初よりは相当使えるようになっているが、使いこなしが必要だ。

過去の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サーバー強化について検討中と書いた。
Compaq 6730bからElitebook 2570pに移行したのでエントリーにする。

新規に2570pを入手したのではなく、PPAP方式で使っているmpdサーバーに間借りさせた。
サーバーPCの個体数増加はノイズ源を増やすことになるし、mpdとpulseaudioを同時に使うことはない。
だったら1つの機体で運用してもいいんじゃないか、と思った。
図のようなイメージ。

Pulseaudio and Mpd server

インストール手順は前回エントリーに書いた通り。
設定は下記。

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
vi .pulse/daemon.conf

; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
# shm-size-bytes = 262144
shm-size-bytes = 131072
# shm-size-bytes = 65536
# shm-size-bytes = 32768

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

; 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-sample-rate = 192000
# alternate-sample-rate = 192000

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

default-fragments = 2
# default-fragment-size-msec = 1000
default-fragment-size-msec = 500
# default-fragment-size-msec = 200
# default-fragment-size-msec = 100
# default-fragment-size-msec = 50

10.24. 追記。
下の方に、エントリーアップした時に問題なくなったとか書いているが、そうではなかった。
上記のノイズがでる設定は削除して、下のほうに現在の設定を書き直した。

10.25. 早々に追記、訂正。
shm-size-bytesが、64000000になった。
デフォルトだと64MiBが充てられるはずで、それでもノイズが出たので小さい値にしてマシになったかと思っていたのだけど、全く勘違いしていたようだ。
数値を設定で固定してやらないと安定しないみたい。

実際には256000000まで試したけど、それでも384kHzはノイズが入る。
このあたりmpdとは挙動が違っていて、pulseaudioのほうがCPUへの依存が大きいのだろうか。mpdは速いメモリを充てがったら768kHzまで行けるようになったのだけど。

352.8kHzだったら、8000000以上から安定した印象。
デフォルトの数値だからというのではないけど64000000にした。音に余裕がある気がする。逆にこれ以上増やしても却って重くなる感じだ。
しかし、、、もうノイズが出なかったらいいんだけど。

vi .pulse/daemon.conf

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

# shm-size-bytes = 128000000
shm-size-bytes = 64000000
# shm-size-bytes = 32000000
# shm-size-bytes = 16000000
# shm-size-bytes = 8000000
# shm-size-bytes = 2000000
# shm-size-bytes = 262144
# shm-size-bytes = 131072
# shm-size-bytes = 65536
# shm-size-bytes = 32768

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

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

; flat-volumes = yes
flat-volumes = no

; 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-sample-rate = 192000
# alternate-sample-rate = 192000

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

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

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

あれやこれやと変わった。
突き詰めないうちにアップしたのは失敗だった。default-fragments関係の設定はデフォルトに戻ってしまった。
とか言って、またノイズが出て変わるかもしれない、、、
そうなったら、また訂正する。

微妙な調整だけど、これでノイズはなくなった。 ハードによって最適な設定値が異なるようで、試行錯誤しながら詰めていくしかないようだ。
384kHz再生でのノイズはかなり減ったが残存している。だから352.8kHzのままだ。

音質は、PPAPの音とはDACも違うので比較してないけど、十分に使えると判断した。確かに300kHz台の音が出ている、という感じ。
本当は700kHz台で使いたいのだけど、pulseaudioの限界なのか、エラー表示が出てpulseaudio自体が起動しないので設定できない。これは機械を変えても同じだった。

ともかく、かなりやっつけな建て付けだがストリーミングを主力音源にする体制ができたと思う。

11.01. 追記。
10月半ばに「主力音源にする体制ができた」と書いていたが、なんともはや。
ノイズが収まったかと思えば再発し、あれこれと手を入れる日々が続いていた。

設定をどう弄っても、しばらく使ううちにノイズが出てくる。
以前、音源によるのかと思ったこともあったが、今となっては大きな関連はなかったと思っている。
設定自体もあれこれ弄りすぎて、何をどうしたら良いのかもよく分からなくなった。
アップサンプリングしない設定にしていてもノイズが出るときは出る。システムへの負荷とか関係ないのだろうか。

どうしたものかと思っていたんだけど、ふと思い付いて、銅板仮想アースを使ってみた。
PPAP Back-Endで音質改善が得られていて、過去にエントリーを上げている。あれこれ試した末、うちではデジタル系に対してのみ有効良好な効果が得られると判断している。しかし、その効果は強力だ。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200107a.htm
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200524a.htm

PPAP Back-Endのapu2に2セット直列で使っていた銅板を1セット外して、Pulseaudio serverに回してみた。
何処の端子に使おうかと思ったけど、Phono端子のGNDにつなぐことにした。
これで、ノイズが消えた。
様子を見ているけど、今のところ問題なく再生を継続出来ている。
同時に音も、格段に良くなっている。

銅板仮想アースでノイズが消えたということは、ハード(おそらくはクロック)が安定する必要があったということだろう。もともとノートPCなので、音楽再生に適さないハードだということでもあるのだろうか。
ようやく本当の意味でコンスタントに使えるように、、、なったんだろうか。
まだ安心は出来ないかな。様子見だ。

11.05. 追記。
そろそろ終わりにしたいんだけど、なんともはや。
ノイズが収まったかと思えば再発する。

default-fragments関係の設定を、以前に変更していた設定に戻した。 default-fragments = 2
default-fragment-size-msec = 500

あと、ブチブチノイズはサーバーだけの問題ではなく、クライアントの負荷が高いときも起きるようだ。
一見、メモリに余裕がある様でも、firefoxが動いている上位のターミナルソフトに負荷が溜まるみたいで(gnome-terminalになのかbashになのか分からないけど)、一旦、firefox、ターミナルともに終了して再起動したら治ることがある。

いろんなノウハウが蓄積されつつある。おんぼろ宇宙船をぶん殴って飛ばす船長のような気分だよ、、、

11.10. 追記。
現在の設定は下記の通り。

vi .pulse/default.pa

load-module module-alsa-sink device=hw:0,0
load-module module-udev-detect tsched=0
load-module module-detect tsched=0
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24

default.paの設定、デフォルトからの変更点だけ記載しているが、以前と変わらず。

vi .pulse/daemon.conf

shm-size-bytes =64000000
realtime-priority = 88
default-script-file = /home/tc/.pulse/default.pa
resample-method = src-sinc-fastest
flat-volumes = no
default-sample-format = s32le
default-sample-rate = 352800
alternate-sample-rate = 352800
default-fragments = 2
default-fragment-size-msec = 25
enable-deferred-volume = no

daemon.confの設定。

default-fragments関係の設定は初心に還って、計算値に合わせた。
20だろうが500だろうが、数値を何にしても大して挙動は変わらず、pulseaudioが最適値を勝手に決めているのだろうと思うに至ったのだけど、じゃあ、詳しいサイトに載っている計算に合わせた設定を書き込んでおいてもいいだろう。もうこれ以上は弄らないことにする。
参考にしたのはarchlinuxのサイト。
https://wiki.archlinux.jp/index.php/PulseAudio/トラブルシューティング
計算の仕方は下記。
コマンド「pactl list sinks」でusbデバイスへの伝送の状況が表示されるので、その数値から計算する。

pactl list sinks

Sample Specification: s32le 2ch 352800Hz
Properties:
 device.buffering.buffer_size = "1048576"
 device.buffering.fragment_size = "524288"

32*2*352800 = 22579200 (bps)
device.buffering.buffer_size (1048576) / 22579200 = 0.046439909 (50ms)
device.buffering.fragment_size (524288) / 22579200 = 0.023219955 (25ms) = default-fragment-size-msec

default-fragments = buffer_size/fragment_size = 0.046439909/0.023219955 =2

今回、新たに追加したのは「default-script-file」の設定。default.paの場所を指定した。
daemon.confで設定しなくても読み込んでいるから放置していて問題ないとずっと思っていたが、記述しておくほうが挙動が安定するようだ。これは盲点だった。
設定を弄るのは、もうこれぐらいで最後にしたい。。。

あと、クライアント側の問題?でノイズが出ることがある。こっちのほうは手を入れられることが少ない。実際のところ、大量にメモリを喰うこと以外はどうなってるのか分からないのだ。
ウェブプレーヤーを動かしているタグを閉じてメモリを解放し、再度プレーヤーを開いたら治ることがある。
ウェブブラウザを再起動したら治る場合。
ウェブブラウザの上位でpulseサーバーにデータを送っている(と思われる)端末ソフトのウインドウを閉じて、そこから操作を再開する必要がある場合。
クライアントPC自体を再起動するまで治らない場合と、いろいろだ。
今の時点では、使いこなしで何とかするしかないかなと思っている。

それにしても、raspberry pi2でamazon prime musicを聴いていたときには、そこまでノイズに悩まされることはなかったのだけど。まあ、やってることは色々と違ってきているけど、それでもCD音源相当のデータをpulseaudio serverに送っているという点では同じはず。
何が違うんだろうと思うことはあるけど、そこを考えるのは余裕が出来たらにしようと思う。

Posted at 23:54 in audio_diary | WriteBacks (0) | Edit Tagged as: ,

Oct 11, 2020

ストリーミング音源をpulseaudioで転送しアップサンプリング再生する(10月15日、追記)

ストリーミング音源利用に際して懸案だった、CDレベル音源のlibsamplerateによるアップサンプリングが、一応出来たので、備忘録にしておく。

そこそこ梃子摺ったけど、出来てみればそんなに複雑でもない。
ただ、作業行程で何が足りないのか推測し繰り返し試みないといけなかったので時間がかかった。まあ、僕の手際が悪いんだけど。
なにしろ、ログを読んでも何が足りないとかいけないとか、簡単に分からない。基本的なlinuxの知識が少ないので、初歩的なことを書いているのに気付かず、躓いたまま苦心惨憺の後に気付いたり、ということが多々ある。気付くまでログのあっち読んだりこっち読んだり、あれやったりこれやったりになるのだ。はっきりエラーと明言されていない記述も注意する必要があって、気付いたらそんなことだったのかなんだけど。
そういうときは、もしかして、この記述が怪しいのかな、ポイントなのかな?という、感が頼りになってくる。例えばログの中に「capability」という言葉があって、capability?、、cap?、、libcapというのが要るのかな?、、という感じで追い込む。
コンピューターをいじってるのにそんなんでいいのかという感じだ。

最初はpiCore 9で試みたが上手くいかず、tiny core 64 11.1で作っている。
そもそも、本気でアップサンプリングするならraspberry pi2とかだと限界がある。
ともあれ、以下、手順の要約。

tiny core pure 64 11.1のインストール行程を最初からなぞるのは面倒だったので、PPAP Frontを作る際のベースに使って、バックアップを保存していたディスクイメージを使うことにした。これをSDカードに書込み、Compaq 6730bに刺して起動、sshでログインしbulseaudioサーバーの環境を作っていく。

まず、tceコマンドで足りないライブラリ等をインストール。
alsa関連を足りないことがないように拡充、libcap関連、dbus関連を追加。
あと、以下に経過を記録。

wget http://freedesktop.org/software/pulseaudio/releases/pulseaudio-13.0.tar.xz
tar -xf pulse*xz
cd pulseaudio-13.0

./configure --disable-x11 --enable-alsa --enable-samplerate
make
mkdir ../pulseaudio
sudo make DESTDIR=/home/tc/pulseaudio install

cd

mksquashfs pulseaudio pulseaudio-13.0.tcz
md5sum pulseaudio-13.0.tcz > pulseaudio-13.0.tcz.md5.txt

sudo cp *tcz* /mnt/*2/tce/optional
sudo vi /mnt/*2/tce/onboot.lst
(pulseaudio-13.0.tcz)

wgetでpulseaudio-13.0をダウンロード。
展開しディレクトリに入る。alsaとsamplerate(libsamplerate)は使えるように、x11は使わない設定で、インストール。
tczファイルなど作成し、optionalディレクトリにコピー、onboot.lstにOS起動時読み込みの設定を書き込み。

これで、pulseaudio-13.0をインストール終了。
この時点でのインストール済みのtcz一覧は、下記アドレスのファイルに記載。ずいぶん沢山入っている。本来なら要らないものも多く入っていると思う。
http://blown-lei.net/blog/pulseaudio-optional-tcz.txt
onboot.lstは下記のとおり。

less /mnt/*2/tce/onboot.lst

openssh.tcz
i2c-5.4.3-tinycore64.tcz
nfs-utils.tcz
alsa-modules-5.4.3-tinycore64.tcz
alsa.tcz
nmap.tcz
gcc.tcz
boost-1.65-dev.tcz
pkg-config.tcz
bison.tcz
autoconf.tcz
libtool-dev.tcz
bc.tcz
cmake.tcz
compiletc.tcz
squashfs-tools.tcz
ntpclient.tcz
libsamplerate.tcz
libsamplerate-dev.tcz
lame.tcz
lame-dev.tcz
libmad.tcz
libmad-dev.tcz
alsa-plugins-dev.tcz
alsa-config.tcz
alsa-dev.tcz
libcap.tcz
libcap-dev.tcz
dbus-dev.tcz
pulseaudio-13.0.tcz

こんな環境に出来上がった。
pulseaudioサーバーを設定していく。

mkdir .pulse
cp pulseaudio/usr/local/etc/pulse/default.pa .pulse
cp pulseaudio/usr/local/etc/pulse/daemon.conf .pulse

rm -rf pulseaudio*

ホームtcディレクトリに「.pulse」ディレクトリを作成。
設定ファイル「default.pa」と「daemon.conf」をソースからコピー複製し「.pulse」に設置。
インストールに使った残骸は「rm -rf」で削除。
設定ファイルの内容を、使用環境などに合わせて下記の通り変更。

vi .pulse/default.pa

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

vi .pulse/daemon.conf

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

; default-sample-rate = 44100
; alternate-sample-rate = 48000
default-sample-rate = 192000
alternate-sample-rate = 192000

; default-sample-format = s16le
default-sample-format = s32le

以前のエントリーに書いたけど、module-native-protocol-tcpを設定することで、クライアントからの信号を受ける事ができるようになる。 src-sinc-fastestはlibsamplerateの設定。USB-DACの状況に合わせて記載。

filetool.sh -b
sudo reboot

設定を保存。リブート。

再度、sshでログインし、試用を開始。使えるリサンプラーを確認する。

tc@box:~$ pulseaudio --dump-resample-methods
src-sinc-best-quality
src-sinc-medium-quality
src-sinc-fastest
src-zero-order-hold
src-linear
trivial
speex-float-0
speex-float-1
speex-float-2
speex-float-3
speex-float-4
speex-float-5
speex-float-6
speex-float-7
speex-float-8
speex-float-9
speex-float-10
speex-fixed-0
speex-fixed-1
speex-fixed-2
speex-fixed-3
speex-fixed-4
speex-fixed-5
speex-fixed-6
speex-fixed-7
speex-fixed-8
speex-fixed-9
speex-fixed-10
ffmpeg
auto
copy
peaks
tc@box:~$ 

src-sinc-best-quality、src-sinc-medium-quality、src-sinc-fastest、と表示がある。
libsamplerateは使えるはずだ。

さて、鳴らしてみましょうか、、、「pulseaudio -D」で起動し、クライアントのfirefoxから音声信号を伝送する。
さっそく、音がでない。「top」を打つと、pulseaudioは仕事をしている様子。
状況は?

tc@box:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: IncRAL2496UT1 [RATOC Systems, Inc.RAL-2496UT1_], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

tc@box:~$ pactl list sinks
Sink #0
    State: RUNNING
    Name: auto_null
    Description: Dummy Output
    Driver: module-null-sink.c
    Sample Specification: s32le 2ch 192000Hz
    Channel Map: front-left,front-right
    Owner Module: 13
    Mute: no
    Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
            balance 0.00
    Base Volume: 65536 / 100% / 0.00 dB
    Monitor Source: auto_null.monitor
    Latency: 206 usec, configured 500 usec
    Flags: DECIBEL_VOLUME LATENCY
    Properties:
        device.description = "Dummy Output"
        device.class = "abstract"
        device.icon_name = "audio-card"
    Formats:
        pcm
tc@box:~$

Name: auto_null、Description: Dummy Output、って、何?。
alsaはdacを認識しているが、pulseaudioは認識していない。
というか、クライアントから送られてきた信号が何処かに消えていくように設定されてるらしい。

原因は不明。多分何処かでミスってるのだろう。普通は自動的に読み込まれるのでハードの設定はpulseaudioではしなくていいものらしい。
しかしそんなことは言ってられないので、下記のように設定する。

vi .pulse/default.pa

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

aplay -lで、「card 0: IncRAL2496UT1 [//], device 0: USB Audio」なので、hw:0,0だ。
これでどうか。

tc@box:~$ pactl list sinks
Sink #0
	State: RUNNING
	Name: alsa_output.hw_0_0
	Description: RATOC Systems, Inc.RAL-2496UT1_
	Driver: module-alsa-sink.c
(... 以下略 )

一応、認識した、、、
pulseaudioを再起動して、信号伝送すると、、、音が出た。
ようやく一息、これで、なんとかなるのかな?

取り敢えず現状、音質は後回しで、ちゃんと運用できる事が優先なんだけど、いくつか問題が。

まず、192kHzだとブツブツ途切れるようなノイズが入って使えなかった。96kHzだと問題ないんだけど。
DACを変えたら、、、問題なくなったのかな?、、、
一応、384kHzで音は出るが700kHz台だと「Invalid sample rate '768000'.」とかエラー表示される。どうも微妙だ。
しかし、300kHz台が使える。
音は、、、
さすがに768kHzの深淵には及ばないけど、そこそこ良いんじゃないかな。
月にCD1枚程度の金額で、この音で聴けるなら、、、相当安いんじゃないかな。いや、、、使えますよこれ。

次に、ギャップレス再生ができない問題。これは、、、どうなんだろうね。
自宅NASの音源をmpdで聴いてきた限りでは、この問題は全く気にしなくても良かった。まあ、、、仕方がないのかな、、、

もうひとつは、クライアントPCにキャッシュが積み重なるようで、どんどんメモリが消費されていく。つまり、鳴らし始めのうちはいいけど数時間鳴らすとクライアントPCが不安定になるのだ。不可逆圧縮音源を使っていた時には、消費される容量が少なかったので、気付かなかったのだろうか。
しかし、8GB積んでるんだよ?
それが気付けば100%近く使用になりswapまで消費し始める。何にそんなに使ってるんだろう、、、firefoxを閉じると忽ち使用メモリ量は低下する。
一方、、、pulseaudioサーバー側は、ほとんどメモリを使っていない。

tc@box:~$ free
              total        used        free      shared  buff/cache   available
Mem:        3946904      239024     3592700       20636      115180     3440612
Swap:        959968           0      959968
tc@box:~$ 

何がどうなっているのやら。
素直にNode2iあたり導入するほうが楽なのかもしれない、、、(でもあれ、Linux用の操作アプリはないんじゃないかな、、、)
まあ、もうちょっと弄ってみましょうか、、、

弄れるかな、、、
弄れるかどうかはともかくとして、メインソースとして充分に使えそうなのが非常にありがたい。CD購入も減らせそうだ。

10月15日追記。
数日かけて使ってみたけど、なかなか手強い。
まず、スムーズに聴けるときとノイズで音楽にならないときがある。ブツブツ途切れる感じの雑音だ。音源によっても違う。

対策としてdefault.pa、daemon.confの設定をあれこれ弄ってみた。
詳細は省くけど、現在は352.8kHzにアップサンプリングで聴いている。これならほぼノイズがない。384kHzだとノイズで聴けない音源のほうが殆どになる。192kHzだと全く問題ないようだけど、現在は試行錯誤中なので300kHz台で使う。
他の設定も匙加減が必要で、なんだか綱渡り的。
現在の設定内容は下記に記載。

vi .pulse/default.pa

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


### Automatically load driver modules depending on the hardware available
.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
vi .pulse/daemon.conf

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

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

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


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

default-fragments = 2
# default-fragment-size-msec = 500
default-fragment-size-msec = 200
# default-fragment-size-msec = 100
# default-fragment-size-msec = 25

こういうのは、経験的にはハードを良くしたら解消すると思うので、検討中。

クライアント側の状況も音に影響する。
ファンが回るとてきめんに音質悪化する。止まると比較的速やかに回復する。
lanケーブルやスイッチングハブをいくつも介して遠く離れているのに、不思議なものだ。

キャッシュが積み重なるのは、抜本的対策は見えない。現状はウェブプレーヤーのタグを閉じてキャッシュ消去することで対応している(何を数GBも蓄積しているのかが分からない。音楽データだとしても大きすぎると思うのだけど)。

そんなこんなで、クライアントPC自体を新しくした。6730bからPro Book 450G3に。6730bは最近はYoutubeを見るだけでファンが回っていたので、いい機会ではあった。
HDDを積み替えるだけで移行できたのはラッキーだった。
メモリは12GBに増量。
450G3だとDeezer再生時にもファンが回らない。

Sep 30, 2020

Pulseaudioの備忘録

9月初旬のエントリーで、Pulseaudioのエントリーを上げた。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20200906a.htm
Pulseaudioを使ってRaspberry piにAmazon Prime Musicを転送再生する

今回は、Pulseaudioについて、知見追加のメモ中心。
PulseAudio
https://www.freedesktop.org/wiki/Software/PulseAudio/

まず、アップサンプリングについて。
使っている音源はストリーミングサービス、ウェブプレーヤーからの256kbpsの不可逆圧縮とはいえ、するとしないでは音が違う。多少でも768kHz PPAPの音に近付けていかないと、僕のことだから最終的に飽いてしまいそうなので、試みないわけにいかない。
方法はサーバーの「~/.pulse/daemon.conf」に設定を以下のように書き込む。

; resample-method = speex-float-1

# resample-method = src-sinc-fastest
resample-method = src-sinc-medium-quality
# resample-method = src-sinc-best-quality

default-sample-format = s32le

default-sample-rate = 384000
alternate-sample-rate = 384000

1行目のspeexがデフォルト。下がlibsamplerateとその他の設定。
というはずなんだけど、libsamplerateは2015年頃に「意味が無い」ということになって非推奨になっていて、設定しても反映されない。
https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/6.0/
実際、mediumやbestに設定しても、CPUの負荷が変わらない。「pulseaudio --dump-resample-methods」というコマンドで利用可能なリサンプラーを表示できるのだけど、libsamplerateはインストールしてあっても表示されない。
https://bbs.archlinux.org/viewtopic.php?id=217672
こちらのサイトによると「auto」でリサンプリングされているらしい。autoってなんだか分からないのだが。たぶんデフォルトの「speex-float-1」の設定になるのだと思うのだけど、はっきりしない。

それでも使わないよりは音がいい。
768kHzは設定できない旨が表示されて使えないので、384kHzにアップサンプリングして聴いている。
デフォルトの「speex-float-1」は、数値を上げるとぶちぶち音が切れる。2でもときに途切れるので、結局、1のままだ。「speex-fixed-1」でも悪くない。少し音の感触が変わる。好みで選択できる感じ。
個人的には、いずれはlibsamplerateを使えるようにしたい。他所では意味がなかったのかもしれないが、うちでは音がいいのだから。

アップサンプリングした結果、SM-SX100の光入力(44.1-48/16-32)は使えなくなった。
取り敢えずUSB-DACにSMSL M100を使っている。いつどういう経緯で入手したか覚えていない。RCA出力をSX100に入力している。

他にはリアルタイム化。daemon.confで設定。下記サイトを参考にした。
https://pulseaudio.blog.fc2.com/blog-entry-1.html
http://yougateau.blogspot.com/2019/11/pcmx-linux.html
https://wiki.archlinux.jp/index.php/PulseAudio#.E8.A8.AD.E5.AE.9A.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB
https://wiki.archlinux.jp/index.php/PulseAudio/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0

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

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

high-priority = yes
# nice-lebel = -19
realtime-scheduling=yes
realtime-priority=99

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

エラーになる理由が分かったので11月18日、追記。
上にそのまま書いてあるけど、levelをlebelと書き間違えている。非常に初歩的なミスだった。
nice-levelで優先度を高く設定することでシステムは安定し音質も向上した。

ここで、Deezer hifiに借り登録。
1ヶ月無料体験で、ウェブプレーヤーで44.1/16のロスレス音源を聴ける。
Tidal、Qobuzもウェブプレーヤーでロスレス以上を聴けるらしいんだけど、こっちは海外登録へのハードルが高い。

ロスレス音源を鳴らしたらどうなのかやってみたら、なんだか歪んだ感じでノイズっぽい。アップサンプリングしないほうがいい。
アップサンプリングなしだと、まっとうな音で鳴る。さすがロスレスで実直で至極まっとうな音ではあるんだけど、不可逆圧縮をアップサンプリングしたのより地味で残念だと思った。
まあ、派手じゃないけど、落ち着いて聴ける。
女房なんかはこっちのほうが音がいいという。
実際、CDリッピング音源をそのまま鳴らしたような音で、うち的にはポテンシャルを引き出せてない感じ。
上を目指せるのはこっちだ。ハードを改善したら問題なくなるのか、libsamplerateを使えるようにすべきなのか、その両方が必要なのか。

Deezer hifiのデータを転送してると、クライアントの6730bもギリギリっぽくて普段使いがややままならない。何か用事で触ると音が途切れることがある。古い機械だからな。
いろいろ考えないといけないようだ。

Posted at 21:31 in audio_diary | WriteBacks (0) | Edit Tagged as: ,

Sep 06, 2020

Pulseaudioを使ってRaspberry piにAmazon Prime Musicを転送再生する(9月8日追記)

今回はPulseaudioを使ってみたという話だ。
実は、Pulseaudioで音楽データを転送するというのは数年前にも考えたことがあって、でもスキル不足で実現していなかった。
今回、何故そんなことをしたのかというのは省略。
運用のノウハウだけ記録しておこうと思う。

参考にしたサイトのアドレスは以下の通り。他にも見たけど忘れた。

https://www.alprovs.com/wordpress/?p=439
https://penkoba.hatenadiary.org/entry/20130809/1376064438
http://bluewidz.blogspot.com/2018/04/oslinux-virualboxdebian-8.html
https://www.it-swarm.dev/ja/pulseaudio/

用意したもの。

  1. 普段使いのノートPC、Compaq 6730b。
    OSはFedora。既にPulseaudioはインストールされていて、クライアントとして機能させる。
    FirefoxでAmazon Prime Musicにログインし、音声データをPulseaudioサーバーに送信する。

  2. Raspberry Pi2。
    OSはpiCore9.0.3。Pulseaudioサーバーとして動かす。Amazon Prime Musicのデータを受けて、usb dacに送る。

  3. usb dacはRATOCのRAL-24192ut1を使う。
    RCA出力をオーディオテクニカのAT-SP150 bkで受ける。

こんなイメージ。

Pulseaudio

まずサーバーとなるRaspberry pi2をセッティングしていく。
ダウンロードしたpiCore9.0.3をmicroSDカードに書き込む。今回はusb dacしか使わないので「config.txt」を下記のように設定して、dtparam=i2c、spi、i2s、本体のオーディオ出力の使用を止めている。そうすることでalsaが認識するオーディオ出力がusb dacに固定されるメリットもある。

# Enable peripheral buses
dtparam=i2c=off,spi=off,i2s=off

# Enable onboard audio
dtparam=audio=off

カードをRaspberry Pi2に刺して起動。
sshでログインし「filetool.sh -b」を打つ。「sudo fdisk -u /dev/mmcblk0」でパーティションを拡張。リブート。
再ログインして「sudo resize2fs /dev/mmcblk0p2」で拡張したパーティションを固定。
vi /opt/.filetool.lst で「usr/local/etc」を追加。
filetool.sh -bで保存、で準備完了。
このあたり詳細は過去のエントリーで繰り返し書いているので省略。

pulseaudioとalsaをインストール。
最近は「tce」コマンドから項目を選択してインストールすることが増えた。
pulseaudio.tczのインストールとalsa-utils.tczのインストールの操作だけで完成する。実際にはこの2項目の他にも必要なtczが同時に多数インストールされる。

2021.04.06. 追記。alsa-tczもインストール操作したほうが良さそう?
alsa-utilsだけでalsaもインストールされると思ったんだけど、先にalsa-utilsを入れたらインストールされなかった。要注意ということで。

tceコマンドで表示されるpulseaudioの説明から引用。

howto:
alsa needs to be working for whatever sound device you have.
Create dbus entry for booting into X
$ echo 'dbus-launch --sh-syntax --exit-with-session' > ~/.X.d/dbus
$ /usr/local/etc/init.d/dbus status [Check dbus is running]
If not running, start dbus with
$ sudo /usr/local/etc/init.d/dbus start
If dbus was not, initially running, add a command to start it next reboot
$ sudo echo '/usr/local/etc/init.d/dbus start' >> /opt/bootlocal.sh

exit to console
startx
$ pulseaudio -vv [to test]
When it is running correctly
echo "start-pulseaudio-x11" > ~/.X.d/pulseaudio

if a bluetooth sound devices is paired and configured, pulseaudio should find it automatically if the daemon is running

dbusが動いていないとpulseaudioは動かないらしい。
/usr/local/etc/init.d/dbus status で確認したところ、動いていない。

sudo /usr/local/etc/init.d/dbus start で動く。
下記コマンドで、OS起動時にdbusが動くようにbootlocal.shファイルを編集、設定。
sudo echo '/usr/local/etc/init.d/dbus start' >> /opt/bootlocal.sh

今回、~/.X.d/dbusの設定はしていないが、問題ないようだ。

次にpulseaudioの設定。

$ mkdir .pulse
$ cp /usr/local/etc/pulse/default.pa ~/.pulse
$ vi .pulse/default.pa

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

ホームに.pulseディレクトリを作成。
ここに設定ファイルのdefault.paをコピーする。
この設定ファイルの中の「load-module module-native-protocol-tcp」に、上記のように記述を書き加えることで、ネットワークからのデータを受けることが出来るようになる。
192.168.1.0/24の部分は、各自のネットワーク環境に合わせる。

一応、alsaの状況を確認。「aplay -l」でusb接続しているDACが確認出来たら問題ないだろう。
filetool.sh -bで、dbusとpulseaudioの設定を保存。
これでサーバー完成。
デーモンとしてpulseaudioを起動するときはsshから「pulseaudio -D」、終了には「pulseaudio -k」。

次に、クライアント側の6730bを設定。設定というか、使い方だ。
先ずターミナルソフトでコマンドを打つ。

$ export PULSE_SERVER=192.168.1.xx

これで、このターミナルウィンドウから起動させるプロセスが、赤字のアドレスのpulseaudioサーバーに音声データを伝送するようになる。つまり、赤字の部分はRaspberry Pi2のipアドレスということだ。
同じターミナルウィンドウからコマンドを打ってfirefoxを起動させる。

$ firefox

firefoxが起動したら、amazonにログインし、prime musicの音源を鳴らせばいい。このfirefoxが出力する音声はlanを通じてRaspberry Pi2に転送される。うまくいけばusb dacから音が出る。

注意点としては、ネットワークが遅いと音がぶちぶち途切れる。うちでは6730bの無線lanが遅すぎて音楽にならず、有線100Base-Tでつないだら問題なく鳴るようになった。
ちなみにRaspberry Pi2の出力フォーマットを確認したところs32le 44100で、そこそこのデータ量がある。6730bのネットワーク出力をモニターしてみたら、400KiB/s前後でデータ転送されている。
youtubeの音源だとどうなるか確かめたら、s32le 48000。サイトや音源によって変化するようだ。
DACをRAL-2496ut1に換えると、s16leにフォーマットが変わる。こういう調整はRaspberry Pi2がやってくれているみたい。

あと、クライアントからの信号が止まって暫くしたらサーバーのpulseaudioは自動的にシャットダウンするようで、使う直前にsshでログインして起動しないといけない。
どこかで何か設定できるんだろうけど、確認していない。

さて、2496ut1の光デジタル出力をメインシステムにつないでみたのだけど、問題が。
直接つなぐと音量が大きすぎる。
というか、うちのアンプのボリュームが、普通のデジタル出力からみたら上げ過ぎなのだ。
普段はmpd/libsamplerateで768/32にアップサンプリングしデジタルボリュームで50%前後に絞って出力しているので、逆にアンプのボリュームは上げている。ここに普通のデジタル出力から入力したら、大音量になる。
Firefox上のPrime Musicにもボリュームがあるのだけど、これを下限ギリギリまで下げることになる。モニター画面上、ミリ単位の調節になって使いにくい。

pulseaudioサーバーの音量を下げられるコマンドもあるらしいが、どうもうまくいかない。うちではalsaが動かなくなって音が出なくなった。ここで考えてみたら、s16le 44100のフォーマットで、Raspberry Pi2でデジタルで音量調節というのは、音質に配慮するなら使わないほうがいい手法ではないのか、と思い至る。
そこで、あんまりスマートじゃないけど、メインシステムにつなぐのにはOdeon-Liteを使うことにした。ボリュームがついているので使いやすい音量に設定できる。Odeon-Liteにはusb入力がないので、2496ut1をDDコンバーターとして使う。

突っ込んだ音質評価はしていないが、Prime Musicの音源もそこそこの音質で聞けると思う。

8日、追記。
pulseaudioサーバーの音量を下げるコマンドについて書いておく。
参考にしたサイトは下記。
http://masahiroshiomi.jp/blog/pulseaudio/286/
まず、デバイスの状況を調べるコマンド。

pactl list sinks

いろんな項目について詳細な情報を表示してくれる。
Latency: 79996 usec, configured 75012 usec
よく見たら、こんな記載があったりする。あんまりいい数値とはいえないのかな。どこのLatency?とか、よく分かっていない。

音量を調整するコマンドは下記の通り。

pactl set-sink-volume 0 50%

0というのはデバイスの番号じゃないかと思う。「50%」のところで音量を調整する。
調整後に「pactl list sinks」で確認すると下記のように表示される。

Volume: front-left: 32768 /  50% / -18.06 dB,   front-right: 32768 /  50% / -18.06 dB

音声再生中でもコマンドを打ったら速やかに音量を変更できた。
だけど、音質はどうかといえば、結局は「100%」にしてOdeon-liteやSM-SX100のボリュームを調整したほうが良いように聞こえた。

更に追記。
結局、Odeon-liteは外してしまった。
2496ut1からの光出力をSM-SX100に直に入力することにした。セレクターとボリュームを弄るだけでいいんだから簡単だ。
Brooklyn Ampにはその手は使えないので、他の方法を考えないといけない。

2021年1月1日、追記。「pactl set-sink-volume」がどんな感じに効くのかメモしておく。
pulseaudioの扱いにもだいぶ慣れて、ストリーミング用の日常音源として定着した。Amazon PrimeではなくDeezerを使っている。

pactl set-sink-volume 0 100%
pactl list sinks
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB

pactl set-sink-volume 0 95%
Volume: front-left: 62259 /  95% / -1.34 dB,   front-right: 62259 /  95% / -1.34 dB
Volume: front-left: 58982 /  90% / -2.75 dB,   front-right: 58982 /  90% / -2.75 dB
Volume: front-left: 55705 /  85% / -4.24 dB,   front-right: 55705 /  85% / -4.24 dB
Volume: front-left: 52428 /  80% / -5.81 dB,   front-right: 52428 /  80% / -5.81 dB
Volume: front-left: 51773 /  79% / -6.14 dB,   front-right: 51773 /  79% / -6.14 dB
Volume: front-left: 49152 /  75% / -7.50 dB,   front-right: 49152 /  75% / -7.50 dB
Volume: front-left: 45875 /  70% / -9.29 dB,   front-right: 45875 /  70% / -9.29 dB


pactl set-sink-volume 0 65536
pactl list sinks
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB

pactl set-sink-volume 0 61440
Volume: front-left: 61440 /  94% / -1.68 dB,   front-right: 61440 /  94% / -1.68 dB
Volume: front-left: 57344 /  88% / -3.48 dB,   front-right: 57344 /  88% / -3.48 dB
Volume: front-left: 53248 /  81% / -5.41 dB,   front-right: 53248 /  81% / -5.41 dB
Volume: front-left: 49152 /  75% / -7.50 dB,   front-right: 49152 /  75% / -7.50 dB
Volume: front-left: 45056 /  69% / -9.76 dB,   front-right: 45056 /  69% / -9.76 dB
Volume: front-left: 40960 /  63% / -12.25 dB,   front-right: 40960 /  63% / -12.25 dB
Volume: front-left: 36864 /  56% / -14.99 dB,   front-right: 36864 /  56% / -14.99 dB
Volume: front-left: 32768 /  50% / -18.06 dB,   front-right: 32768 /  50% / -18.06 dB

%、整数での指定で設定するとこんな感じ。
うちでは100%以上の音量に上げることは無いので、下げる指定のみ試している。
整数での指定は、16bit=2の16乗=65536、そこから4096ずつ引いていった数値。8回引いたら32768で50%、15bitの情報量に圧縮?になるようで、相応の音質劣化がある。
聴感上、70%以上で使いたい感じ?

不思議なのは、pulseaudioのデジタルボリュームを使うよりも、Firefox、Webプレーヤーのボリュームを使うほうがまだ劣化が少ないような気がすることだ。mpdのボリュームを使っているときにも意外に劣化が少ないと感じるのだけど、それと似たような感触。pulseaudioのボリュームで音量を落とすより、劣化が目立たないように感じる。
全く理由は分からないが。気のせいかもしれないのだけど。

小数点付きの数字で指定だと、以下のような感じ。
音量2.0倍で+6dB、音量2分の1(0.5倍)で-6dBということで概ね相関している。
dBでの指定も出来るんだけど、%と整数による指定はデジタルな指定で、小数点付き数値とdBでの指定は音量によるものということらしい。

pactl set-sink-volume 0 3.0
Volume: front-left: 94519 / 144% / 9.54 dB,   front-right: 94519 / 144% / 9.54 dB

pactl set-sink-volume 0 2.0
front-left: 82570 / 126% / 6.02 dB,   front-right: 82570 / 126% / 6.02 dB

pactl set-sink-volume 0 1.5
Volume: front-left: 75020 / 114% / 3.52 dB,   front-right: 75020 / 114% / 3.52 dB

pactl set-sink-volume 0 1.25
Volume: front-left: 70597 / 108% / 1.94 dB,   front-right: 70597 / 108% / 1.94 dB

pactl set-sink-volume 0 1.0
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB

pactl set-sink-volume 0 0.75
Volume: front-left: 59543 /  91% / -2.50 dB,   front-right: 59543 /  91% / -2.50 dB

pactl set-sink-volume 0 0.5
Volume: front-left: 52016 /  79% / -6.02 dB,   front-right: 52016 /  79% / -6.02 dB

pactl set-sink-volume 0 0.33
Volume: front-left: 45288 /  69% / -9.63 dB,   front-right: 45288 /  69% / -9.63 dB

dB指定だと、ちょっと扱いが他の指定方法と違ってくる。

pactl set-sink-volume 0 3.0dB
Volume: front-left: 73533 / 112% / 3.00 dB,   front-right: 73533 / 112% / 3.00 dB

pactl set-sink-volume 0 -3.0dB
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB

pactl set-sink-volume 0 -3dB
Volume: front-left: 58409 /  89% / -3.00 dB,   front-right: 58409 /  89% / -3.00 dB

pactl set-sink-volume 0 +3dB
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB

指定した値の前に「+ -」を付けると「増減」の指定になる。
つまり「3.0dB」と指定したら「3.0dBの音量」に変更する指定だけど、「+3dB」「-1.5dB」みたいな指定をすると、現在の数値から増減指定になるということだ。

実は「+ -」で「増減」を指定するのは%、整数、小数点付き数字での指定でも出来る。

pactl set-sink-volume 0 -25%
Volume: front-left: 49152 /  75% / -7.50 dB,   front-right: 49152 /  75% / -7.50 dB
pactl set-sink-volume 0 -25%
Volume: front-left: 32768 /  50% / -18.06 dB,   front-right: 32768 /  50% / -18.06 dB
pactl set-sink-volume 0 +50%
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB


pactl set-sink-volume 0 -1024
Volume: front-left: 64512 /  98% / -0.41 dB,   front-right: 64512 /  98% / -0.41 dB
pactl set-sink-volume 0 -1024
Volume: front-left: 63488 /  97% / -0.83 dB,   front-right: 63488 /  97% / -0.83 dB
pactl set-sink-volume 0 -2048
Volume: front-left: 61440 /  94% / -1.68 dB,   front-right: 61440 /  94% / -1.68 dB
pactl set-sink-volume 0 +4096
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB


pactl set-sink-volume 0 +1.0
Volume: front-left: 82570 / 126% / 6.02 dB,   front-right: 82570 / 126% / 6.02 dB
pactl set-sink-volume 0 +1.0
Volume: front-left: 104031 / 159% / 12.04 dB,   front-right: 104031 / 159% / 12.04 dB
pactl set-sink-volume 0 -0.5
Volume: front-left: 82570 / 126% / 6.02 dB,   front-right: 82570 / 126% / 6.02 dB
pactl set-sink-volume 0 -0.5
Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB

こんな感じ。

Posted at 09:46 in audio_diary | WriteBacks (0) | Edit Tagged as: ,
Page 1 / 31 :  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Next › »