🔊

Raspberry Pi で音場補正を試す 補遺:Pi 専用 DSP 基板を使う

2021/03/05に公開

前編 https://zenn.dev/kymok/articles/909df17dd68175
後編 https://zenn.dev/kymok/articles/627e72a0869d52

非推奨のおしらせ

届いてすぐ記事を書いたのが悪かったのですが,動作が著しく不安定です.原因がわかるまで,私からは新規購入はおすすめできません. (2021-03-08)

最後のフィルタ係数の設定について,本稿の設定だとサンプルレート設定が合わないため,そのまま適用するとフィルタの中心周波数がほぼ倍になるという動作をすることがあります.この場合,フィルタの中心周波数を 0.46 (= 44.1/96) 倍してください. (2021-03-08)

具体的な危険について

残念ながら,執筆時点で HiFiBerry 製品はドキュメントの質があまり高くなく,誤った設定が紛れ込むリスクを無視できません.誤った設定は,スピーカーの再生能力いっぱい[1]のノイズなどをいきなり再生することがあります.これにより,以下のような害が生じる可能性があります.

  • スピーカーなどの機器が壊れる.
  • 聴力に回復不可能な障害を負う.

生じた被害について筆者はいっさいの責任を負いません.耳を壊してからでは遅いので,以下の対策を施すのがよいでしょう.

  • 安全のため,設定中は必ずスピーカーの音量を以下の方法で絞ってください.音楽がかすかに聴こえる程度が目安です
    • 本体にボリューム調整のないパワードスピーカーの場合,入力にアッテネータを挿入する.
    • 本体のボリューム調整のあるパワードスピーカーの場合,それを使う.
    • アンプとスピーカーを別にしている場合,アンプの音量を下げる.

前回までとの違い

  • インストール手順・有効にするビルドオプション等が異なります.
  • 前回は補正のためのインパルス応答を REW で計算しましたが,今回は DSP に搭載されているフィルタを使います.

1. はじめに

Raspberry Pi には,音場補正などに使える Raspberry Pi 専用の DSP 基板がサードパーティーから発売されています.今回は,そのうちのひとつ HiFiBerry DAC2 Pro と DSP Add-on Board を音場補正のためにセットアップする手順について書きます.主な注意点は以下です.

  • ドキュメントに頼らず HiFiBerry のリポジトリから設定ファイルを探してくる必要がある
  • Shairport Sync の設定によっては DSP toolkit と相性が悪いことがある
  • 操作を誤るとスピーカーや耳を壊す可能性が高い[2]

セットアップしたての Raspberry Pi です.かわいいですね.

2. DSPのセットアップ

2.1 ハードウェアの準備

今回は金属ケースなので,安価な WLAN アダプタを挿してみました.

  • DAC: HiFiBerry DAC2 Pro
  • DSP: HiFiBerry DSP Add-on Board
  • Raspberry Pi 4 2GB
  • WLAN アダプタ: I-O DATA WN-G300UA

WLAN アダプタに追加のドライバは必要ないので,セットアップ時点からいきなり本体の無線LAN機能を無効化しても問題ありません.

2.2 /boot/config.txt の設定

ここでは,本体無線 LAN とオーディオの無効化,DAC ドライバの読み込み, SPI の有効化を行います.書き込みが終わったら再起動します[3]

 # 探して off に書き換える
 dtparam=audio=off
 
 # 末尾に追加
 dtoverlay=disable-wifi
 dtoverlay=hifiberry-dacplus
 dtparam=spi=on

2.3 hifiberry-dsp のインストール

HiFiBerry から公式にインストールスクリプトが配布されています.公式の手順はこちらです.

bash <(curl https://raw.githubusercontent.com/hifiberry/hifiberry-dsp/master/install-dsptoolkit)

このスクリプトは,おおむね以下のようなことを行います.

  • DSP と通信するコマンド dsptoolkit のインストール
  • dsptoolkit に必要なサービス sigmatcp のインストール
  • SPIの有効化

インストール完了時に mv: failed to preserve ownership for '/boot/config.txt': Operation not permitted というメッセージが表示されますが,無視してかまいません.完了したら,以下のように入力してインストールできているかを確認します.

dsptoolkit

2.4 DSPプロファイルのインストール

DSPプロファイル (XMLファイル) [4]をダウンロードしてインストールします.インストールには数秒かかります.なお,このファイルは公式ドキュメントに記載のないものなので,予告なく削除・変更される可能性があります.デバイスの名前がだいたい同じで,動いているので恐らく正しいのだと思います[5]

curl https://raw.githubusercontent.com/hifiberry/hifiberry-os/master/buildroot/package/dspprofiles/dsp-addon-96-13.xml -o dsp-addon-96-13.xml
dsptoolkit install-profile dsp-addon-96-13.xml

2.5 テスト用音源の再生

speakertest で再生されるノイズは故障かどうか分かりづらいため,テスト用には楽器や声などの有意味音(例:テスト音声集)を使うのがおすすめです.音声を準備したら,以下のコマンドでテスト音声を再生します.

aplay test.wav

3. Shairport Sync のインストール

前回の記事の通りに行うと,再起動後に Shairport Sync がそのままでは動作しなくなります[6].標準の方法に沿って行えば面倒な設定が不要になります.まずは,ドキュメントを参照し, sudo make install までを行ってください.

/etc/shairport-sync.conf は以下を設定します.音量の調節にソフトウェアやDSPのボリュームを使うと小音量時に独特の低音のエコーが聴こえて鬱陶しいので,ハードウェアボリュームを使うように設定します. HiFiBerry DAC2 Pro の場合は,以下のような設定です.

general =
{
    name = "hoge"
};
alsa = {
    mixer_control_name = "Digital";
};
mixer_control_name の設定値の探し方

DSPで設定するフィルタは,ソフトウェアボリュームで音声を絞ったときに独特のエコーが聴こえます.これは独奏楽器の音源が分かりやすいです.これを利用して,後述の IIR フィルタを適用して alsamixer のフェーダーをひとつずつ操作して音量を絞っていきます.エコーが聴こえずに音量を絞れるフェーダーがハードウェアボリュームのものです.

4. 補正の設定

前回の記事 とほぼ同じですが,補正結果の書き出し部分が異なります.今回は個々のフィルタの設定をテキストファイルとして書き出します.

書き出されるテキストファイルの中身

Filter Settings file

Room EQ V5.20
Dated: Mar 3, 2021 01:23:45 AM

Notes:

Equaliser: Generic
All Avg
Filter 1: ON PK Fc 76.30 Hz Gain -9.90 dB Q 4.787
Filter 2: ON PK Fc 115.5 Hz Gain 9.00 dB Q 3.265
Filter 3: ON PK Fc 147.5 Hz Gain -14.00 dB Q 2.675
Filter 4: ON PK Fc 270.0 Hz Gain 4.60 dB Q 7.473
[...]

5. 補正の読み込み

できあがったテキストファイルを読み込みます.音楽を流しながらの補正も可能ですが,スピーカーの音量をアッテネータで抑える等の対策をとってください.また,誤ったコマンドを入力しないよう十分気をつけてください.

dsptoolkit apply-rew-filters filter_settings.txt

補正を取り消すには:

dsptoolkit clear-iir-filters

満足できる設定になったら,以下のようにして DSP に設定を書き込みます.

dsptoolkit store

今回は DSP にフィルタ処理を丸投げしているので CPU 使用率の確認は省略します.お疲れさまでした.

脚注
  1. たとえば,DTM用のスピーカーの場合 100dB SPL を超える音を再生できます ↩︎

  2. 筆者はこのチュートリアルを書くまでに何度か失敗しましたが,音量を絞っていたために被害を免れました ↩︎

  3. SD カードに OS を書き込んだ後,再度マウントすると boot ボリュームが見えるので,この時点で書き換えても結構です ↩︎

  4. Analog Devices の SigmaDSP を使うとオリジナルのプロファイルが作れるようです ↩︎

  5. これを探す過程でプロファイルを片っ端からインストールしてスピーカーを壊しかけました🥺 ↩︎

  6. サービスの内容を書き換えて shairport-sync.service の適切な場所に after=sigmatcp.service を追記し, Shairport Sync が sigmatcp.service の後に起動するように設定します ↩︎

Discussion