follow me

TinkerOS 2.1.16 までのCodama動作確認しました


Tinker Board S の TinkerOS が昨年ぽつぽつとアップデートが出ているのは気がついていました。
TinkerOS のイメージのダウンロードはこちらですね。なんかURLが昔と変わったみたいですね。
Download - Tinker Board - Asus

その TinkerOS での、Codama の動作確認をしました。
対象は、2.0.11, 2.1.11, 2.1.16 になります。
結果、全て動作問題なしです。
2.1.11だけ、kernelが少し違うので、導入には注意が必要です。
follow me

Codama をTinker Board Sで使う。

Codama (こだま) をTinker Board Sで使う方法です。
Tinker Board Sで使いたい人がどれだけいるかわかりませんが。
まぁせっかくドライバ作ったんだし公開しておきます。(ずっと放置してた。)
https://github.com/srchack/codama-tinker-driver.git


注意点はいくつかありまして、
  1. Tinker Boardでは動きません。Tinker Board Sだけが対応です。
    これは、I2Sスレーブモードに対応するのが、Tinker Board Sだけだからになります。
  2. Tinker Board S付属のヒートシンクが入りません。HATが干渉してしまう為、背の低いヒートシンクを用意する必要があります。
  3. Codamaのファームウェアを書き込むユーティリティ codama_dfu_i2c が失敗する事が多々あります。 これは、i2c周りの問題です。rk3288のi2cドライバでI2C Clock Stretchingが想定動作しないので、i2c-gpioを利用するのですが、安定していない様です。
ドライバの調整はじっくりとやっていくとして、とりあえず使うに困らないので一旦放流しておきます。
導入方法もgithubに記載しているので詰まることはないかと。

おそらく疑問に思う人が居るだろう点は、最後の処で/etc/rc.localに追記している箇所だろうか。
# Run Alsa at startup so that alsamixer configures
arecord -d 1 > /dev/null 2>&1
aplay dummy > /dev/null 2>&1
何故こんなものを入れているのかというと、Codamaはボリューム調整がハードでは出来ず、alsaのsoftvolを利用している点からくるのですが、なんでも良いので何かを流さないとVolume Controlに登場してくれない罠。
Raspberry Piでも同様なのですが、キモチワルイです。
alsaは素人なので良くわからんのです。
follow me

Codama, raspbian-buster 2019-06-20で動かす

2019-06-20-raspbian-busterなイメージが配布開始されています。
Kernelは初期状態から 4.19.42-v7+ となります。
codamaを利用するには、いくつか注意点があります。


とりあえず、簡単に修正したもの公開してみます。
https://github.com/srchack/vocalfusion-rpi-setup
まだすべてのテストは終わってません。暫定対応です。
また、イメージを焼いたままの状態では、raspberrypi-kernel-headersパッケージに問題が存在するので、新しいパッケージに更新が必要です。
その辺りも含め手順を記載していきます。
follow me

Codama, raspberrypi-kernel 1.20190517-1での問題


Codama、raspberrypi-kernel 1.20190517-1での問題についてそろそろ書いておきます。
既に1ヶ月経ってる訳ですが。。。
Raspbianで apt-get upgrade してしまうとkernelが 1.20190517-1(4.19.42-v7+) に更新されてしまい、必要なモジュールがビルドできずセットアップできない問題。
気がついて1ヶ月経つので、自己解決している人は多いかと思います。
まだ放置している方も少ないけれどいると思われるので、少しだけ情報書いておきます。

raspberrypi-kernel 1.20190517-1になって問題になっているのは、XMOSが公開しているソフトウェア部分で、それをCodamaではそのまま流用している事で他の XMOS同様に影響を受けてしまっています。
本家のgithubにIssueは挙げている(挙がっている)ので、そのうち対策はされるとは思われます。
Can't build i2c-gpio-param #13
Add compatibility for the latest Raspian build #14


念のため、現状の回避方法を紹介しておく。
follow me

Codama をRaspberry Pi Zeroで使う。

Codama (こだま) をRaspberry Pi Zero (W) で使う方法です。
Raspberry Pi Zero (W)で使いたい人がどれだけいるかわかりませんが。
Add support Raspberry Pi Zero for codama


Codamaで搭載しているXMOS XVF3100を動かす為のドライバは、XMOSが出しているものを利用しているので、Raspberry Pi Zero (W)に搭載されているBroadcom BCM2835には対応していません。
しかし、Broadcom BCM2835と、Broadcom BCM2837の違い、I2Sに限って言えば、ドライバの処理は何も変更する必要はなく、定義を変えるだけなんですね。

vocalfusion-rpi-setup/loader/i2s_slave/loader.c にある、3f203000.i2s20203000.i2s にするだけ。
Raspberry Pi 3 (Model B+/B) / 2 (Model B) の場合:
  3f203000.i2s
Raspberry Pi Zero (W)(WH) / 1 (初代) (Model B+/A+) の場合:
  20203000.i2s

なんとかして、自動判別できないものかと考えてるけど、本家にマージされてるドライバを見ていくしかないかな。
きっと何かできないはずはないとか思ってる。


あと、僕のリポジトリに上げてあるのは、起動時にcodamaが見えないとかいう問題も修正いれてます。
https://github.com/srchack/vocalfusion-rpi-setup.git
値を取得したりする為のユーティリティは、Codama本家のものでRaspberry Pi Zero (W)でも動作するのは確認済みです。
follow me

Codama ベース板準備、レーザーカット試してみる

Codamaの本来の性能を出すために、固定する板を用意しました。
考えたら初めてレーザーカット頼んでみた。(工房Emerge+さんに依頼してみました。)
別にたいしたカットもしてないがな。

マイクボードがぷらぷらしていると性能が落ちるので、固定が必要です。
どこまで固定するかというのは様々な意見がでるかと思いますが、とりあえずベースボードで良い気はします。
follow me

Codama ベース板準備

Codamaの本来の性能を出すために、固定する板を用意しました。
とりあえず加工しやすい板で準備しました。
年も明けたので、何処かでアクリルカットで作る予定です。
せっかくなので数枚作ってしまう予定。

マイクボードがぷらぷらしていると性能が落ちるので、固定が必要です。
どこまで固定するかというのは様々な意見がでるかと思いますが、とりあえずベースボードで良い気はします。
follow me

Codama ウェイク・アップ・ワードを試す。


音を聞かないと何もワカラナイ動画ですみません。
"Hello Underworld"でピロピロ鳴るだけです。

ウェイク・アップ・ワード(トリガーワード)が自由につけれると云われたらやりたくなりますよね?
"Hello Underworld" とか "ルルーシュ・ヴィ・ブリタニアが命じる" とかを試したくなりますよね?
それができるんです。


Codama (こだま) 発売になりました。
Raspberry Piに挿して使用する音声対話開発キット な訳ですが、AIスピーカーっぽいのを作るキットと云われています。
何が出来るかは、Codamaのサイトをみつつ、搭載されているDSP XMOS XVF3100を見ていただくのが良いでしょう。

ビームフォーミング、ノイズキャンセル、エコーキャンセルは、搭載しているのが当たり前になってきているので、性能差がどうかという事が数字で各社競い合っている訳ですが、各社DSPの表を見ると良い感じに自分のところが良い数字を目立つようにしてる訳でして。。。
ウェイク・アップ・ワード(トリガーワード)をユーザが自由に設定できる点がCodamaの売りなんですよね。
この手の評価キット買っても "Alexa" や他の幾つかのワードでしかウェイク・アップ・ワード(トリガーワード)を試せないのが多かったり、LinuxやAndroidが動いたメインSoCでソフトウェア処理でぶん回して実現したりがほとんど。
ソフトウェアで実現するものでは、Snowboy Hotword Detection KITT.AI等が存在しています。
ソフトウェアの場合、自由度は高いのでプログラムで頑張りたい人には向いているかもしれません。
しかし、リアルタイム性は個人的には鈍いと感じています。(XMOSでSensory社のTrulyHandsfree™キーワード・トリガー・テクノロジーを動かした際の反応を体験してしまうと)

Codamaでは、ウェイク・アップ・ワード(トリガーワード)の処理は、XMOS XVF3100で処理する訳ですが、自由に設定できるといっているのは、ウェイク・アップ・ワード(トリガーワード)を埋め込んだファームウェアを生成するWebサイトが提供されているからです。
codama ウェイク・アップ・ワード作成ツール
PCのマイク、またはCodamaのマイクを利用して録音した音声を元にファームウェアを生成します。
このWebサイトで生成されたファームウェアを書き込むことで、自分の使いたいウェイク・アップ・ワード(トリガーワード)が使えるようになります。
部屋の状態、録音に使用したマイク特性にも影響するので、PCのマイクや、イヤホンマイクや、Codamaのマイク等、複数マイクで試したり、部屋を変えてみたりすると認識精度も変化したりします。
うまくいかないときは、環境を少し変えてみると改善したりするのであきらめずに試してみるのが良いかも知れません。
Raspbianであればブラウザは、Chromiumで動作します。(他のブラウザでは、オーディオデバイスにアクセスできない等もあるので注意が必要です。)


僕に連休が何時来るのか解りませんが、連休に遊んでみてはいかがでしょうか?
Codamaのgithubのセットアップが完了していれば、動画程度のことは数分で実現できてしまいます。
適当にウェイク・アップ・ワード(トリガーワード)検出時に再生するwavファイルを配置して、以下の様なスクリプトで動いてしまいます。
#!/bin/sh

if [ ! -f /sys/class/gpio/gpio27/value ]; then
  echo 27 > /sys/class/gpio/export
fi

TRGWORD=0
while true
do
  if [ "`cat /sys/class/gpio/gpio27/value`" = 1 ] ; then
    if [ $TRGWORD = 0 ] ; then
      aplay -c1 -r16000 -fS16_LE part5.wav &
      TRGWORD=1
    fi
  else
    if [ $TRGWORD = 1 ] ; then
      TRGWORD=0
    fi
  fi
  sleep 0.2
done