🔊

Raspberry Pi で音場補正を試す 前編:概要と準備

8 min read

後編(測定と補正結果): https://zenn.dev/kymok/articles/627e72a0869d52
HiFiBerry DSP編:https://zenn.dev/kymok/articles/790b66454b765d

1. はじめに

これは何

オーディオの音質は,スピーカーやアンプなどの他にも,部屋の形状や吸音性などにも影響を受けます.この部屋が音質に与える影響を測定と信号処理の力で補正しよう[1]というのが,本稿の目的です. Raspberry Pi と DAC で AirPlay サーバをたてている場合,1万円ほどの測定用マイクを追加すると音場補正を簡単に試してみることができます.

新しく DAC を購入する場合は,音場補正を念頭において開発されたものを買ったほうがよいので,以下の DAC の選び方を読んでください.その場合,方法がきちんと整備されているので本稿を読む必要はあまりありませんが,測定や補正の様子を把握するくらいには役立つかもしれません.

DAC の選び方

DACが既にある場合:そのまま使えます.本稿で解説します.

DACを新しく買う場合:Raspberry Pi から簡単に使えるのは調べたかぎり以下の2製品です.これらは DSP で補正処理を行うため,本体側の負荷を減らすことができます.DAC2 Pro と DSP Add-On Board の場合は補遺 https://zenn.dev/kymok/articles/790b66454b765d を参照してください.

なお,これらの DAC を使う場合でも DSP を使わずに本稿の手順に従って補正をかけることができますが,利点は秒単位の長いインパルス応答を使える程度なので,素直に DSP を利用したほうが良いでしょう.

オーディオ工作では,手順を間違える,機械が壊れる,またはバグなどでスピーカーから突然大音量が再生されるなどの危険がありますので,注意して進めてください.万が一オーディオ機器が壊れるなどした場合でも,筆者は責任を負いません.

何が起こっているのか

スピーカーから音を再生するとき,耳に届く音はスピーカーや部屋の特性[2]の影響を受けています.「再生したはずの音」と「測定された音」を比較することで,これらをまとめて推定することができます.あとはそれを逆算して補正してやれば,音源に忠実な音が耳に届くはずです.補正処理は Raspberry Pi 内部で行うので,配線を繋ぎかえたりツマミをいじったりする必要はありません.

想定環境

  • Raspberry Pi (Raspberry Pi OS Lite) と任意の DAC[3]
  • Airplay (Shairpoint Sync)[4]
  • ハイレゾとかビットパーフェクトとか言わないユーザ[5]
  • 聴取位置・スピーカーの位置がほぼ固定された環境.たとえば作業用のデスクなど.
  • Room Equalisation Wizard が動作する Mac

必ず Room Equalisation Wizard (無償)をインストールし,動作確認を済ませてください. Intel Mac ならおそらく動作するはずですが,念のためマイクなしで後編の手順を再現してみて動作するかを確認するのがおすすめです.

2. ハードウェアの準備


DAC と Raspberry Pi Zero の様子.インシュロックでスピーカースタンドに括りつけてある

測定用マイク

本稿では miniDSP UMIK-1 を使用します[6].本家から買うと1万円程度で,私の場合は香港から3日程度で届きました.届いたら,キャリブレーションファイルを忘れずにダウンロードしてください.

キャリブレーションファイルの中身(抜粋)

中身は周波数ごとの感度一覧で,ただのテキストファイルです.シリアル番号,周波数ごとの感度などが羅列されています.

"Sens Factor =3.9443dB, AGain =18dB, SERNO: XXXXXXX"
10.054	-3.1347
10.179	-2.9856
[...]
437.648	-0.2670
443.096	-0.2634
448.612	-0.2595
[...]

その他

  • 測定用PC:AirPlay 経由で測定する場合は Mac を準備する.配線を繋ぎ替える手間を惜しまなければ適当なパソコンでよい(本稿では繋ぎ替えは解説しない).
  • 再生機:Raspberry Pi (本稿では Zero WH で動作を確認).
  • DAC:適当な DAC(本稿では Allo MiniBoss を使用)
  • スピーカーとアンプ:適当なものを選ぶ(アンプ内蔵スピーカーが便利.本稿では Genelec 1029A を使用)
  • マイクスタンド:付属のミニ三脚を椅子の背にガムテープなどで固定してもよいが,どうせ複数回測定するのであったほうが何かと便利.UNC 3/8 (大ねじ)対応のカメラ三脚でもよい.
音響機器の設置について

電源の入れ方:音響機器は,スピーカーから遠い側から順に電源を入れていきます.また,電源投入時・接続時は音量を最小にしておくと安全です.

スピーカーの置き方:部屋が音に与える影響を左右均等にすると補正に便利なため,なるべく部屋全体に対して左右対称にします(左右があまりにアンバランスな場合は左右別々に補正することもできます).とはいえ,スピーカー中心の生活をしない限りは,たとえば超初心者のための「スピーカーの置き方」に書いてあるようなことに多少気を遣う程度でよいでしょう.

3. Raspberry Pi の準備

OS のインストール

略.本稿では Raspberry OS Lite を使いました.

DAC の接続

DACのドキュメントを参照してください.メジャーなものは大体 /boot/config.txtdtoverlay を1行追加するだけです.

Allo MiniBoss の例

たとえば,本稿で使用した Allo MiniBoss の場合は /boot/config.txt に以下を追記します.

dtoverlay=allo-boss-dac-pcm512x-audio

補正ファイルのダウンロード

Raspberry Pi にテストのための補正ファイルをダウンロードします.適当なディレクトリで以下を行ってください.以降は /home/USERNAME/ でこれを実行したものとして進めます.

git clone --depth 1 https://github.com/kymok/test_impulse_responses
mkdir -p impulse_responses
cp test_impulse_responses/test_ir/work/IR_delay_effect_44.wav ./impulse_responses/
cp test_impulse_responses/test_ir/work/IR_unit_44.wav ./impulse_responses/
rm -rf test_impulse_responses/

Shairport Sync のインストール

Raspberry Pi OS Lite に Shairport Sync をビルドしてインストールします. Raspberry Pi Zero でもそこまで時間はかからず,せいぜい数分で済みます.音場補正とその設定に必要な機能を有効化するため,公式ドキュメントの手順を少し変更する必要があります.

準備

まず,Simple Installation InstructionsBuild and Install 部分の前までを完了してください.

必要なパッケージのインストール

必要なパッケージをインストールします.libsndfile1-devlibglib2.0-dev が追加分です.

apt-get install build-essential git xmltoman autoconf automake \
libtool libpopt-dev libconfig-dev libasound2-dev avahi-daemon \
libavahi-client-dev libssl-dev libsoxr-dev \
libsndfile1-dev libglib2.0-dev

ビルドとインストール

ビルドしてインストールします../configure の引数 --with-convolution --with-dbus-interface が追加分です.

$ git clone https://github.com/mikebrady/shairport-sync.git
$ cd shairport-sync
$ autoreconf -fi
$ ./configure --sysconfdir=/etc --with-alsa --with-soxr --with-avahi --with-ssl=openssl --with-systemd --with-convolution --with-dbus-interface
$ make
$ sudo make install

必要な機能を有効化するため, /etc/shairport-sync.conf に以下の設定を追加します.

general =
{
  name = "miniboss";
  volume_range_hardware_priority = "yes";
  [...]
};
alsa =
{
  disable_standby_mode = "always";
  output_rate = 44100;
  [...]
};
dsp =
{
  convolution = "yes";
  convolution_ir_file = "/home/USERNAME/impulse_responses/IR_unit_44.wav";
  convolution_gain = -10.0;
  convolution_max_length = 44100;
}

サービスの有効化

systemctl enable shairport-sync
systemctl start shairport-sync

4. インストールの確認

AirPlay 対応の確認

手近な Apple 製品から新しい AirPlay デバイスが見えたら成功です.音量を最小から少しずつ上げながら音楽を再生してみましょう.

スピーカーが壊れる可能性があるので,音を出す前にスピーカー/アンプの音量も最小にしておきましょう.最初は恐る恐るボリュームを上げるくらいでちょうどよいです.

補正機能の確認(DSPを利用しない場合)

Shairport Sync にさきほどダウンロードした補正ファイル[7]を読み込ませます.本稿でコンパイルした Shairport Sync は音楽を再生中に D-Bus 経由で設定を変更できるようになっています.他のコマンドの例は Shairpot Sync の Github にあります.

まず,補正機能が有効になっているか確認します.trueが戻ってきたらOKです.

$ dbus-send --print-reply --system --dest=org.gnome.ShairportSync /org/gnome/ShairportSync org.freedesktop.DBus.Properties.Get string:org.gnome.ShairportSync string:Convolution
method return time=1614224073.834660 sender=:1.188 -> destination=:1.189 serial=17 reply_serial=2
   variant       boolean true

次に,現在セットされているインパルス応答のファイル名を確認します.

$ dbus-send --print-reply --system --dest=org.gnome.ShairportSync /org/gnome/ShairportSync org.freedesktop.DBus.Properties.Get string:org.gnome.ShairportSync string:ConvolutionImpulseResponseFile
method return time=1614224723.672836 sender=:1.188 -> destination=:1.190 serial=24 reply_serial=2
   variant       string "/home/USERNAME/impulse_responses/IR_unit_44.wav"

テスト用のインパルス応答をセットします.洞窟に響くような音になれば成功です.

dbus-send --print-reply --system --dest=org.gnome.ShairportSync /org/gnome/ShairportSync org.freedesktop.DBus.Properties.Set string:org.gnome.ShairportSync string:ConvolutionImpulseResponseFile variant:string:"/home/USERNAME/impulse_responses/IR_delay_effect_44.wav"

元に戻しておきます.

dbus-send --print-reply --system --dest=org.gnome.ShairportSync /org/gnome/ShairportSync org.freedesktop.DBus.Properties.Set string:org.gnome.ShairportSync string:ConvolutionImpulseResponseFile variant:string:"/home/USERNAME/impulse_responses/IR_unit_44.wav"

おわりに

本稿では,音場補正の概要と Raspberry Pi の準備をざっくりと説明しました.長くなったので,測定と補正結果は次の記事に譲ります.

後編 → https://zenn.dev/kymok/articles/627e72a0869d52

脚注
  1. 厳密には,部屋とスピーカーを一体とみて,それらの影響を一括してある聴取位置において補正します ↩︎

  2. たとえば壁での反射,吸音,定在波など ↩︎

  3. 本体のオーディオジャックでもなんとかならないことはないですが,音質的にはあまりおすすめしません ↩︎

  4. Shairport Sync 以外でも,インパルス応答の畳み込み (convolution) ができれば同じことが可能ですが,ここでは解説しません ↩︎

  5. こういうユーザの場合,予算が潤沢にあるはずなので高度な処理が簡単にできる商用のソフトを買ったほうが幸せになれると思います. ↩︎

  6. 既にアナログの測定用マイクがある場合,それらを使うこともできますが,やや面倒です.本稿では解説しないので,詳しくは REW のドキュメントを参照してください ↩︎

  7. 中身はインパルス応答の wav です.再生すると一瞬プチッという音が聴こえます.ファイルのド頭に入っているので,ファイルの先頭をごく短時間フェードするような処理の入っている再生ソフトだと正常に再生されないことがあります. ↩︎

Discussion

ログインするとコメントできます