LinuxでのPulseAudioによる音質処理
Sony PHA-1のポータブルヘッドホンアンプを持っているのだが、こいつは外付けサウンドカードでもある。ほとんどの時間はノートPCに外付けして、音楽を聴くときにノートPCから漏れてくるあの鬱陶しい電流ノイズを回避するために使っている。実際その役目はしっかり果たしてくれていて、しかもDACモードならLinuxに直挿ししても独立したサウンドカードとして認識される。だから特に気にしたこともなかったのだが、今日暇つぶしに説明書をめくっていて、macOS XでPHA-1を使う際の解説を見つけた。
日本語ではあるが読んで理解できた。認識させた後、96Hzの周波数を調整する必要があるらしい。この項目はPHA-1をSurface Pro 3に外付けしていたときにも存在を知っていた。ではLinuxにもあるのか……
マニュアルを探してみたら、あった。最近はALSAはあまり使っておらず、ほとんどがPulseAudioだ。
pacmd list-sinks | grep sample
現在のサウンドカードデバイスの周波数を確認する。もちろん大半はデフォルトでsample spec: s16le 2ch 41000Hzの値になっているので、これを変更する必要がある。
sudo vim /etc/pulse/daemon.conf
まず既存の resample-method = speex-float-1 などの記述をコメントアウトし、手動で追加する。
resample-method = src-sinc-medium-quality
default-sample-format = s24le
default-sample-rate = 96000
s241eは24bit、96000はもちろん96Hzのことだ。具体的な数値はサウンドカード次第で、例えばSony PHA-1は24bit 96Hzに対応しているのでこの設定でいい。家にあるASUSのXonarは24bit 192Hz対応なので、二つ目を192000にすればいい。
pulseaudio -k
pulseaudio --start
PulseAudioを再起動して反映させる。
ここで触れておきたいのは、resample-methodのsrc-sinc-medium-qualityは最高設定ではないということ。最高はsrc-sinc-best-qualityだが、有効にするとCPU使用率が跳ね上がるだけでなく、

音割れまで起きる。Arch Linuxの関連wikiやPulseAudioのドキュメントを見ても、src-sinc-best-qualityにはまだ多くの問題があるらしい。素直にsrc-sinc-medium-qualityを使っておくのが無難だ……
では音は変わったのか? 最近PSVばかりやっていてほとんど聴いていない……まあ、こればかりはHiResの音源と組み合わせないと効果は出ないよな……
もちろんこの設定で問題が起きたら、設定を元に戻せばいい。
ポイントはresample-methodの方式で、例えばmediumだと一部の音で割れるとかなら、speex-float-5に変えればいい。0から10までが音質の悪い順から良い順に対応していて、10のレベルは君のマシンには耐えられないと信じている。
最終的に使った設定はこれ:
resample-method = speex-float-5
default-sample-format = s24le
default-sample-rate = 96000
最後に一言。Bluetoothイヤホンを使うときに音割れが起きるなら、この設定が原因かもしれない。Speex-float-5のサンプリング方式をsoxr-vhqに変えれば解決する。
コメントは中国語の本家サイトで受け付けています。このミラーは閲覧専用です。