超強力な台風15号(Faxai)が来るということで、家でじっとしていました。
我が家は北と東に窓がありまして、北側の窓にガンガン風と雨が吹き付けていました。あまりの風圧にサッシが耐えらず、雨が窓サッシの隙間から霧吹きのように吹き出していました。途中で気づいてテープや紙で抑えたので、畳が水浸しになる被害は防げました。
真夜中に壁に飛来物が当たり、ものすごい音がしていました。窓の真横に当たったらしく、窓にはギリギリ当たりませんでした。窓に当たったら、窓が粉砕されていたと思います。本当に幸運でした。
後は何だろ、若干停電した程度でしょうか。特に被害はありませんでした。災害への備えは日頃からやっておいて損はないですね。
台風が過ぎた後に車を見に行ってみましたが、特に飛来物が当たった形跡もなく、何ともなかったです。良かった良かった。
目次: ROCK64/ROCKPro64
最近linux-nextでROCKPro64のアナログオーディオ出力を使いたくて、色々やっています。デバッグの都合上、ROCKPro64のDAC/ADCであるEverest ES8316の出力波形をオシロスコープで見ることが多いです。
私が音楽を聴く程度では、特に何も思いませんが、オシロスコープで見てしまうと、波形がやや歪んでいることに気づいてしまいます。
我が家で一番の波形の綺麗さを誇るONKYO U33GXV2と比較してみたいと思います。
最初はサンプリング周波数(以降Fsと書く)= 96kHzのときの、48kHz Sin波を入力してみます。振幅は最小から最大です。
まずはES8316から。DACボリュームを最大にすると波形が歪む(2019年9月6日の日記参照)ので、今回の計測では -2.0dBに設定しています。
Everest ES8316 48kHz Sin波(Fs = 96kHz)
U33GXV2だとこんな感じです。
ONKYO U33GXV2 48kHz Sin波(Fs = 96kHz)
雲泥の差というほどでもないですが、ONKYOはやっぱり歪みが少なくて綺麗ですね。
上記の比較をしたあとに気づいたのですが、ES8316はFsを50kHz以上にする場合、異なるモードに設定しなければならないらしく、linux-nextはその設定に対応していませんでした。
つまりES8316側は設定不足で不利な状態にあり、公平な比較ではなかったようです。というわけで、次はサポートの範囲内であるFs = 48kHzの24kHz Sin波で比較しようと思います。
Everest ES8316 24kHz Sin波(Fs = 48kHz)
時間分解能の設定のせいかもしれませんが、先ほどより歪んでいるように見えます。Sin波と三角波の間のような波形になっています。
ONKYO U33GXV2 24kHz Sin波(Fs = 48kHz)
こちらは歪みが見当たらない(少なくとも私のオシロでは)レベルです。さすがですね……。
目次: ROCK64/ROCKPro64
引き続きROCKPro64のアナログオーディオと闘っています。ROCKPro64にはRK3399というSoCとEverest ES8316というDAC/ADCが搭載されています。
ES8316のドライバは既にlinux-nextに存在しており、ボリューム調整の機能も実装済みです。ボリューム調整はalsamixerを使うと便利です。CUIながら、下記のようにGUI風に表示されます。
Headphone(左端)とHeadphone Mixer(左から2番目)ボリューム
Headphone Mixer(左から2番目)ボリュームの設定値は先日(2019年8月31日の日記参照)直しましたので、最大値にしても問題ありません。ただし、まだlinuxのupstreamツリーには取り込まれていないので、5.3か5.4を待たなければなりません。
今回、問題を見つけたのは、ずっと右の方にあるDACというボリュームです。初期値はおそらく最大値である100(= 0dB)になっていると思います。
おそらくHWの仕様だと思いますが、ボリュームの挙動がちょっとおかしく、0dBにすると波形が歪みます。
テストデータとしてサンプリング周波数48kHzで8kHzの矩形波を使います。まずはDACボリューム最大で試します。
ES8316 8kHz矩形波(Fs = 48kHz)、DACボリューム0.0dB
矩形波の周波数が1/6 Fsの場合、矩形波の天辺は緩やかに波打つはずです。しかしES8316の場合、頭打ちするのか、ギザギザになってしまいます。
周波数が1/6 Fsの場合の波形(2014年11月25日の日記より)
ここでDACボリュームをわずかに下げてみます。
音量的にはほとんど変わりませんが、波形はかなり綺麗になります。ちなみに私の耳では聞き比べても全く違いを感じません。オシロスコープ様で見ないとわからないです……。
お試しいただく際の注意点ですが、8kHzの矩形波は中途半端に高い「キィーーン」という音で、かなり不快な部類の音に入ります。あまり長く聴かない方が良いと思います。
ES8316 8kHz矩形波(Fs = 48kHz)、DACボリューム -2.0dB
SoC側から出力しているクロック、I2Sデータともに全く同じなので、DACボリューム最大で波形が歪むのはES8316の特性でしょう。おそらく。
音質に少しでもこだわりたい人はDACボリュームは -2.0dBで運用するのが良さそうです。音量調整の手段はHeadphoneやHeadphone Mixerがありますし、そちらの2つはボリュームMaxにしても波形が歪まないので、お勧めです。
一昨年にカーナビが壊れて(2017年9月3日の日記参照)以来、カーナビを使わず過ごしていました。大阪、東京では車に乗らないし、あまり困りませんでしたが、先日遠出したとき道がわからなくなって、適当に大きな道を走っていたら渋滞に巻き込まれ難儀しました。
以前使っていたPanasonic Strada Pocket CN-SP700L-Kは、なかなか良かったですが、シリーズごと廃止されて後継機がありません。
前回お世話になったお礼もこめて、同メーカーであるPanasonic Gorillaを購入しました。CN-G1300VDという一番良いグレードの製品を選びました。Amazonで47,000円くらいです。
今日、さっそく設置して、1〜2時間走りつつ、帰りはナビ機能も使ってみたんですけど、残念ながら「これは売れないだろうな」というのが正直な感想でした。
製品の名誉のために書いておくと、製品に欠陥はありません。各機能はいたって正常に動きます。
では何がダメかというと「10年前」の仕様のまま時が止まってることです。正直10年前に買ったStrada Pocketと何が変わったのかわかりません。
使ってすぐに気づく欠点は2つあります。
読みを「前方一致で」正確に入れなければ候補に出ない点も、今時としては辛いです。うろ覚えの場所が探せません。
冗談みたいな話ですが、Googleで検索して、目的地の電話番号を調べて、カーナビに電話番号を入力する方法が一番早いです。この状態で何年放置したのでしょうか。非常にマズいと思います。
10年前は普通でしたが、今や欠点に成り下がっている点もあります。
車関連の会社に転職したおかげで、車向けの製品はおいそれと設計変更できないことは良く分かっていますが、それにしても時代遅れです。私に言われるまでもなくメーカー側もわかっているとは思いますが、このままだとポータブルカーナビは滅びさるでしょう。
メモ: 技術系の話はFacebookから転記しておくことにした。全体的に小修正。
目次: ROCK64/ROCKPro64
ROCKPro64に搭載されているCODEC(※)はEverest ES8316というICです。このICをlinux-nextのドライバで制御すると、異常な動作をします。
具体的には、Headphone Mixerのボリュームを5以上に変更すると、突然、ほぼ最大音量の馬鹿デカい音になり、バリバリというノイズが載ります。あまりにノイズがひどくて、聴くに堪えないレベルですし、音がうるさくてたまらないです。
ボリューム5〜7は使い物にならないようなので、ボリュームを4にリミットするパッチをLinux Kernel MLに投稿したところ、ドライバの作者が現れ「今の実装の設定値はおかしい」とアドバイスをくれました。作者曰く現在のドライバは、禁止された設定値をレジスタに書いているそうです。正しい設定値も教えてくれました。
教えていただけるのはありがたいんだけど、既に知っていたなら直してほしかったな……。さておき、正しい設定値を入れたパッチを再作成して、投稿しました。
動作テストしているときに、左右のボリュームの「効き」が反転しているバグにも気づいたので、問題を修正するパッチも合わせて投稿しました。
両パッチともに、先日Linux ASoCツリーに取り込まれたようです。このままLinux 5.3に取り込まれると思われます。良かった良かった。
(※)LinuxではI2Sなどのデジタルオーディオとアナログオーディオ間を変換するDAC/ADCをCODEC と呼びます。
確かにCode/Decodeを行うため、使い方としては合っているし、こちらの方が一般用語かもしれないが、テレビ系SoCとの関わりが深かったので、codecと言われるとMPEG2やAACのような動画像、音声圧縮展開の方を思い浮かべてしまう……。
メモ: 技術系の話はFacebookから転記しておくことにした。全体的に小修正。
目次: apt
前回、Tree::Sectionsには複数のセクションが指定でき、Tree::Architecturesには複数のアーキテクチャが指定できますが、TreeDefault::Packagesとの対応がよくわからない。と書きましたが、複数のセクションを同時に指定する手段が見つかったので、メモしておきたいと思います。
書き方は簡単で、前回TreeDefaultのパスに出現するセクション名をstableと決め打ちで書いていました。これを $(SECTION) に置き換えるだけです。アーキテクチャ名なら $(ARCH) です。
Dir::ArchiveDir ".";
Dir::CacheDir "dists/buster";
Default::Packages::Compress ". gzip bzip2";
Default::Packages::Extensions ".deb";
Default::Sources::Compress ". gzip bzip2";
Default::Contents::Compress ". gzip bzip2";
Default::FileMode 0644;
TreeDefault::Directory "dists/buster/pool/$(SECTION)/$(ARCH)";
TreeDefault::Packages "dists/buster/$(SECTION)/binary-$(ARCH)/Packages";
Tree "dists/buster" {
Sections "stable testing nightly";
Architectures "amd64";
};
それともう一つ差分がありまして、BinDirectoryの指定はなくても動くことがわかりましたので、削除しています。
セクションを複数指定できるようになりましたので、スクリプトも若干変わります。
export TARGET=debian
export DIST=buster
export ARCH=amd64
for SECT in stable testing nightly
do
mkdir -p /var/www/linux/${TARGET}/dists/${DIST}/${SECT}/binary-${ARCH}
mkdir -p /var/www/linux/${TARGET}/dists/${DIST}/pool/${SECT}/${ARCH}
done
### *.debファイルをコピーする(モジュールによってコピー元は違うと思うので、これは一例)
### cp *.deb /var/www/linux/${TARGET}/dists/${DIST}/pool/${SECT}/${ARCH}
### Packages, Contentsファイルを作る
### linux/debianの下でapt-ftparchiveを実行しないと *.debが見つからないといわれる
cd /var/www/linux/${TARGET}
find . -name "Contents-*" -or -name "Contents-*.*" | xargs rm -f
find . -name "Packages" -or -name "Packages.*" -or -name "packages-*" | xargs rm -f
find . -name Release -or -name Release.gpg -or -name InRelease | xargs rm -f
apt-ftparchive generate ../conf/apt_generate_${TARGET}_${DIST}.conf
### Releaseファイルを作る
### linux/debian/dists/busterの下でapt-ftparchiveを実行しないと、
### 後ほどapt-getを実行した際にパッケージが見つからないといわれる
cd /var/www/linux/${TARGET}/dists/${DIST}
apt-ftparchive release -c=../../../conf/apt_release_${TARGET}_${DIST}.conf . > Release
### Releaseファイルに署名する
echo -n "abcd1234" | gpg --batch --passphrase-fd 0 --pinentry-mode loopback --clearsign -o InRelease Release
echo -n "abcd1234" | gpg --batch --passphrase-fd 0 --pinentry-mode loopback -abs -o Release.gpg Release
chmod 644 Release InRelease Release.gpg
これで粗方、やりたかったことができたのではないかと思います。
今回もDockerのリポジトリから *.debを拝借します。セクションStableにはcontainerd.io、Testingにはdocker-ce-cli、Nightlyにはdocker-ceを配置するなど、各セクションに全く違う *.debを配置すると後で見やすいです。
# tree linux/
linux/
|-- conf
| |-- apt_generate_debian_buster.conf
| `-- apt_release_debian_buster.conf
`-- debian
|-- dists
| `-- buster
| |-- InRelease
| |-- Release
| |-- Release.gpg
| |-- nightly
| | |-- Contents-amd64
| | |-- Contents-amd64.bz2
| | |-- Contents-amd64.gz
| | `-- binary-amd64
| | |-- Packages
| | |-- Packages.bz2
| | `-- Packages.gz
| |-- packages-amd64.db
| |-- pool
| | |-- nightly
| | | `-- amd64
| | | `-- docker-ce_0.0.0-20180901050402-e5babb2-0~debian_amd64.deb
| | |-- stable
| | | `-- amd64
| | | `-- containerd.io_1.2.0-1_amd64.deb
| | `-- testing
| | `-- amd64
| | `-- docker-ce-cli_18.09.0~3-0~debian-buster_amd64.deb
| |-- stable
| | |-- Contents-amd64
| | |-- Contents-amd64.bz2
| | |-- Contents-amd64.gz
| | `-- binary-amd64
| | |-- Packages
| | |-- Packages.bz2
| | `-- Packages.gz
| `-- testing
| |-- Contents-amd64
| |-- Contents-amd64.bz2
| |-- Contents-amd64.gz
| `-- binary-amd64
| |-- Packages
| |-- Packages.bz2
| `-- Packages.gz
`-- gpg
`-- public.key
18 directories, 28 files
上記はリポジトリ情報を生成した後の状態です。各セクションの下にContentsとPackagesが生成されます。ファイルが生成できたら /etc/apt/sources.listにこのサーバーを指定して、apt-get updateを実行します。
deb [arch=amd64] http://192.168.1.1/linux/debian/ buster stable
-> containerd.ioがインストールでき、他のdocker-ce-cliやdocker-ceはインストールできないはず
deb [arch=amd64] http://192.168.1.1/linux/debian/ buster testing
-> docker-ce-cliがインストールでき、他のcontainerd.ioやdocker-ceはインストールできないはず
deb [arch=amd64] http://192.168.1.1/linux/debian/ buster nightly
-> docker-ceがインストールでき、他のcontainerd.ioやdocker-ce-cliはインストールできないはず
指定の方法は上記のとおりです。セクション名stableの部分をtestingやnightlyに入れ替えても、apt-get updateが成功すれば、複数セクションの扱いはうまくいっています。
また、セクションstableを選んだときはcontainerd.ioがインストールできて、他のものはインストールできないはずです。testingだとdocker-ce-cli、nightlyだとdocker-ceがインストールできて、他の2つはインストールできなくなります。セクション指定が機能していることがわかると思います。
< | 2019 | > | ||||
<< | < | 09 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | - | - | - | - | - |
合計:
本日: