/ 雑記帳

[ カテゴリー » Raspberry Pi4 Model B ]

RaspberryPi3 復活させた...

尖ったOS(笑)ばかり追求していたがたまには普通路線という事で
打ち捨てられた?RaspberryPi3があったので
(以前はsmpdの旧バージョンで運用していたが音源ソースDirのマウントが面倒になって...)
普通のRaspberryPiOSをインストール
mpd upmpdcli をインストールして音楽再生環境を作った。
だがしかし時代は古いものには厳しく特にupmpdcliのインストールは面倒だった!
以前はppaのレポジトリを追加してaptコマンドでインストール可能だったハズ^^;
今回はダメ!?だった。ここで諦めてmpd単体でも音出しは可能だが(笑)
ちょっと粘ったら...半徹夜状態になってしまった(笑)
重要なlib類はほとんどaptではインストール不可でソースをdownloadして来て
ビルドするという もう何だかなぁ
libupnpp-0.22.4 libnpupnp-5.0.1 upmpdcli-1.6.3 等
で!依存関係を無事クリアー!エラーも特に出ない状態でインストール完了したのに
得意のエラーlibupnpp.so.12が無いとか?起動しない!依存関係がぁ!?
エラーが出てないのに?? 
結論としては pupnpのインストールが必要だった。
忘れているのかなぁ自分(苦笑)

蛇足 ソースインストールには常にOS環境破壊(笑)とか元に戻せなくなるとか
   恐ろしいリスクがあるのでは?とういう事で自分はこの様な場合にporgを活用しています。
   porg は自分ビルドのパッケージ管理用ツールで以前は paco だったが現在は porg として開発が継続
   自分ビルドをインストールする際にporgコマンドを使う事でインストール内容を追跡記録してくれます。
   その機能により綺麗にアンインストールが出来るので元に戻して仕切り直しが可能(笑)
   RaspberryPiはそのコストパフォーマンスと手軽さ?がウケて初心者の入門用として語られているのを良く見るけど
   ホントにそうなんだろうか?と何時も思う。思いどうりになんて全然動かない(笑)

— posted by くま at 10:23 am  

最新kernel sourceでrt-kernel環境を構築 ついでにdriver改造

[root@alarm ~]# uname -a
Linux alarm 6.3.0-rc4-rt1-v8 #1 SMP PREEMPT_RT Thu Mar 30 20:12:33 JST 2023 aarch64 GNU/Linux

[root@alarm ~]# alsacap
*** Scanning for playback devices ***
Card 0, ID `sndrpirpidac', name `snd_rpi_rpi_dac'
Device 0, ID `RPi-DAC HiFi pcm1794a-hifi-0', name `RPi-DAC HiFi pcm1794a-hifi-0', 1 subdevices (1 available)
2 channels, sampling rate 8000..768000 Hz
Sample formats: S16_LE, S24_LE, S32_LE
Subdevice 0, name `subdevice #0'

これが実現出来た組合せ(3/30現在)

patch: patch-6.3-rc1-rt1.patch.xz
source: https://github.com/raspberrypi/linux/tree/rpi-6.3.y
VERSION = 6
PATCHLEVEL = 3
SUBLEVEL = 0
EXTRAVERSION = -rc4

現実に戻って冷静になると...
まずrpi-dacドライバーのソース部分をイジって
本来のpcm1794aのハードウェア仕様とはかけ離れた仕様に改造している。
この改造をしても一般的なハードにはメリットがない様に思う。
DSD音源ファイルをDoP、I2S形式で出力する場合にだけメリットがある様に思う。
自分の環境ではAK4137というサンプリングコンバーターICとの組合せで動作を確認している。
RaspberryPiはMCLKを出力出来ないため一般的なスレーブモード動作のDACセットと組み合わせるためには
MCLKを発生させなければならないから
例えばAlloラズパイ用リクロッカー KALI Reclocker基板等と組み合わせる必要がある。
まだ試していないがこの基板使用時に組み合わせるドライバーもrpi-dacドライバーなので
恐らく動作する様に思う。

参考URL:
0028-nikkov-i2s-spdif-2.0.patch
ALSA: pcm: Add support for 705.6KHz and 768KHz sample rate
NanoPi-NEO2 の I2SでMCLK出力 & 384kHz, 768kHz, 1536kHz, 8kHz対応
linux-kernel-projects-rt-6.3
RaspberryPiに最新のRT-Linuxを入れる方法
Raspberry Pi 3とリアルタイムカーネル(1)[RT Preempt導入編]

追記 3/31 intel i9 j8でビルドしてこのぐらいの時間がかかる。

TIME



作業概要
1.kernel sourceにリアルタイムカーネルパッチを当てる。
2.RPi-DACの仕様変更のため下に示した部分のsourceを変更する。
3.クロスコンパイル環境でコンパイルを行う。
4.エラー無くコンパイルが終了したらSDカードの該当部分にコピー、再起動して確認する。

パッチと言うものを作った事が無いのでこれで...
#----sound/soc/codecs/pcm1794a.c----------------------------#
29c29
< .rates = SNDRV_PCM_RATE_8000_768000,
---
> .rates = SNDRV_PCM_RATE_8000_192000,
31,32c31
< SNDRV_PCM_FMTBIT_S24_LE |
< SNDRV_PCM_FMTBIT_S32_LE
---
> SNDRV_PCM_FMTBIT_S24_LE
#----include/sound/pcm.h------------------------------------#
124,126d123
< #define SNDRV_PCM_RATE_705600 (1U<<15) /* 705600Hz */
< #define SNDRV_PCM_RATE_768000 (1U<<16) /* 768000Hz */
<
139,143c136,138
< #define SNDRV_PCM_RATE_8000_384000 (SNDRV_PCM_RATE_8000_192000|SNDRV_PCM_RATE_352800|¥
< SNDRV_PCM_RATE_384000)
< #define SNDRV_PCM_RATE_8000_768000 (SNDRV_PCM_RATE_8000_384000|SNDRV_PCM_RATE_705600|¥
< SNDRV_PCM_RATE_768000)
<
---
> #define SNDRV_PCM_RATE_8000_384000 (SNDRV_PCM_RATE_8000_192000|¥
> SNDRV_PCM_RATE_352800|¥
> SNDRV_PCM_RATE_384000)
#----sound/core/pcm_native.c--------------------------------#
2460c2460
< 48000, 64000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000
---
> 48000, 64000, 88200, 96000, 176400, 192000, 352800, 384000
#----sound/soc/bcm/bcm2835-i2s.c----------------------------#
770c770
< .rate_max = 768000,
---
> .rate_max = 384000,
780c780
< .rate_max = 768000,
---
> .rate_max = 384000,

KERNEL=kernel8 make menuconfig ARCH=arm64 CROSS_COMPILE=/usr/bin/aarch64-linux-gnu-
を実行する時に忘れてはいけない事!
CONFIG_PREEMPT_RT=y
CONFIG_HIGH_RES_TIMERS=y

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

 

うぉ----- DoP万歳!

[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..768000 Hz
Sample formats: S16_LE, S24_LE, S32_LE
Subdevice 0, name `subdevice #0'

pcm1794aハードウエアのサポート範囲を超えた値の設定に成功したと思う(笑)
DSD256音源ファイル再生時のステータスは

access: RW_INTERLEAVED
format: S24_LE
subformat: STD
channels: 2
rate: 705600 (705600/1)
period_size: 16384
buffer_size: 65536

うお-----DoPが大好きだぁ(笑)
これからデバック作業に入るが
上手く行けばDSD256も問題なくDoPで再生出来るハズ!

※パッチの内容について現在 精査中です...

参考URL  DSD再生環境(1) 混乱していますがこれでOK?

— posted by くま at 08:49 am  

ArchlinuxベースでRaspberryPi用のrt-kernel作成

ArchlinuxベースでRaspberryPi用の最新rt-kernel作成につまずいている。
何が問題なのか?
カーネル再構築に必要な最新sourceにrtパッチが綺麗に当たらない。
(腕がないのか??)
少し古いsourceでも上手く当たる組合せを探したが見つからない。
恐ろしいのが arch/arm64/configs/ に
bcm2711_defconfigが存在しないsourceが多く存在している事。
まだまだ勉強が足りないのかなぁ...

参考URL  64bit rt-kernel への道(2)

— posted by くま at 09:33 am  

CLK5340基板接続(3)

今、RaspberryPi4で聴いていますが良いです。(意味不明^^;
以前からラズパイの弱点はクロックだ!と言われていましたが
確かそうだと納得です。
SRC4137基板との組合せでMCLKを付加してDACに入れると結構良いと感じていたが
今回SRC4137基板に入れるクロックをCLK5340基板から供給すると
やはり更に音質が向上する事が判明!(個人的見解です。)
素晴らしい....音のうなりというか余韻というかタメが聴こえる。
デスクトップPCに比較して音の勢い力がちょっと...と思っていたのだが
これが弱っちいと思っていたラズパイの音なのかと(笑)

余計なHAT基板は使わず絶縁ICを介したI2S差動送信基板のみを搭載しています。
こうするとドライバーの制約が少なくなり
無茶?なサンプリング周波数で試す事が可能になります(笑)
紫色のジャンパー線が見えています。
これは10PIN2列のヘッダーから送信基板一次側の電源を供給するために配線しましたが
元々は近くに見えるJSTのXH 2PINのコネクターから電源を供給する様に設計していました。
どんどん電源を独立供給設計にしていたら電源基板が何枚も必要になって
前段の基板からi2s信号と電源を貰う様に追加配線したものです。
苦肉の策なワケです(笑)

RaspberryPi4-11



— posted by くま at 10:17 pm  

 

NFD基板のI2S位相切換機能って...

たぶん動いていると^^;
一応何時も左右チャンネルがテレコになっていないか?のテスト用音源で
スクリプトを実行した時に左右チャンネルが入れ替わるのが確認出来た。
ただし自分の環境ではスクリプト内容を少しイジらないと動作しなかった。
こんな感じに変更した。

# cat hdmi_inv.py
import RPi.GPIO as GPIO
#INV_PIN = 27
GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.OUT)
GPIO.output(27, GPIO.HIGH)

この機能を動かすためにはRaspberryPiのI2Cコントロール機能を
有効にしなければならなかったので結構面倒だった(笑)
このNFD基板にも例のクロック基板から闘魂注入をして見たい。
どんな音になるのかなぁ マスターモードからの引き出しは関係してくるのかどうか?

befor-after



参考URL Use I2C on raspberry pi with archlinux-arm

— posted by くま at 05:27 pm  

シームレスな再生環境にはまだ遠いが(笑)

色々なディストリと色々な機器と色々なソフト設定の組み合わせがあり
ブログでは完璧な説明が出来ない事を最初に書いておきます。
まぁ管理人自身のポカ、勘違いもあるのでご指摘いただけると有り難いですm(_ _)m
カーネル再構築でドライバーの守備範囲を広げた環境はまだイジっていて
自分の目標であるPCM-DSD再生環境をシームレスにするためのアプローチの一つです。

# 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'

この状態で
OS:
# 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

ハード:
RaspberryPi4 + Renew SRC4137(サンプリングレートコンバーター) + HDMIコネクタI2S差動送信基板
※リクロック基板、ハットDACからのI2S横取無し。送信基板のみ。

mpd設定:
dop "yes"

allowed_formats "384000:32:2 44100:*:2 48000:*:2 88200:*:2 96000:*:2 96000:*:2 176400:*:2 192000:*:2 352800:*:2 384000:*:2 dsd64:2=dop dsd128:2=dop dsd256:2=dop"

audio_buffer_size "12288"
buffer_before_play "50%"
max_output_buffer_size "131072"
max_connections "128"

この状態で下の様な仕様の音源をDoP変換再生すると
まともに再生出来る場合と雑音混じりになってしまう場合がある。
つい最近までその原因はドライバーの拡張が無茶(笑)だったと考えていたのだが...
あくまで自分の環境の話だが判明した原因はその時のマスタークロックが44.1系なのか48系なのか!
それだけだった。自分の環境ではデジタルチャンネルデバイダーを使っているので
デバイダー入力周波数がコロコロ変わると曲の頭が切れるので固定していた。
SRC基板を入れていて気がつくのに時間がかかったという顛末

Audio
Format : DSD
Format/Info : Direct Stream Digital
Commercial name : DSD64
Format settings : Little
Duration : 8 min 28 s
Bit rate : 5 645 kb/s
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 2 822 kHz
Compression mode : Lossless
Stream size : 342 MiB (100%)

— posted by くま at 10:51 am  

RaspberryPiの製造ライセンスが終了の様だ

注文していたモノが自動キャンセルになっている。
今後の入手性は改善されるのだろうか?
たぶん悪くなると予想している。
日本業者の購買課の能力は世界のトップレベルだと自分は思っているのが根拠だ。

STOP



— posted by くま at 10:03 pm  

最近気がついたミス...Allo Kali I2S Reclockerの電源供給

Allo Kali I2S Reclockerには重ね合わせて使用する時に
下のRaspberryPiと電源を共通にするか、あるいは別々にするかを
選択するためのジャンパーが付いている。
この二本のピンは片側がRaspberryPiの電源
もう片方はReclockerに接続されている。
自分はもちろん別電源で供給するためこのジャンパーピンはショートせず
この部分を起点にRaspberryPi4へ電源供給するためのサブ基板を作成
取り付けて使用していたがぁ----
信号線を確認していた時に
Kali I2S ReclockerのIOピンは面実装部品だと改めて認識した(笑)
という事はピンは貫通していないという事になる。
悪い予感がしてテスターで当たってみるとこのジャンパーピンから電源供給すると
逆流防止ダイオードを通過してから供給する構造になっていた ええぇ!!
しかも当該ダイオードは約0.2Vも背負っている。 ええぇ!!
仕方がなくRaspberryPiに電源を供給するためだけの基板を追加して
RaspberryPi自身の保護回路も前述のダイオードも通過せず電源が接続するようにしてみた!
音は...音は明らかに変わった!

— posted by くま at 07:01 pm  

Archlinux rt-kernel パラメーターその後...

Preemption Modelは
「5」のFully Preemtible Kernel を選択
プリエンプションの周波数は
300Hz
これが我が家では良い様に聴こえます(笑)
参考URL RaspberryPiに最新のRT-Linuxを入れる方法
     秋の夜長は Raspberry Pi 3 で RT-Linux ビルドに挑戦
この記事を読むと
------------------------------------------------------
タスク切り替えがこの周波数で強制的におきます。 
あまり速くしすぎると実行効率が落ちてしまうので気をつけます。 
タスクを切り替える時間がゼロではないからです。
------------------------------------------------------
とあります。
実は1000Hzも試して見ました。音がスカスカになりました(笑)
秋の夜長編の方に
------------------------------------------------------
マスターモードI2SがないDACの場合の方が効果が大きくでるかもしれません。
------------------------------------------------------
とあります。正にそう言う結果が出ています。
allo kali基板 が水を得た魚の様に歌います。

— posted by くま at 05:48 pm   commentComment [1] 

<< 2024.4 >>
SMTWTFS
 1 2 34 56
7 8910 1112 13
1415 161718 1920
21 222324 2526 27
28 2930    
 
























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