コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2019年8月31日 >>> 2019年8月18日
link もっと後

2019年8月31日

ROCKPro64とアナログオーディオ - その2 - Headphone Mixerボリュームのバグ

目次: 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から転記しておくことにした。全体的に小修正。

編集者:すずき(2020/10/30 00:54)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2019年8月29日

独自のaptサーバー - その5 - 複数のセクションに対応する

目次: apt

前回、Tree::Sectionsには複数のセクションが指定でき、Tree::Architecturesには複数のアーキテクチャが指定できますが、TreeDefault::Packagesとの対応がよくわからない。と書きましたが、複数のセクションを同時に指定する手段が見つかったので、メモしておきたいと思います。

書き方は簡単で、前回TreeDefaultのパスに出現するセクション名をstableと決め打ちで書いていました。これを $(SECTION) に置き換えるだけです。アーキテクチャ名なら $(ARCH) です。

apt_generate_debian_buster.confで複数のSectionsを指定

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の指定はなくても動くことがわかりましたので、削除しています。

セクションを複数指定できるようになりましたので、スクリプトも若干変わります。

apt-ftparchiveを呼ぶスクリプト

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を実行します。

/etc/apt/sources.listに独自aptサーバーを追加

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つはインストールできなくなります。セクション指定が機能していることがわかると思います。

編集者:すずき(2021/08/05 12:12)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2019年8月25日

安くて良いヘッドフォン

AKG K240に似ていることで有名(?)なSuperlux HD681Bを買いました。Amazonで3,000円程度です。噂通り音は良いです。

残念ながら数万円する高級ヘッドフォンを使った経験はほぼないので、高級な音かどうかまではわかりません。

現在使っているaudio-technica ATH-TAD500はかなりシャリシャリ気味の音ですが、HD681Bはさらに輪をかけて高音が強いです。かなりキンキンしています。

普段聴いている音楽をHD681Bで聴いてみると、今まで聞いたことのない「キーン…、キーン…!」という音が聞こえます。こんな音鳴ってたのか…??

感想

大きさの割に軽いし、圧迫されるような感じはしませんが、長時間使うとちょっと耳が痛くなります。

この製品に限った話ではありませんが、レザータイプのイヤーパッド(=汗を吸わない)、セミオープンエアー型(=音漏れが激しい)なので、室内用に最適だと思います。

メモ: 技術系の話はFacebookから転記しておくことにした。後半を追記。

編集者:すずき(2019/08/25 15:06)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2019年8月21日

ROCKPro64とアナログオーディオ - その1 - linux-nextのドライバ

目次: ROCK64/ROCKPro64

ROCKPro64でRockchipの公開しているLinux(以降、Rockchip Linux)ではヘッドフォン出力できるのに、linux-nextだとできないのはどうして?と思って調べていたところ、悲しいことがわかりました……。

ROCKPro64はEverest ES8316というDACを搭載しています。ドライバはsound/soc/codecs/es8316.cです。なんとこのドライバはですね、Rockchip Linuxに実装されているドライバ(Rockchipの人が書いた)と、linux-nextのドライバ(Everestの人がUpstreamした)が全然違う実装になっています。

ES8316のドライバが全く違うお陰で、Rockchip Linuxからdevicetreeを持ってきてもウンともスンとも言わないのです。まさかES8316のドライバ実装が全く違なんて想像していませんでした。どうしてこんなことに……。

しばらく戦ってみましたが、linux-nextのES8316ドライバの動きは良くわかりませんでした。clocksプロパティにダミーの12MHzクロックを指定すると、とりあえずドライバは文句を言わなくなるものの、肝心の音は鳴りません。

残念ながらRK3399側の問題(例えばMCLKが出力されていないなど)なのか、ES8316側の問題なのか切り分けができていません。

各端子に来ている信号をオシロスコープで見れば、原因の切り分けができるのはわかっていますが、ROCKPro64はプローブを当てることなど考慮して作っておらず、端子に名前が書いてないし、非常に細かいです。変にプローブを当てるとショートさせてしまいそうです。

編集者:すずき(2020/10/30 00:52)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2019年8月31日 >>> 2019年8月18日
link もっと後

管理用メニュー

link 記事を新規作成

<2019>
<<<08>>>
----123
45678910
11121314151617
18192021222324
25262728293031

最近のコメント5件

  • link 21年3月13日
    すずきさん (03/05 15:13)
    「あー、このプログラムがまずいんですね。ご...」
  • link 21年3月13日
    emkさん (03/05 12:44)
    「キャストでvolatileを外してアクセ...」
  • link 24年1月24日
    すずきさん (02/19 18:37)
    「簡単にできる方法はPowerShellの...」
  • link 24年1月24日
    KKKさん (02/19 02:30)
    「追伸です。\nネットで調べたらマイクロソ...」
  • link 24年1月24日
    KKKさん (02/19 02:25)
    「私もエラーで困ってます\n手動での回復パ...」

最近の記事3件

  • link 24年3月19日
    すずき (03/20 02:52)
    「[モジュラージャックの規格] 古くは電話線で、今だとEthernetで良く見かけるモジュラージャックというコネクタとレセプタク...」
  • link 23年4月10日
    すずき (03/19 11:48)
    「[Linux - まとめリンク] 目次: Linuxカーネル、ドライバ関連。Linuxのstruct pageって何?Linu...」
  • link 24年3月18日
    すずき (03/19 11:47)
    「[画面のブランクを無効にする] 目次: LinuxROCK 3 model CのDebian bullseyeイメージは10分...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDFファイル RSS 1.0

最終更新: 03/20 02:52