2013年9月29日日曜日

Cubie Juke Box


とりあえず適当に色々触っていましたが...
この記事を見て「2倍の楽しさ秘めた、高音質ネットワーク機 CD-N500」、なんとなく目標が決まりました。

Cubie Juke Box

[機能]

1) CDのリッピング

cdparanoia を使用する。CDDBからデータを取得する部分をどう実現するか悩み中。

2) AAC or AC3 (DollyDigital?) へのエンコード

libav を使用する

3) SATA接続のHDD搭載

NTFSは、NTFS-3gを使っているので性能がイマイチです。
FATは4Gの制限があるから後々の事を考えるとダメ。

なので、Androidをちょっと改造して、ext4形式でHDDをマウントした。

4) S/PDIF でのパススルー出力

実験中。AC3で圧縮したデータをデコードせずに、そのままアンプに送りたいなぁ...

5) DLNA サーバー & クライアント

サーバーは minidlna を移植して実現できた。
クライアントは、FireAir Receiverというアプリが標準でインストールされていて動作するけど、ソースが公開されているものを探してます。

とりあえず現状で、Skiftaと言うアプリを使って、ソースとレンダラをCubieboard2にすると、スマホで再生操作ができた。
この話題は、また今度。

6) LCDにステータス表示

将来的には漢字が表示できるLCDが欲しいけど、そう言うのがまだ見つからない。

7) 再生・設定アプリ

一応操作できるように自前アプリを作る。Cubieboard2は、IRリモコンも使える。

操作するために、HDMIで画面を出すのもイマイチなので、Skiftaみたいにスマホからも操作できるようにしたい。

こんな感じです。

2013年9月27日金曜日

cubieboard2 + SPDIF + Passthrough


実はこれが一番の目的でした。

パススルー!!です。

折角SPDIFで外部のオーディオ機器と接続しているのですから、PCMに変換せず、そのままのDTS形式でデータを投げたいのです。
でも方法が分からず色々悩みましたが、やっとその答えが見えつつあります。

1.ドライバのソースをひたすら眺める。

A20 の SPDIF のドライバを以下のディレクトリに見つけました。

lichee/linux-3.3/sound/soc/sun7i/spdif/

この中のソースを眺めていると、気になるソースを発見!!

/*add the pcm and raw data select interface*/
switch(params_channels(params)) {
case 1:/*pcm mode*/
case 2:
fmt = 0;
break;
case 4:/*raw data mode*/
fmt = 1;
break;
default:
return -EINVAL;
}

う~ん。そんな物なのでしょうか?
チャンネル数が4ならRAWモード??

なんか微妙ですが、たぶんこれです。

2.再生する術を考える。

externalの下を眺めていると、使えそうなツールがありました。

その名も tinyalsa です。

そこで、先ほど得た知識を元に、tinyplay.c にパッチを...
チャンネル数を無理やり 4 に変えます。

// config.channels = channels;
config.channels = 4; // RAWモード

最後に、どっかのWEBサイトで拾ってきた DTS の WAV ファイルをこのツールで再生してみます。

# tinyplay test.wav -D 2

すると...わたくしの所有する SONY MDR-DS5100 (古っ!!)の DTS のインジケータが光輝きました。

なんとなく、音質が良くなった気がしますが、それ以上に、この方法で音楽を再生すると、Androidの操作音とMixされることが無くなるので、とても良い感じです。
操作音とMixされると、雑音っぽいのが混ざるのが気になったので...

とりあえず、パススルーっぽいものは動いています。
ですが、実用に至るまでには、もう少し調べることが残ってます。

何故ならDTSのデータの作り方が分かってません。

2013年9月21日土曜日

cubieboard2にI2C液晶をつける


トスリンクを買うときに、一緒にStrawberry LinuxのLCD液晶を買ってましたので、今日はそれを接続してみました。

接続方法は...

[LCD] 1 - [Cubieboard2] U14 44 (VCC 3.3V)
[LCD] 2 - [Cubieboard2] U15 6 (TWI1-SCK ※1)
[LCD] 3 - [Cubieboard2] U15 7 (TWI1-SDA ※1)
[LCD] 4 - [Cubieboard2] U14 42 (GND)
[LCD] 5 - [Cubieboard2] U14 44 (VCC 3.3V)

※1 I2Cの2つは3.3KΩの抵抗を使って、VCCにプルアップ接続してます。
毎度のことながら、これで正解かは、一切自信ありません。

動作確認...

テスト用に i2c-tools をビルドしてインストールします。
これも、いつもの事ながら、externalにコピーしてAndroid.mkを用意してビルドします。
特に、エラーもなくすんなりとビルドできました。

無事にLCDをcubieboard2から認識できているか確認します。

# i2cdetect -y 1

結果は...

0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

第一関門突破です。
無事に認識しているようです!!

次にOkiraku Programmingさんのスクリプトを参考にして、以下のコマンドを入力しました。

# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x78 0x5e 0x6c i
# i2cset -y 1 0x3e 0 0x0c 0x01 0x06 i
# i2cset -y 1 0x3e 0x40 0x31 0x32 i

すると、LCDに "01" と表示されました!!

これで動作確認できたので、今度は自分でプログラムを組んでみたいと思います。

2013年9月19日木曜日

cubieboard2 で AAC変換


完全に迷走気味な気がしますが、CDからリッピングしたデータをそのまま保存するのはサイズが大きいので、AACでエンコードしたいと思います。

そこで、libav を cubieboard2 にインストールしました。

方法は、gibhubのリポジトリをダウンロードして、android42/externalの下に放り込んでビルドしました。

NDKとか設定するが日頃から面倒で、cubieboardみたいにSDKのソース一式がある場合って、externalの下にコピーすれば何とかなるもんです。
ただ、今回は、time.h がどうしてもシステムの方を参照してしまうので、インチキっぽいですが、av_time.h とかファイル名を変えてエラーを回避しちゃいました。

その時、adbのシェルで実行したコマンドは以下のような感じ

# avconv -i track01.cdda.wav -acodec aac -strict experimental -f mp4 track01.m4a

5分の曲を1ファイル変換するのに 約1分
完成したファイルのサイズは 50MB -> 7MB で 約1/7 です。

デュアルコアのうち、片方しか使ってないようなので、CDからのリッピングと並列で行えば、なんとか実用可能なレベルだと思います。

2013年9月18日水曜日

cubieboard2 + SPDIF


昨日の続きです。

トスリンクの端子が届いたので、早速、cubieboard2に接続してみました。

[部品]

1) 送信用光コネクタ基板「TX177_D」

2) Photolink送信用:PLT133/T9

デジットさんのページで紹介されていた部品です。

これを組み立て、以下のように cubieboard2 と接続します。

[TX177D] 1 - [Cubieboard2] U14 42 (GND)
[TX177D] 2 - [Cubieboard2] U14 44 (VCC 3.3V)
[TX177D] 3 - [Cubieboard2] U14 41 (SPDIF)

※U14は、SATA端子がある方のコネクタです。(参考)

これで、トスリンク端子の増設が完了しました。

Cubieboard2 の F/W の修正は、sys_config.fex の記述を1つ変更するだけです。

(変更前) spdif_used = 0

(変更後) spdif_used = 1

最後に、Android起動後、設定画面でサウンド出力先をSPDIFに変えればOKです。

【注意!!】

私はハードウェアの事が良く分かってません。
もしこれで、あなたのcubieboard2 が壊れても一切責任は取れません。
この回路に何か問題がありそうなら、是非教えて頂きたいです。m(_ _)m

cubieboard2でデジタルオーディオ


私の青春時代ってレコードはCDに、テープはMDに、ビデオはDVDにと、
アナログがどんどんデジタルに置き換わっていった時代で、
自分も何かそこに未来を感じていて、とても夢があふれていた時代でした。

まぁ、一通り置き換わった今、だから何って感じなのですが...

そんなこんなで、夜中にヘッドフォンで音楽を聴きながらコーディグを勤しんでますが、
突然盛大なノイズが乗ることがあります。

まぁ、USBで通信している時なんですけどね...

何せヘッドフォン端子がUSB端子の隣にあり、USBを使うたび、
ピ~ヒャラヒャラと... お前はどこのテープリーダーだって感じです。

結局、人が音を聞く時、最後はアナログで、その大切なところで、
ノイズが乗りまくるわけです。

安物のマザーボードには、私の青春の1ページだったトスリンク
(※最近、正式名称を覚えました。以前は、ずっと光端子...)
なんて付いてません。

もっと、音楽を聴きながら、快適にコーディングをしたい!!
最近流行りの、USB DAC的な事をしたい。

ただ、USB DACは個人的に、そんな馬鹿なってことが多いので、
ちょっと敬遠気味です...


そろそろ、前置きが長くなりましたが、
トスリンク端子が欲しいです。
それで、SONYのワイヤレスヘッドフォンと繋ぎたいです。


次のcubietrackには付いているらしいのですが、まだ売ってません
しょうがないので、cubieboard2にトスリンクを追加します。

とりあえず部材は注文しました。
でも、まだ届いてません。

とりあえず今日は、素材となるCDのデータを吸い出すために、
cubieboard2上にcdparanoiaを移植しました。

cubieboard2だと、USB接続のDVDのデバイスパスが以下のようになるみたいで、
この部分だけcdparanoiaの改造が必要でした。

DVDドライブのパス : /dev/block/sr0

改造したソース : scan_devices.c

static char *cdrom_devices[]={
"/dev/block/sr?", <--- 追加
"/dev/cdrom",
"/dev/cdroms/cdrom?",
"/dev/hd?",
:

無事、cubieboard2で、CDのデータをリッピングできました。

ただ、薄々気づいているんです。

当面の興味の対象がCubieboard2で、そのボード上でデバッグしてて、
音楽を再生している場合じゃないって事。

結局、一番近くにあるノイズだらけの端子に、ヘッドフォンを繋ぐ私がいる事実...

2013年9月4日水曜日

公式のSDK

CubieBoard2のSDKが公開されていないなんて間違いでした。
検索すれば普通に出てきますね。

Tutorials for CB2

なんで今まで気が付かなかったのだろう...

でも、IEでダウンロードすると何故かファイルの拡張子が tar になって展開できません。
FireFoxでダウンロードし直しです。

多分、また10時間位かかります。