けさらんぱの自由帳

とあるFF14プレイヤーがFF14のこととか関係ないことを書いていく予定のブログです。記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

PulseAudioの出力をハイレゾにしてみた話

PulseAudioの出力をハイレゾにしてみたので、そのことを書いてみようと思います。

出力の設定

まずは出力の設定からです。

出力をハイレゾにするには、 /etc/pulse/daemon.conf に下記の設定を追加します。サンプリングフォーマットとサンプリングレートの具体的な値は、当然ハードウェアが対応している値にします。

default-sample-format = s32le
default-sample-rate = 192000
alternate-sample-rate = 192000
default-sample-channels = 2

リサンプリングの設定

次にハイレゾじゃない音源を再生するときのためのリサンプリングの設定です。

PulseAudioが対応しているリサンプリングの手法は、 pulseaudio --dump-resample-methods を実行することで確認できます。うちの場合はこんな感じでした。

% pulseaudio --dump-resample-methods
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
soxr-mq
soxr-hq
soxr-vhq

何も設定しないと、 speex-float-1 という音質的にはあんまりよろしくない手法が使われます(数字が小さいほど音質よりもパフォーマンス優先)。これを音質が良いものに変更します。この設定も /etc/pulse/daemon.conf に追記します。

resample-method = soxr-vhq

man pulse-daemon.conf によるとspeexよりsoxrの方がCPU使用率の割に音が良いらしいので上記の設定にしました。ただし、 pactl list | grep Resample で確認したところ、アプリによっては設定が無視されて speex-float-1 になってしまうことがあるようです…

フラグメントの最適化

PulseAudio - Tune your setting and prevent glitching に書いてあることを実行します。

% echo autospawn = no >> ~/.pulse/client.conf
% killall pulseaudio
% LANG=C pulseaudio -vvvv > ~/pulseverbose.log 2>&1
(Ctrl+Cを押す)
% rm ~/.pulse/client.conf
% grep device.buffering -m2 ~/pulseverbose.log

うちの場合、 buffer_sizefragment_size は下記のようになりました。

device.buffering.buffer_size = "3072000"
device.buffering.fragment_size = "1536000"

これらから、下記の式で設定値を計算します。

default-fragment-size-msec = 1536000 / (192000 * 32 * 2) = 125
default-fragments = 3072000 / 1536000 = 2

計算した値を例によって /etc/pulse/daemon.conf に追記します。

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

module-loopbackがハングする!!

自分は module-loopback を使用することがあるのですが、上記の設定をしたところ module-loopback がPulseAudioごと数十秒で落ちるようになりました。詳しい説明は省きますが、これは module-loopbackadjust_time=0 というオプションをつければ解決しました。

結果下記のようなコマンドで module-loopback をロードしています。

% pactl load-module module-loopback \
    source=alsa_input.pci-0000_00_1f.3.analog-stereo \
    adjust_time=0 latency_msec=16

感想

という具合にしてPulseAudioの出力をハイレゾにしてみて、moraで買ったFF14のサントラを聴いてみましたが、自分の耳では設定前との違いがよく分かりません(というか設定変えてデーモン再起動して…ってやってるうちに分かんなくなる)。とはいえ、悪くはなっていないはずなので、問題が出ない限りこのままで行こうと思います。

最近の自宅の仮想環境の話

だいぶ前に FF14をLinuxの仮想環境で動かす話 という記事を書いたのですが、あれからずいぶん時間がたって設定も変えたところがあるので、そのあたりのことを書いてみようと思います。

カーネルコマンドラインオプションの設定

以前の記事でカーネルコマンドラインオプションの設定の話をしました。しかし最近ではIOMMUをパススルーのためにしか使わない場合は、 iommu=pt というオプションも追加した方が良いらしいです。そうすることで、パススルーに関係のないデバイスのパフォーマンスが落ちるのを防ぐことができるそうです。ただし、この設定をしても intel_iommu=on も必要です。

なので、最近では下記のようなカーネルコマンドラインオプションを使用しています(ついでにウォッチドッグも無効化するようにしました)。

threadirqs nowatchdog intel_iommu=on iommu=pt default_hugepagesz=1G hugepagesz=1G hugepages=8

ネットワークが時々フリーズすることへの対処

これまで仮想環境のネットワークが時々フリーズする、という悩みがありました。具体的には、FF14のSSをKVM内のWindowsからネットワークドライブに置こうとすると、NICがフリーズしてしまう、という現象です。

この現象に対処するためいろいろ試していたのですが、ググってもなかなか情報が出て来ず… 試しにホスト側のドライバーでデフォルトのvhostを使わずにqemuを使うようにしてみたところ、今のところフリーズは再現していません(ただしパフォーマンスは落ちるはずです)。

下記のXMLKVM (libvirt)のネットワークインターフェイスに関係する箇所ですが、そのうち <driver .../> が最近追加した設定です。

    <interface type='bridge'>
      <mac address='xx:xx:xx:xx:xx:xx'/>
      <source dev='enp0s31f6' mode='bridge'/>
      <model type='virtio-non-transitional'/>
      <driver name='qemu' queues='6'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0' multifunction='on'/>
    </interface>

【FF14】【ID愛でる会Aegis】オーボンヌ観光

恒例となった愛でる会主催の24人レイド観光、今回はオーボンヌを観光してきました。今回もいつもどおり攻略ではなく観光の記録です。

滝の虹

今回はクリアしない予定だったので、集合SSを最初の滝の場所で撮りました。ここの虹は見える人と見えない人がいるみたいで、どうやったら見えるのかが今回最大の謎でした。自分は観光ツアー中デジョンで戻ったりして全部で3回前を通りましたが、そのうち2回は見えてあとの1回は見えない、という状態でした。

集合SS。これは見えています。 f:id:KesaranPa:20190526023921j:plain

2回目。全然見えません。 f:id:KesaranPa:20190526023936j:plain

/icam <t>でボス撮影

普段の攻略ではできないのですが、ゆっくり観光するときは/icam <t>で戦闘前の敵を撮影することができます。3ボスだけ撮影し忘れましたが、こんな感じです。 f:id:KesaranPa:20190526024000j:plain f:id:KesaranPa:20190526024011j:plain f:id:KesaranPa:20190526024022j:plain

懺悔室でギミック失敗したらどうなるの?

今回の観光では、いくつか事前に募集した実験を観光中にしています。その1つに、2ボスの懺悔室(1PTだけ隔離される場所)でギミック失敗したらどうなるか、というのがありました。SSは撮れていないのですが、雑魚が爆発して大ダメージを受けたあと、隔離されていたPTが死んだまま通常の戦闘フィールドに戻されるみたいです。

雑魚をたくさん湧かせてみよう

2ボス後の雑魚戦で、途中まったく魔法陣を踏まずにいるとどうなるか、という実験もありました。当然大量に雑魚が湧きます。 f:id:KesaranPa:20190526024116j:plain

そしてこの湧いた雑魚が爆発(?)するらしく、元からいたやつの範囲攻撃と合わさって大変なことになりました。なんとか倒せましたが、ヒーラーさんがひどい目に遭ってました。通常の攻略時には絶対にやめましょう。

お前が言うんかい!!

みんながどこでこう言ったのかはご想像にお任せします。 f:id:KesaranPa:20190526024141j:plain

自由時間

3ボスを倒したあとは、自由行動の時間! 普段あまり見られない場所をじっくり観察する時間です。

1ボスの戦闘フィールドから見える、ベンチがたくさん並んでいる場所。行ってみたいけど行けません。 f:id:KesaranPa:20190526024159j:plain

肖像画。これが誰なのかは謎です。 f:id:KesaranPa:20190526024213j:plain

修道院のロボ。ムスタディオさんが置いたもの? f:id:KesaranPa:20190526024244j:plain

書庫。残念ながらここも入れません。 f:id:KesaranPa:20190526024258j:plain

ミュロンドもそうなのですが、所々に置いてあるベンチには椅子としての判定がなく、椅子として座ることができません。 f:id:KesaranPa:20190526024332j:plain

ミュロンドに入った直後の飛び降りる場所。隙間があって、ここに落ちたら大変なことになりそうです… f:id:KesaranPa:20190526024345j:plain

途中に置いてある台車にみんなで入って撮影。これが本当の出荷! f:id:KesaranPa:20190526024401j:plain

今回も時間一杯観光を楽しめました。主催お疲れさまでした。

記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。