LinuxにDolbyクラスの高音質を。

Linux

Linuxが音の趣味に向かない貧乏OSだなんて
誰が決めたんだい?
オープンソースだってやる気になれば、Dolbyクラスのハイレゾ高音質を発揮出来んだぜ!!
今回はPulseAudio/Pipewireドライバの底力をひねり出す方法だZE!!!!!

Pulseaudioをお使いの方はAを、Pipewireをお使いの方はBを読みながら設定を進めてNE!!

A.1.PulseAudioのローカルコンフィグを書き換える。

$ vim ~/.config/pulse/daemon.conf

default-sample-format = float32le
default-sample-rate = 192000
;↑機器が192kHz対応していれば192000。最大対応ビットレートに合わせよう
alternate-sample-rate = 44100
default-sample-channels = 2
default-channel-map = front-left,front-right
default-fragments = 14
default-fragment-size-msec = 125
resample-method = soxr-vhq
high-priority = yes
nice-level = -11
realtime-scheduling = yes
realtime-priority = 9
rlimit-rtprio = 9
daemonize = no
$ pulseaudio -k && pulseaudio --start

A.2.PulseEffectsをインストール からの再起動 →PulseEffectsを起動→すぐ閉じる (ローカルプロファイルだけ作成)

$ sudo apt update && sudo apt install pulseeffects pulseaudio --install-recommends

A.3.下記Gitを落としてきて、インストーラを起動。
ダイアログが開かれるので「1」を選択しておこう

A.4.PulseEffectsをもっかい起動
→”Loudness + Autogain” or “Bass Enhanced + Perfect EQ”を選択推奨

※"Ubuntu22.04"以上でインストーラを叩く際の注意:
install.shの7〜15行目をコメントアウト。
直下がこうなるように追記すること。
でないとエラーでエフェクトファイルがインストール出来ません。

PRESETS_DIRECTORY="$HOME/.config/PulseEffents"

これがPipewire主体となった場合はメチャクチャラク。

B.1.Pipewire + Pipewire-pulseの場合の設定。

$ sudo cp -vRa /usr/share/pipewire/* /etc/pipewire/
$ sudo cp -vRa /usr/share/wireplumber/* /etc/wireplumber
$ sudo vim /etc/pipewire/pipewire.conf
# 下記似たような箇所を差し替える
context.properties = {
    ## Configure properties in the system.
    #library.name.system                   = support/libspa-support
    #context.data-loop.library.name.system = support/libspa-support
    #support.dbus                          = true
    #link.max-buffers                      = 64
    link.max-buffers                       = 16
    #mem.warn-mlock                        = false
    #mem.allow-mlock                       = true
    #mem.mlock-all                         = false
    clock.power-of-two-quantum            = true
    #log.level                             = 2
    cpu.zero.denormals                    = true

    core.daemon = true              # listening for socket connections
    core.name   = pipewire-0        # core name and socket name

    ## Properties for the DSP configuration.
    default.clock.rate          = 192000
    default.clock.allowed-rates = [ 192000, 96000, 48000 ]
    default.clock.quantum       = 1024
    default.clock.min-quantum   = 32
    default.clock.max-quantum   = 8192
    default.clock.quantum-limit = 8192
    default.clock.quantum-floor = 32
    #default.video.width         = 640
    #default.video.height        = 480
    #default.video.rate.num      = 25
    #default.video.rate.denom    = 1
    #
    settings.check-quantum      = false
    settings.check-rate         = false
    #
    # These overrides are only applied when running in a vm.
    vm.overrides = {
        default.clock.min-quantum = 1024
    }

    # keys checked below to disable module loading
    module.x11.bell = true
    # enables autoloading of access module, when disabled an alternative
    # access module needs to be loaded.
    module.access = true
    # enables autoloading of module-jackdbus-detect
    module.jackdbus-detect = true
}

# 一番下のオプション配列に追加
context.exec = [
{ path = "pactl" args = "load-module module-always-sink" }
]
$ sudo vim /etc/pipewire/pipewire-pulse.conf
# 該当するコンフィグの値を差し替える
    #server.dbus-name       = "org.pulseaudio.Server"
    #pulse.min.req          = 128/48000     # 2.7ms
    #pulse.default.req      = 960/48000     # 20 milliseconds
    #pulse.min.frag         = 128/48000     # 2.7ms
    pulse.default.frag     = 192000/48000   # 2 seconds
    pulse.default.tlength  = 192000/48000   # 2 seconds
    #pulse.min.quantum      = 128/48000     # 2.7ms
    #pulse.idle.timeout     = 0             # don't pause after underruns
    pulse.default.format   = F32LE
    pulse.default.position = [ FL FR ]
    # These overrides are only applied when running in a vm.
    vm.overrides = {
        pulse.min.quantum = 1024/48000      # 22ms
    }
$ sudo vim /etc/pipewire/client.conf.d/resample.conf
stream.properties = {
    resample.quality = 14
}
$ sudo vim /etc/pipewire/pipewire.conf.d/20-virtual-pipe-source.conf
context.modules = [
  {   name = libpipewire-module-pipe-tunnel
      args = {
          tunnel.mode = source
          pipe.filename = "/tmp/virtualdevice"
          audio.format = F32LE
          audio.rate = 192000
          audio.channels = 2
          audio.position = [ FL FR ]
          stream.props = {
              node.name = VirtualMic
          }
      }
  }
]

↓※注意:Wireplumberのバージョンの確認をされたし。構成によりコンフィグパスに変更あり。

$ sudo vim /etc/wireplumber/wireplumber.conf.d/alsa-vm.conf
monitor.alsa.rules = [
  # Generic PCI cards on any VM type
  {
    matches = [
      {
        node.name = "~alsa_input.pci.*"
        cpu.vm.name = "~.*"
      }
      {
        node.name = "~alsa_output.pci.*"
        cpu.vm.name = "~.*"
      }
    ]
    actions = {
      update-props = {
        api.alsa.period-size   = 1024
        api.alsa.headroom      = 8192
      }
    }
  }
]
$ systemctl --user --now daemon-reload \
systemctl --user --now restart pipewire.service pipewire-plulse.socket wireplumber.service

B.2.PulseEffectsはいらんので、FlatpakをインストールしておいてNE(´^ω^`)

# ※Ubuntu 22.10以降:APTでインストール可
$ sudo apt install easyeffects

# ※Ubuntu 22.04 LTS以下:Flatpakでのインストール推奨
$ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ sudo flatpak install flathub com.github.wwmm.easyeffects
$ flatpak run com.github.wwmm.easyeffects

※↑起動したら一旦閉じること

$ bash -c "$(curl -fsSL https://raw.githubusercontent.com/JackHack96/PulseEffects-Presets/master/install.sh)"

→1を押下してプリセットをすべてインストール
再度EasyEffectsを起動
→環境設定
→起動時サービス開始:ON + ウィンドウ閉じたらシャットダウン:OFF
→プリセット自動読み込み
→Pipewire→デバイス選択→"Loudness + Autogain" or "Bass Enhanced + Perfect EQ"を選択推奨

B.3.プリセットを覚醒させるには、下記のモジュールを各ディストリからインストールすること。

# ディストリやそのバージョンによっては、名前がかわっていたりライブラリだけあればいいことがあるので、
# 下記モジュール名に「****-dev(devel)」や「lib****-dev(devel)」で検索してみよう!
# libsamplerate libsndfile libbs2b fftw speexdsp nlohmann json tbb

# Ubuntu 22.04 LTS以上だと以下の通り
$ sudo apt --install-recommends install json libsamplerate0-dev libsndfile1-dev libbs2b-dev fftw-dev libspeexdsp-dev nlohmann-json3-dev libtbb-dev

B.4.※ FlatpakでEasyEffectsをインストールした場合:常駐化するためのセッティング

$ vim ~/.var/app/com.github.wwmm.easyeffects/config/glib-2.0/settings/keyfile
# ↓コンフィグを下記の通り変更
enable-autostart=true
shutdown-on-window-close=false

$ flatpak permission-reset com.github.wwmm.easyeffects
→EastEffects起動
→環境設定
→起動時サービス開始:ON + ウィンドウ閉じたらシャットダウン:OFF

コメント

~