y2blog » LightMPD-Boticでマルチチャネル再生を試みる

4

16

2019

LightMPD-Boticでマルチチャネル再生を試みる

PCMマルチチャネル再生をLightMPD-Botic上で実現するには


Multi-channel BBB Botic
BBB Botic用Capeの上にアドオンカードの組み合わせでマルチチャネル化する

Digital Audio Testbed System
DACテストベッド上でマルチチャネル再生をテストしている様子

DC Power Supply And IV Converter
テストベッド用低雑音&低出力インピーダンス電源ユニット&お気楽PowerI/V基板(改造版)

DIY Babel Tower
マルチチャネル同時再生テスト中のバベルの塔と化したテストベッド

BeagleBone上のLightMPD-BoticによるダイレクトI2Sネットワーク再生環境が我が家のメインデジタルオーディオプレイヤーなのだが、転職の端境期にちょっとした暇ができたので、BeagleBoneのプロトタイプCapeボードをスタックすることでマルチチャネル化が簡単にできるアドオンカードを作成してみた.


最近はアナログレコードを中心としたオーディオが主体となってしまった(戻ってしまったと言った方が正解だろうか)ので、デジタルオーディオの高音質化に関する関心よりかはデジタルの恩恵を享受できるマルチチャネル再生に興味が移っている.2Lレーベルなどからテスト用のマルチチャネル音源が簡単に入手できる事もあり、今回高音質マルチチャネル再生に挑戦してみたという次第だ.


今回マルチチャネル再生を行うための基本方針として、新たにBeagleBone用の基盤を作成するのではなく、これまでに作成した基盤にちょっとだけ手を加えることによって、簡単にマルチチャネル化を行うことを目指すこととする.ESSのES9016/ES9018シリーズやES9038Proなどのマルチチャネル対応DACを用意する事を考えたが、マルチチャネル化可能な自作系DACボードは殆ど出回っていないので、一から自作するしかなさそうなので、とりあえず今回は既存の2チャンネルDAC基板を複数用意することで対応することにする.


この2chDAC基板を追加して行くことで簡単にマルチチャネル化ができるだろうという見込みの基にアドオン基板の開発を始めたのだが、BeagleBoneのBoticドライバでのI2Sダイレクト再生では一筋縄では行かないことになるとはこの時点では想像すらしていなかった.単純に、

  メイン基板側DAC DAC#0(Front R&L)出力
   ⇒ シリアライザ#0(mcasp0_axp0)が担当

  アドオン基板側DAC DAC#1(Rear R&L)出力
  ⇒ シリアライザ#1(mcasp0_axp1)が担当

  アドオン基板側DAC DAC#2(Front Center & Bass)出力
   ⇒ シリアライザ#2(mcasp0_axp2)が担当

  アドオン基板側DAC DAC#3(PCM ch.#7& #8)出力
 ⇒ シリアライザ#3(mcasp0_axp3)が担当

のような感じのチャネル構成だろうと勝手に思い込んでいた.


この後の”実験君”コーナ=で結果を示すが、実はこの思い込みが実際には全く見当外れであったことが判明することになるのだが...


メイン基板


The Main Board
8回路バッファ(74HC541)とスタック用信号ヘッダピンを実装している

1枚目の基盤はこれまでと同様に、BoticドライバーによるI2S出力化しただけの基盤で前回作成した物とほぼ同じ物だ.このメイン基盤だけでメインのステレオ再生環境(PCM/DSDネイティブ)が得られる.但し、Boticで出力可能な4系統のシリアル信号出力とMCK,LRCK,BCKの合計8つの信号を2枚目のスタック基盤に簡単に渡せるように、ピンヘッダー端子を設けてある.


前回までは、4回路3-stateバッファ(74HC126)でBeagleBone側に入力するMCK信号の制御を行っていたが、今回はスペース節約のため8回路の3-stateバッファ(74HC541)を用いた.回路的にはこれ以外大きな変更点はない.


Boticドライバーでは、TIのSitarraプロセッサに備わっているシリアル信号処理機構である “Macasp” の4系統のシリアライザ出力の組み合わせを Linux起動時の制御ファイル”uEnv.txt” で指定することが可能だ.これまでと同様に、メイン基板のI2S/DSD出力を PCM(I2S出力:PCM-#1, PCM-#2)再生時には、”mcasp0_axr0″ に割り当て、DSD再生時には”mcasp0_axr0″(DSD: L)、”mcasp0_axr1″(DSD: R)とする.



アドオン基板


The Add-on Board
3チャネル目以降はアドオンボード側に実装した
(小さな基板は add-onタイプのLEDインジケータ Clock Mode: 44K1/48K,DSD on, Cape Enabled)


メイン基板の上に重ねるアドオン基板側では、3チャネル目以降のハンドリングを行う.PCM再生(PCM-#3, PCM-#4)を”mcasp0_axr1″ に割り当て、DSD再生時には”mcasp0_axr2″(DSD: #3)、”mcasp0_axr3″(DSD: #4)とし、4回路2チャンネル入力マルチプレクサ(74HC157/257)を用いて、PCM/DSD信号の切り替えを行う.


残りのPCM(I2S出力:PCM-#5, PCM-#6)を”mcasp0_axr2″、PCM(I2S出力:PCM-#7, PCM-#8)を”mcasp0_axr3″とする事で、PCM系は最大8ch、DSD系は最大4chまでの再生が可能だ.PCM ch.#5〜#8 を別なアドオン基板として、更にもう一枚積み重ねても良いが、アドオン基板のスペースに余裕があるので同じ基板上に実装してしまうことにする.


PCM ch.#5〜#8はマルチプレクサによる信号の切り替えは必要ないので、MCK,LRCK,BCK,DATAxのタイミングをなるべく他のチャネルに合わせるために6回路のバッファ(74HC367)を入れてある.このバッファの OE(Low Active)信号を”DSD-on”信号(High Active)で簡単に制御できるので、DSD再生時にPCM ch.#5〜#8 を自動でミュートできるので都合が良い.余計な回路を間に挟むことで、ジッターの増加やタイミングの微妙なずれなどで音質の劣化は避けられないだろうが、今回は実証実験なのであまり気にしないことにする.


6chデジタルアイソレータ(Si8660)のSOP/DIP変換基板のスペースが無駄に広いので、いつものように変換基板の下のスペースを有効活用することにする.今回は74HC367とI2Cのデジタルアイソレータ(TI:ISO1540)を変換基板の真下に実装した.


メインボードの上にアドオンボードを重ねる際に、通常サイズのピンヘッダで連結するとメインボードとアドオンボードのクリアランスが確保できなくないので、今回はロングタイプの連結用ピンヘッダを使用している.ちょっと間抜けな感じにはなるがメンテナンス性などを考えるとこの方が都合が良いだろう.


main and  add-on board
アドオンボード側のピンヘッダはロングタイプを使用してクリアランスを確保

Stacked Boards
スタックするとこんな感じになる


参考回路図


今回のマルチチャネル化で4系統のシリアライザ(“mcasp0〜3”)の信号線からPCM/DSDの切り替えを行う部分の参考回路図を2種類示す.Type Aは6回路バッファ(74HC367)を用いて、PCM: ch. #5〜#8を同時に出力する例で、Type BはCM: ch. #5,#6 と Ch. #7,#8 とをジャンパーピンで切り替える例だ.(1個のマルチチャネルDACチップで処理する場合は、全チャネルの特性が揃うType Bの方が良いかもしれない)


尚、全体的な回路構成は前回の記事「BeagleBone + Botic で簡単DSD Native 再生(その4)」を参考にして欲しい.



PCM-DSD-SW-Type-A
参考回路[6回路バッファ版(Type A)]

PCM-DSD-SW-Type-B
参考回路[4回路2入力マルチプレクサ版(Type B)]

BBB P9 Connector for Botic 7
BeagleBone P9コネクター Botic 7 Driver用入出力ピン配置図

実験君


マルチチャネル拡張アドオン基板が完成したところで早速音だしテストをしてみたいところだが、先ずはPCM形式/DSD形式のマルチチャネルオーディオデータを入手しておくことにする.この手の音源データを手に入れるにはインターネット上に転がっている物を見つけるのが手っ取り早いだろう.


音楽系の音源データであれば、ノルウェイの2Lレーベルの音源サンプルダウンロードサイト “HiRes Download – test bench” が一番だろう.今回は PCM5.1ch 96KHz/24bit 形式の音源とDSD5.1ch DSD64版を入手した.


Album
POLARITY — an acoustic jazz project (2L-145)

[ Artist: Hoff Ensemble, Title: “Innocence” (5m:07s), Album: “POLARITY — an acoustic jazz project” ]


上記のアルバム(”アルバム”という用語は最近では殆ど死語かも...)は、日本の “e-ONKYO Musicサイト”からもPOLARITY – an acoustic jazz project (ダウンロード購入)が可能だ.


テスト音源として音楽データだけでは、チャネル構成が正しく再現されているかどうか良く分からないので、チャネルのチェック用として”AAC Audio Playback Tests“サイトから下記の音源データを入手しておくことにした.


HTML5 AAC Audio Playback Tests – Multichannel

 WAVE形式ファイル: https://www2.iis.fraunhofer.de/AAC/ChID-BLITS-EBU-Narration441-16b.wav

このテスト音源データには人間のナレーション入りで再生しているチャネルの情報がガイドされるので、チャネル構成が正しく再現されているかどうか確実に確かめることが可能だ.


マルチチャネル音源データのファイル形式としてきちんと規格化された物が存在するかどうかは現時点では調査不足なので、状況が分かり次第情報を追記する予定だ.


先ずはダウンロードしたマルチチャネル音源データを、Cubaseなどのオーディオ系の編集ソフトで中身を覗いてみることにする.



2L145 MultiTrack Wave Forms
“Innocence” : Polarity(2L145) のマルチチャネル波形

Multi-ch TestSound
WAVE形式音源ファイル: “ChID-BLITS-EBU-Narration441-16b.wav” のマルチチャネル波形


上記の音源の波形データ情報からマルチチャネルトラックのチャネル構成は、

  Track #1: FL(Front Left)
  Track #2: FR(Front Right)
  Track #3: FC(Front Center)
  Track #4: Bass Track
  Track #5: RL(Rear Left : Surround Left)
  Track #6: RR(Rear Right : Surround Right)

であることが読み取れる.DVDやブルーレイディスクなどの5.1ch形式の音源はこの順番が業界標準(?)のようだ.


音出しテストをしてみたら...


手元にあったまだケースに実装していないDAC基板(AK4497,AK4493,ES9018K2M)などを、メイン基板、アドオン基板につないで音出しをしてみた.


シリアライザーの設定を先ずは、

 snd_soc_botic.serconfig=I---
としてテストしてみる.

 ・通常の2ch PCMオーディオ音源データの再生
   ⇒ メイン基板側DAC#1から2ch STEREOで音が出ることを確認(正常な再生)
     DAC#2,#3,#4には出力されない

 ・5.1ch PCMオーディオ音源データの再生
   ⇒ 全てのチャネルがメイン基板側DAC#1のL&Rにモノラル出力される(但し、音量はかなり低め)


次に、シリアライザーの設定を、

 snd_soc_botic.serconfig=-I--
としてテストしてみる.

 ・通常の2ch PCMオーディオ音源データの再生
   ⇒ アドオン基板側DAC#2から2ch STEREOで音が出ることを確認(正常な再生)

 ・5.1ch PCMオーディオ音源データの再生
   ⇒ 全てのチャネルがアドオン基板側DAC#2のL&Rにモノラル出力される(但し、音量はかなり低め)


通常の2ch PCMオーディオ音源データの再生に関しては予想通りの結果となったが、5.1ch音源データに関しては不可解な挙動だ.FL & FL チャネルだけ再生してくれても良さそうなものだが、何故か音量低めのモノラル再生となってしまう.勿論、

 "--I-", "---I" 
でも同じ挙動だ.


それでは、2系統のDACを指定するとどうなるかを試してみる.

  snd_soc_botic.serconfig=II--

 ・通常の2ch PCMオーディオ音源データの再生
   ⇒ メイン基板側DAC#1から2ch STEREOで音が出ることを確認(正常な再生)
     DAC#2,#3,#4には出力されない

 ・5.1ch PCMオーディオ音源データの再生
   ⇒ 全てのチャネルがメイン基板側DAC#1およびアドオン基板側DAC#2のL&Rにモノラル出力される(但し、音量はかなり低め)


同じく3系統のDACを指定するとどうなるかを試してみる.

 snd_soc_botic.serconfig=III- 

 ・通常の2ch PCMオーディオ音源データの再生
   ⇒ メイン基板側DAC#1から2ch STEREOで音が出ることを確認(正常な再生)
     DAC#2,#3,#4には出力されない

 ・5.1ch PCMオーディオ音源データの再生
   ⇒  FLチャネル: DAC#1 – L
      FRチャネル: DAC#2 – L
      FCチャネル: DAC#3 – L
      Bassチャネル: DAC#1 – R
      RLチャネル: DAC#2 – R
      RRチャネル: DAC#3 – R


最後に、4系統のDACを指定するとどうなるかを試してみる.

  snd_soc_botic.serconfig=IIII

 ・通常の2ch PCMオーディオ音源データの再生
   ⇒ メイン基板側DAC#1から2ch STEREOで音が出ることを確認(正常な再生)
     DAC#2,#3,#4には出力されない

 ・5.1ch PCMオーディオ音源データの再生
   ⇒  FLチャネル: DAC#1 – L
      FRチャネル: DAC#2 – L
      FCチャネル: DAC#3 – L
      Bassチャネル: DAC#1 – R
      RLチャネル: DAC#2 – R
      RRチャネル: DAC#3 – R


“One more thing”という事で、

 snd_soc_botic.serconfig=I-II

 ・通常の2ch PCMオーディオ音源データの再生
   ⇒ メイン基板側DAC#1から2ch STEREOで音が出ることを確認(正常な再生)
     DAC#2,#3,#4には出力されない

 ・5.1ch PCMオーディオ音源データの再生
   ⇒  FLチャネル: DAC#1 – L
      FRチャネル: DAC#2 – L
      FCチャネル: DAC#4 – L
      Bassチャネル: DAC#1 – R
      RLチャネル: DAC#2 – R
      RRチャネル: DAC#4 – R


上記の結果をまとめてみる.

 ・通常の2ch PCMオーディオ音源データの再生 
   ⇒ アクティブに指定されたシリアライザの一番若い番号に対してI2S信号を送出する.

 ・5.1ch マルチPCM音源データの再生
マルチPCM音源データのチャネル数(6ch)に対して、アクティブに指定されたシリアライザの数が
  少ない(3未満)場合:

   ⇒ アクティブに指定されたシリアライザの全てに対して6chを全て合成したモノラルデータとして送出する.

マルチPCM音源データのチャネル数(6ch)に対して、アクティブに指定されたシリアライザの数が
  同数かそれ以上の場合:

  ⇒ アクティブに指定されたシリアライザのうち若い方の3つの番号のシリアライザに送出する.
   この場合の音源データのチャネル番号とシリアライザの組み合わせは次のようになる.
   便宜上アクティブなシリアライザの若い方から順に、 #A, #B, #C とする.

  PCM ch. #1 (FL) ⇒ Serializer #A (I2S : Left channel)
  PCM ch. #2 (FR) ⇒ Serializer #B (I2S : Left channel)
  PCM ch. #3 (FC) ⇒ Serializer #C (I2S : Left channel)
  PCM ch. #4 (Bass) ⇒ Serializer #A (I2S : Right channel)
  PCM ch. #5 (RL) ⇒ Serializer #B (I2S : Right channel)
  PCM ch. #6 (RR) ⇒ Serializer #C (I2S : Right channel)

… という訳で、5.1chマルチチャネルPCM音源のBoticドライバ経由での再生は完全に期待を裏切る結果となってしまった.無念!!!




解決策を探る


ESSのES9038PROのような8chマルチチャネルDACであれば、コントロールレジスタを書き換えてDACチャネルのアサインを自由に変更することが可能だが、2ch DACによる複数の組み合わせではそんな器用な事は実現不可能だ.やれることはアナログ出力チャネルのチャネルマッピング変更くらいしかない.5.1ch再生専用機であればアナログ的に信号を再構成する事は簡単だが、これでは通常のStereo再生ができなくなってしまう.


3系統のシリアライザから出力される3種類のI2S信号をハードウェアロジック的に弄ってチャネルアサインを書き換えたI2S信号を吐き出す事も不可能では無いが、あまりにも大掛かりな仕組みが必要になり現実的ではないだろう.うーん困った...


まあ一番現実的な方法は、BoticドライバとTIのMcASP関連のライブラリコードのソースコードを調べて、シリアライザからのI2S信号のチャネル構成を変更する事だろう.幸いなことに、Boticドライバの作者のMieroさんはBoticドライバ関連のソースコードをGiHub上で公開しているので、それを参考に自分専用の Boticドライバもどきを作成することにしよう.


Boticドライバもどきの作成が上手く行ったら、ESSのES9038PRO用のマルチチャネル版BoticドライバやDACマスタモード再生に対応した専用BeagleBoardケープ基板も作成して見ようと思う.Boticドライバ自体は元々ES9018を前提に作られていたようなので、ES9018用のコードの残骸(?)がソースコードリポジトリに置かれている.このコードを参考にすると、ES9038PRO用のドライバを比較的簡単に作れるかもしれない.


この計画はとても時間が掛かりそうなので今回はここまでという事で.上手く行ったら内容をそのうち公開する事にしよう.次の連休中に自宅の引っ越しを控えているので、いつになったら計画に着手できるのか全く不明だけどね...


  ・“BeagleBone Black with I2S, DSD and SPDIF interface”
  ・Botic Latest Driver Source Code
  ・Sitara Linux Audio DAC Example


DIYINHK XMOS Multi-channel USB to I2S/DSD


DIYINHKのXMOSチップを使用した一連のUSBインタフェースの中から、マルチチャネル出力に対応した “XMOS Multichannel high-quality USB to/from I2S/DSD SPDIF PCB” を入手した.ファームウェアは 192KHz x 8 ch版を選択した.


先ずは記念写真ということで.詳細は後日に.


DIYINHK XMOS Multi USB Interface Front Side
XMOSチップやクロックOSC関係の配置はこんな感じ(XMOS:24.0MHz, DAC 22.5792MHz/24.5760MHz)

DIYINHK XMOS Multi USB Interface  Back Side
基板のシルク印刷された情報だけが頼り

I2S信号の出力ピンの割り当ては、ch#1,#2 ⇒ “DATA”、ch#3,4 ⇒ “DO2″、ch#5,6 ⇒ “DO3″、ch#7,8 ⇒ “DO4″だろうか?.ESSのES9016を使ったDIYINHKのマルチチャネルDAC基板 “8 Channels 384kHz 32bit ES9016 PCM DXD DSD Audio DAC” のレイアウト写真からも恐らくこの組み合わせだろう.



DIYINHK XMOS Multi-channel USBインタフェースのチャネル構成


DIYINHK XMOS Multi-channel USBインタフェースがMacなどのホストコンピュータからどのように認識されているのか確かめてみた.Macの場合、”Utilities”フォルダの中にある “Audio MIDI Setup.app” で確認することが可能だ.



Audio MIDI Setup
8ch 192KHz/24bit の出力インタフェースとして認識されている

Audio MIDI Channel Setup
自分で出力チャネルを自由にアサイン可能だ

Macでの高品位音楽再生アプリケーションとして最もポピュラーな “Audirvana” でこのインタフェースがどのように見えているのか確認してみる.Audirvanaの最新版であるV3.5では出力先のセレクターがメイン画面下部に配置され、出力先の切り替えが簡単にできるようになった.



Audirvana V3.5 User Interface
Audirvana 3.5ではユーザインタフェースが大きく変更されている

DIYINHK USB DDI on Audirvana35 Audirvana 3.5でUSBインタフェースの情報を確認

DIYINHKの “XMOS Multi-channel USB to I2S/DSD” インタフェースに関しては、マルチチャネルの扱いはオーソドックスなのでチャネルの構成で苦労することはなさそうだ.参考までに、Audirvaneの “Debug Info” 情報を載せておく.



=================== AUDIO DEVICE ========================

CoreAudio audio path, buffer I/O frame size: 512
Local Audio Engine:
Preferred device: DIYINHK USB Audio 2.0	Model UID:DIYINHK USB Audio 2.0:20B1:2009	UID:AppleUSBAudioEngine:DIYINHK:DIYINHK USB Audio 2.0:14230000:1,2

Active Sample Rate: 192kHz
Hog Mode is off

Selected device:
Local audio device
ID 0x3d DIYINHK USB Audio 2.0	Manufacturer:DIYINHK
Model UID:DIYINHK USB Audio 2.0:20B1:2009	UID:AppleUSBAudioEngine:DIYINHK:DIYINHK USB Audio 2.0:14230000:1,2

11 available sample rates up to 192000Hz
8000
11025
12000
16000
32000
44100
48000
88200
96000
176400
192000

Audio buffer frame size : 58 to 4096 frames
Current I/O buffer frame size : 512
Physical (analog) volume control: Yes
Virtual (digital) volume control: Yes
Auto-detect MQA devices: No
Not a MQA device, user set to not MQA
DSD capability: DSD via PCM 1.1
Preferred stereo channels L:1 R:2
Multichannel: 8 channels
Channel bitmap: Ox3f, layout:
	Channel 0 mapped to 0
	Channel 1 mapped to 1
	Channel 2 mapped to 2
	Channel 3 mapped to 3
	Channel 4 mapped to 4
	Channel 5 mapped to 5
	Channel 6 unused
	Channel 7 unused
Number of channels: 8
Use as stereo device only: No
Simple stereo device: No

1 output streams:
Number of active channels: 8, in 1 stream(s)
	Channel #0 :Stream 0 channel 0
	Channel #1 :Stream 0 channel 1
	Channel #2 :Stream 0 channel 2
	Channel #3 :Stream 0 channel 3
	Channel #4 :Stream 0 channel 4
	Channel #5 :Stream 0 channel 5
	Channel #6 :Stream 0 channel 6
	Channel #7 :Stream 0 channel 7
 ...


【蛇足】DIYINHKのXMOS USBインタフェースのデジタル入力機能?


マルチチャネル XMOS USBインタフェースの写真のシルク印刷された基板の情報から、8chのデジタル出力だけではなくどうやら8chのデジタルインプットも可能な作りになっているようだ.DIYINHKのファームウェアがこの機能を実装しているかどうかは別として、”RSTADC”ピン、”DIO1″、”DIO2″、”DIO3″、”DIO4″ の4本の Digital IO 端子が設けられている.


多分この4本の入出力ピンはADCが出力する4組のデジタルデータ信号をUSBインタフェース側へ送出するためのものだろう.Macの”Audio MIDI Setup.app” からは8chの入力デバイスとしても認識されている.



Multi-Channel Input Device
8chの入力デバイスとしても認識されている


XMOS社の”xCORE-200 Explorer Kit” のページに載っている様々な情報を眺めていると、XMOSのxCORE-200シリーズはオーディオアプリケーション開発の強力な助っ人になりそうだ.オーディオ関連の様々なライブラリや開発ツールもそれっているようなので、XMOSのソリューションを色々探ってみようと思う.


今度、”xcore200-explorer-kit” を入手して色々試してみようと思う.

Local Search

Calendar

August 2019
S M T W T F S
« Jun    
 123
45678910
11121314151617
18192021222324
25262728293031
  • Blogroll

  • Meta