link もっと前
   2019年 8月 31日 -
      2019年 8月 22日  
link もっと後

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

日々

link permalink

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

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

[編集者: すずき]
[更新: 2019年 9月 8日 12:51]
link 編集する

コメント一覧

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



link permalink

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

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

[編集者: すずき]
[更新: 2019年 9月 1日 04:40]
link 編集する

コメント一覧

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



link permalink

安くて良いヘッドフォン

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

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

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

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

感想

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

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

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

[編集者: すずき]
[更新: 2019年 8月 25日 15:06]
link 編集する

コメント一覧

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



link もっと前
   2019年 8月 31日 -
      2019年 8月 22日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 9/20 00:01

カレンダー

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

最近のコメント 5件

  • link 19年09月01日
    すずき 「私も正直びっくりです。間違って違う製品を...」
    (更新:09/04 23:39)
  • link 19年09月01日
    hdk 「車向けの製品の中でも、車載コンピューター...」
    (更新:09/02 23:20)
  • link 19年07月18日
    hdk 「あっ、AAMはマニュアルのオペレーション...」
    (更新:07/25 00:02)
  • link 19年07月18日
    すずき 「AAM(ASCII Adjust AX ...」
    (更新:07/24 22:22)
  • link 19年07月18日
    hdk 「加算減算は符号のありなしどちらも命令が同...」
    (更新:07/24 07:25)

最近の記事 3件

link もっとみる
  • link 19年09月18日
    すずき 「[linux-next が久しぶりに更新された] ここしばらく更新...」
    (更新:09/20 00:01)
  • link 19年09月17日
    すずき 「[今まで知らなかった make の挙動] シェルから make に...」
    (更新:09/19 02:27)
  • link 19年09月07日
    すずき 「[Sin 波の美しさ勝負] 最近 linux-next で Roc...」
    (更新:09/08 13:17)

こんてんつ

open/close wiki
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 過去日記について

その他の情報

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