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のデータの作り方が分かってません。

0 件のコメント:

コメントを投稿