Raspberry Piで
ハイレゾ音源を鳴らそう
みやはら とおる
@tmiyahar
そもそもの動機
• いい音で聴きたいな〜と思って少し前にUSB
DAC「iFi nano iDSD」を買った
2
そしてヘッドフォン買い替え
• iPhone用インナーイヤーヘッドフォンをnano
iDSDに繋いだら左側の音が出ない?
– 少し強く押し込むと音は出る
• マイク、コントロール用の4極プラグと相性が
悪いらしい
• いいや、ヘッドフォン買い替えちゃえ!
3
SONY XBA-300購入
すごくいいけど、もう少し音に迫力が欲しいなぁ・・
4
SONY MDR-1A購入
5
バランス接続したくなり…
PHA-3購入!
6
7
まさに
オーディオ沼…
nano iDSDを再活用したいな〜
• オフィス環境はPHA-3の一択で固定された
• 自宅で使っていたけど、いまいち使いにくい
• ネットワークオーディオ化してリビングのス
ピーカーで聴きたい
そうだ、ラズパイでハイレゾだ!
8
ハイレゾとは
1. 録音フォーマット:FLAC or WAVの
96kHz/24bit以上が可能であること
2. 入出力インターフェイス:96kHz/24bit以上が
可能であること
3. ファイル再生:FLAC/WAVの96kHz/24bitに対
応可能であること(自己録再機はFLAC、また
はWAVのどちらかのみで可とする)
4. 信号処理:96kHz/24bit以上の信号処理性
能が可能であること
5. デジタル・アナログ変換:96kHz/24bit以上が
可能であること
6. 生産若しくは販売責任において聴感評価が
確実に行なわれていること。各社の評価基
準に基づき、聴感評価を行ない、ハイレゾ
に相応しい商品と最終判断されていること
9
ラズパイでハイレゾするには
• 「Volumio」というオーディオプレイヤーソフト
がラズパイ用イメージで配布されている
– 内部的にはRaspbian+MPD+独自Webアプリ
• MPD:Music Player Daemon
• クライアントサーバー型でクライアント多数
よし、試すぞ!
10
試してみた
• Raspberry Pi 3 モデルBを購入!
– Amazonで6980円
– 本体(element14版)+透明ケース+ヒートシンク
– ケースはRaspberry Pi 2用に買った木製ケースと
交換(干渉する部分はバシバシっとカット!)
• microSDカードにVolumio 2 RC1をイメージ書き
込み
– RasPi 3でVolumio 1.x系は動作しません!
11
Volumio 2の感想
• FLAC(96kHz/24bit)、WAV(96kHz/32bit)も問
題なく再生できた
• WebUIはまぁまぁ使いやすい
• /var/lib/mpd/musicに対するSMBファイル共
有が作られておりファイルコピーしやすい
• USBメモリを挿すだけでその中の音楽ファイル
を再生できる
しかし大きな課題も…
12
Volumio 2でDSDが再生できない
• 正確には「再生できるがPCM変換される」
– CPU負荷が高くてプツプツ切れる
• Volumio 2からDoP(DSD over PCM)のOn/Off
設定が無くなった
• ネットで調べてみると再生できている人もいる
– そもそもRC版なので報告例が少なすぎて・・
よし、切り分けだ!
13
DSD(Direct Stream Digital)とは
• ΔΣ変調を利用したサンプリング
方式
• 1bitで表す
• DSD64(2.8MHz)、DSD128
(5.6MHz)、DSD256(11.2MHz)
など
– 数字はCDの何倍、という意味
• DSD再生に対応したオーディオ
インターフェースが必要
14
DoPによるDSD再生方式
• DSDデータをDACに如何に送り込むか?
• ネイティブDSD再生サポートしたDACは少ない
• PCMのフリをして送り込むDoP(DSD Audio
over PCM Frames)が主流
PCM再生の24bitのうち、先頭8bitをマーカー、後ろ16ビットをDSDデータとして扱う
15
行った切り分け
A. Raspberry Pi 2でVolumio 1.55を動かしてみる
B. 自分でMPDを入れてみる
– RaspbianをmicroSDカードにイメージ書き込み
– $ sudo apt-get install mpd mpc
– /etc/mpd.confでHW設定変更とdop "yes"を設定
どっちもDSD鳴るじゃん!?
でも、実際には試行錯誤が…
16
DoPで必要なデータ転送レート
DSD種別 DSD DoP
DSD64 2.8224MHz/1bit 176.4kHz/16bit
DSD128 5.6448MHz/1bit
6.1440MHz/1bit
352.8kHz/16bit
384kHz/16bit?
DSD256 11.2896MHz/1bit
14.1120MHz/1bit
705.6KHz/16bit
768kHz/16bit?
DSD512 22.5792MHz/1bit 1,411.2KHz/16bit
データ転送量の計算例
(2,822.4kHz×1bit)÷16bit=176.4kHz
※実際には24bit転送
17
DSD128再生状況の確認
$ cat
/proc/asound/card1/pcm0p/sub0/hw_params
A. 正常にDoPで再生できている場合
– access: RW_INTERLEAVED
– format: S32_LE
– subformat: STD
– channels: 2
– rate: 352800 (352800/1) ←352.8kHzでDACに送信
B. PCM変換されている場合
– rate: 384000 (384000/1) ←DACの仕様の最大値18
DSD64、DSD256再生状況の確認
$ cat /proc/asound/card1/pcm0p/sub0/hw_params
• DSD64
– rate: 176400 (176400/1) ←176.4kHzでDACに送信
• DSD256
– rate: 705600 (705600/1) ←705.6kHzでDACに送信
– 1回目再生した時に
19
まとめ
• DSDを使わないなら、普通に使う分には
Volumio 2で問題なし
– 早く正式版が出るといいね
• マニアックにやるなら、自分でゴリゴリとMPD
を入れてクライアント入れてやるべし
– 色んなクライアントがあります
20

Raspberry Piでハイレゾ音源を鳴らそう