/ 雑記帳

rpi-dac そういう事なのかぁ Raspberry as generic i2s master at 384kHz

某掲示板で質問したが検索しているうちに答えの記事を見つけて解決出来た?様に思う。
たぶんベテランの方々の間では即知の問題だったのかなぁ...
事の始めは自分は実験用サブシステム

RaspberryPi4(GentooPlayer Diretta Target)
APU2D4(Diretta Host)
KALI Reclocker基板 
やなさん送信基板
DAC AK4493EQ気楽kit製基板

の組み合わせでI2S出力で使用した時に
DSD64までしか再生出来ない事に加えて自動でPCMに変換されて且つDSD64以外のファイルも
24bit/192kHzで出力されます。
残念ながらDAC基板はPCMしか受け付けませんがAK4493EQなら768KHzまではいけるはずです。
どうも出力が192kHzまでに制限されているような感じです。
この現象はgentooplayerで発見したのですが流石にGentooPlayerのカーネルをコンパイルする勇気も技術もありません笑)
GentooPlayer使用時の場合で某掲示板中udosanさんにアドバイスをいただいて
[1] i-sabre-q2m/k2m and i2s general
[31] Generic-1 I2S (hifiberry-dac)
どちらか?試してみてくださいとの事でした。試して見たのですが
どうしても安定した再生が出来ない...
なので自前でイジっている汎用rt-kernelソースを使ってリンク先の内容を実験してみる事にしました。
[root@alarm ~]# uname -a
Linux alarm 5.16.0-rc3-rt7-v8 #4 SMP PREEMPT_RT Sat Apr 2 22:52:37 JST 2022 aarch64 GNU/Linux

参考リンク:Raspberry as generic i2s master at 384kHz

以下は参考リンク先記事概要
2017年11月、Raspberry Linuxカーネルは、i2sバスの384kHzをサポートするように更新されました。
それ以前は、ストックカーネルは192kHzに制限されていましたが、
汎用i2sマスタードライバーrpi-dacはまだです。
i2sバスでは、Piをマスターまたはスレーブとして使用できます。
Piを汎用i2sマスターとして使用する場合は、rpi-dacドライバーを使用できます。
このドライバのみが、pcm1794aコーデックの使用により192kHzに制限されています。
これは一般的なドライバを混乱させる少し混乱しますが、
pcm1794aコーデックを使用します。そのため、pcm1794のサンプルフォーマットとレートにも制限されています。

rpi-dacドライバーを使った場合は...という事らしいです。
最終的にいたずらも含めてこんな感じにしてみました。
お分かりいただけるでしょうか(笑)
思い付きで32bit分も加えたがこの改修は素晴らしいと思う。
RaspberryPi4 + KALI Reclocker基板 + Archlinux の組み合わせで使っている方は
是非とも挑戦して欲しい。購入して良かったと惚れ直すかも知れない。
自分の環境では参考ページにあるパッチは当たりませんでした。
テキストエディターで開いて該当箇所を手修正後にコンパイルを行いました。

sound/soc/codecs/pcm1794a.c b/sound/soc/codecs/pcm1794a.c

static struct snd_soc_dai_driver pcm1794a_dai = {
.name = "pcm1794a-hifi",
.playback = {
.channels_min = 2,
.channels_max = 2,
.rates = SNDRV_PCM_RATE_8000_384000,
.formats = SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_S24_LE |
SNDRV_PCM_FMTBIT_S32_LE
},

カーネル再構築インストール後に適応されているか?コマンドで確認...
[root@alarm ~]# alsacap
*** Scanning for playback devices ***
Card 0, ID `sndrpirpidac', name `snd_rpi_rpi_dac'
Device 0, ID `RPi-DAC HiFi pcm1794a-codec-0', name `RPi-DAC HiFi pcm1794a-codec-0', 1 subdevices (1 available)
2 channels, sampling rate 8000..384000 Hz
Sample formats: S16_LE, S24_LE, S32_LE
Subdevice 0, name `subdevice #0'

この状態でmpd.confで32bit再生を指定後再生するとS32_LEが使われている様に表示されますが
真偽の程は??です(笑)

[root@alarm ~]# c00
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 4410
buffer_size: 22050

— posted by くま at 01:30 pm   commentComment [2] 

この記事に対するコメント・トラックバック [2件]

Up1. えふ — 2022/04/03@17:41:52

こんにちは。

本記事を読んで、昔似たようなことをしていたのを思い出しました(^^;
目的は、「MCLK」を外部入力させることでしたが。(参考にしたのは下記URL)

https://www.audio-blog.jp/2016/07/28/raspberry-pi-dac-external-clock-and-slave-input/

「rpi-dac」は汎用的な性格のドライバーなので、高望みさせず敢えて「192KHz」程度に収めているというような感じなのでしょうかね。

Owner Comment くま  2022/04/04@07:57:08

コメントありがとうございます。
改修前の状態では
上に載るリクロック基板は32bit出せる仕様なのに
24bitで出力している様に表示されるので気になってました。
なのでS32_LEを付けてコンパイルしました。
表示だけは一応32bitで出ている様に表示される様になりました。
「rpi-dac」は汎用的な性格のドライバーなので
今まで手を入れられていないのだと確かに思います。
ただ KALI Reclocker基板のコントールをするのに
自分がテストした時に一番挙動が合っていると思ったので
もう何年も使っていました。

この記事に対するこれ以上のコメントはありません

<< 2022.4 >>
SMTWTFS
     1 2
345 67 89
10 11 12 13 14 1516
17181920 21 2223
242526272829 30
 
























T: Y: ALL: Online:
ThemePanel
Created in 0.1762 sec.