2017年8月26日土曜日

Roon + HifiBerry でHifiBerryやめてみる

さて、色々Roonのstorageに突っ込んで楽しんでる毎日ですが。HifiBerry Digi+ Proの音質にちょっと不満というか、すっきりしないモヤのようなイメージがあったのです。

まぁ、1万以下で組めるRaspberryPIベースのDigital製品としてはかなりいい線なんだと思いましたが、自分がリファレンスとするAVプリの音質(主にCDをAESでつないだ場合の評価ですけど)とちょっと離れすぎてるかなという印象でした。もっといい音するはず的な?。単純な解像度比較でも、以前所有していたMY-D3000とアナログプリの組み合わせに完全に負けてましたね。でも、コスパはいいと思いますよ。小さいのでシステムにも組み込みやすいし。

ROCKはIntelのNUCに組み込むだけのことがあって、サウンド出力はHDMIが可能です。ALSA経由となります。とりあえず、HifiBerryでいくつかのリファレンスを試聴したあとに、システムを組み替えてみます。まず、Akasa Plato X7のVESAマウントを外して、かわりに付属の足を組みつけます。ラックにのっけて、HDMIを接続、AVプリに入力。Ethernetと電源を接続したら完了です。

早速電源をいれて、直前に試聴した曲を再生してみます。おー、解像度と安定度が全然違う。音場もスカッとはれて見通しが良い感じです。音像定位も確実に向上してます。うーん、HifiBerryよりよかったか。。

もともと、Pure+AVのシステムなんですが、Core i5搭載してるようなPC関連をラックにいれるのはためらいがあったので、HifiBerryをちょっと離して設置するみたいな感じがいいだろうかと、構築したわけだったんですが、ここまで違うと元には戻れないですねぇ。。

HifiBerryはもっとカジュアルに聞くためのシステムでも組んだ時のために取っておくかなぁと思います。

というわけで、現在の結論としては、HDMIでデジタルストリーム受けられるアンプなりDACがあるのであればROCK入れたNUCだけで十分ってことですね。あと、静音化は必須ってとこでしょうか。

HDMI 0 をEnableに

またしばらく、この構成で楽しんでみることにします。



2017年8月15日火曜日

Roon (ROCK) + HifiBerry Digi+ Pro その後

快適に使ってますが。何点か、

HifiBerryのroonイメージは現時点でshutdownの方法はないようです。アダプタ付属のスイッチで適当に電源おとしてたら、起動しなくなりました。これはフォーラムでも公式に発言されてますので、壊れたらイメージ入れなおしてね?とのことです。

焼きなおすと、設定もやりなおしなので、AudioからHifiBerryを選択するところからです。その後再生開始までのディレイを設定したら終わりなんで。頻繁に電源切りたい人は予備のOSやいたSDを準備しておいたらいいと思います。

まぁ、普通に考えたらLinuxでshutdownしないで電源落とすってアレですよね。。

あとTIPSとして、トリビュートもののCDをRIPしてタグつけると、曲ごとにアーティストが変わってしまって、roonに取り込んだ時に同じアルバムなのに、何枚もアートワークが表示されることがありますが。roonの画面から簡単にまとめられます。

Windowsなら右クリックで楽曲を選択して、EditのMerge Albumsで1つのアルバムとしてまとめられますので、やってみてください。

まだまだいろいろ楽しいw

2017年8月14日月曜日

Roon Optimized Core Kit(ROCK)のインストールとHifiberry Digi+ Proのセットアップ 後編

前編では、ROCKサーバのNUCへのインストールとセットアップ。コーデックのインストール、メディアドライブのフォーマット。が終わったはずです。次はRoonの再生側デバイスであるHifiBerry Digi+ Proについて書きたいと思います。

HifiBerryはRaspberry PIベースのDACボードで、3種類あります。

  1. DAC+:アナログラインレベル出力のDACボード
  2. Digi+:SPDIF and Optical デジタル出力ボード
  3. Amp+:DACとデジタルパワーアンプ
の3つです。1のDAC+が一番利用者が多い感じかな?通常のアナログアンプに組み合わせるのではこれがいいでしょう。自分のようにAVプリアンプと組み合わせるのであれば、デジタルの出力のあるDigi+となります。あと、直接スピーカーつなぎたいならAmp+という感じですね。

Digi+はスタンダードモデル、トランス搭載モデル、オシレータとトランス搭載モデル。に分かれてますが、自分はPro(トランスとオシレータ搭載)モデルを選びました。I2Sバスをつかった外部クロック供給ボードとしても動作するようなので、音質の向上が期待できるかと考えました。

HifiBerryをRoonでつかうにはHifiBerryが提供するroonイメージをmicroSDに書き込む必要がありますが、動作要件としては、Raspberry PI 2 or 3みたいなので、特に理由がなければRaspberry PI 3を使うのがいいと思われます。技適とか面倒ですけど、ここは妥協しないで行きましょう。


上のリンクはHifiBerryのサイトのblogですが、参考になります。ある程度のパワーがいるのでしょうね。HifiBerryは日本でも扱っている会社がありますけど、全部のモデル扱ってないみたいだし、普通にHifiBerryから買うのがいいかもしれません。PayPalアカウントがあれば楽です。

自分はDigi+ Proとスチールケースを注文しました。発送も早くておすすめです。

さて、モノがとどいたら、OSの書き込みですが、マイクロSDを用意して、適当なライターで書き込みます。書き込むイメージのリンクはいつもこれ。


展開したらimgをmicroSDに焼きこみます。microSDをRaspberry PIに挿入したら、Ethernetをつないで(推奨)デジタル出力をDAC(AVプリアンプなど)に接続し、電源を投入したらおしまいです。面倒な設定は一切いらないです。Roonがオフィシャルに認めたRoonReadyプレイヤーの出来上がりです。

次にRoonのControllerソフトをインストールします。


いろいろありますが、全部入りのやつをおとして、インストール。インストール途中で、coreにするか?とか聞かれますので、「いいえ」を選択しておきます。Coreは前編で構築したNUCをつかいますので。インストールして起動するとはじめにCoreの選択がありますが、そこでNUC(ROCK)を選んでおきます。次に、再生するオーディオデバイスの選択をします。

上の画像だと、一番上のUSB Audio DACというのが、WindowsPCにつながってるDACで、一番下のがネットワーク上のRoonデバイスになります。それぞれEnableボタンを押すとこのようになります。Zoneとして名前をつけておきます。この作業が終わると


こんな感じでRoonのソフトから認識します。出力したいデバイスを選んで終了です。同一ネットワーク上にRoonを実行しているPC/MACがあればそこにつながってるデバイスもこの画面に出てきますので、再生の指示を行えます。楽ですねー。それぞれのデバイス毎に再生する楽曲を選べます。

設定で注意するポイントとしては、MacのCoreAudio経由でDACに出力するときなどで音がガビガビになる場合は


Use Exclusive Modeを有効にしてみてください。改善するはずです。それから、再生につかうDACがものによってはサンプリングレートによって内部でリレーが切り替わるようなものの場合、再生の頭がきれてしまうことがあります。この場合、


Resync Delayの設定をします。だいたい3000msもあれば切り替えの遅いAVプリアンプなどでも頭が欠けることがすくなくなります(ごくまれに欠けます)。なぜこれが必要かというと、RoonにはRadioモードというのがあって、現在再生中の楽曲と同じ感じの曲を自動的にライブラリから選択して、次々に再生してくれるモードがあるのですが、様々なサンプリングレートがごちゃ混ぜのライブラリですと、この機能が生きてきます。44.1Khzしか使わない人なら関係ないですけどね。こういう細かいところまで配慮が行き届いてる感じがイイですね!

というわけで、1時間弱で書き飛ばしたテキストですので、アレな部分は目をつぶってくださいねw。

まぁ、これからはRoonだよ!と、素直に言えないのは日本語の問題ですかね。日本語化されることは当分なさそう。というか日本のメーカーもRoon対応してほしいですね。そうなれば状況もかわってユーザも増えそうです。海外ではハイエンドのメーカーがネットワーク対応のプレイヤーを出すときかなりの確率でRoon対応になってきてる気がします。

あ、ちなみにMP3TagとかでUTF-16でちゃんとタグいれとけば、普通に日本語の曲名とか表示しますんで。一回セットアップしちゃえばそのあとは全然違和感ないですね。

HifiBerryとかめんどくせぇというひとは、比較的低価格なRoonReadyのやつありますから、それつかうのもいいかも。自分的におすすめはROCK+HifiBerryですけどね。

それではまた。。



2017年8月13日日曜日

Roon Optimized Core Kit(ROCK)のインストールとHifiberry Digi+ Proのセットアップ 前編

前回に引き続き、Roonネタです。今回はRoonのライブラリをストリーミングするサーバの構築と、それを受けて再生(正確にはデジタル出力ですが)するHifiberry Digi+ Proのセットアップについてです。

Roonのソフトウェアの考え方ですが、

  • ライブラリを管理してストリーミングするサーバ:Core
  • 音楽ストリームを受信して再生する:Output
  • 音楽再生を指示する、楽曲データを表示する:Control

とい感じで大まかに分かれています。インストールする時に自分の環境に合わせたものをインストールします。CoreはDLNAで言う所のNASみたいな存在で、DLNAサーバ(DMS)的なもの、Outputはレンダラー(DMR)、Controlはコントローラー(DMC)といった感じに分けられますが。RoonにおいてはCoreの存在が重要です、このサーバが実際の楽曲とは別にDBを内部的に構築し、ネットワークで接続されたControlに楽曲のメタデータなどを様々に提供してくれます。このメタデータがRoonの優れている部分でもあります。

さて、まずはサーバ(Core)の構築からです。Roonには公式にIntelのNUCをサポートしたLinuxのイメージが存在し(ROCKと言います)、これをダウンロードしUSBメモリなどに一旦焼いたものを使ってNUCにサーバをセットアップします。IntelのNUCは現在ですと

NUC7i3XXX
NUC7i5XXX
NUC7i7XXX

シリーズがあり、2.5inchストレージを内蔵できるもの、できないものなど、どれを選ぶか迷うところですが、ポイントは2点です
  1. NUC内部にOSストレージ(RoonメタデータDB)以外の楽曲ストレージを内蔵するか?
  2. ゼロスピンドル構成にして静穏化を狙うか?
特にゼロスピンドル化は初めから意識してパーツを選択しないとダメですので、気をつけたいところです。楽曲のストレージは、膨大なライブラリがすでにある人はそちらを使いたくなるでしょうし、自分のようにFLAC等で一旦全部Ripし直して、厳選してRoonで使いたい人は内蔵を選ぶのも手だと思います。

自分はNUCで全ての楽曲を管理する+完全にゼロスピンドルとしてノイズを排除する。を目標に構築を行いました。まず、
  • NUC7i5BNH
  • M.2SSD 128GB (Roon DB & Roon OS)
  • 4GB x 2 DDR4 Memory
  • 980GB SATA3 SSD ( Sandisk Ultra 2 )
  • ファンレスケース Akasa plato x7
という選択です。7i5を選択した理由はAkasa plato x7が公式に対応するのが7i5までのためです。多分TDPの問題かな?熱暴走も怖いので。。ケース交換しちゃうので、BNHにすることは必要なかったかもしれませんが、ファンレスケースがうまく機能しなかった場合の保険です(結果的に問題ありませんでしたが。。)

ちなみにあまりスペックを盛っても、楽曲の数にもよりますが、あまり意味がない感じですね、公式のドキュメントにも、準備するべきスペックに言及がありますので、気になるかたは参照してみてください。


まず組み立てですが、NUCのオリジナルケースの場合は、M.2 SSDと2.5inch SSDとメモリを取り付けたらおしまいです。HDMIとキーボードを接続して起動し、BIOSの設定でそれぞれのデバイスが認識されているか確認しておきます。

次に、NUCのBIOS更新です。Roonlabsに推奨のBOISバージョンの記載がありますので、それを参考に、だいたい最新にしてOKぽいです。

BIOS更新が終わったら、Roonlabsから、rockの最新イメージをダウンロードして、適当なサイズのUSBメモリに焼き込みます。焼き込みが終わったら、NUCのフロントのUSBポートに差し込んで起動し、インストーラを起動します。インストール先を聞かれますので、M.2 SSDを必ず選択します。

ROCKのダウンロード

一通り、完了してNUCを起動するとサーバが自動的に起動します。IPが画面に出ますので、ブラウザからアクセスすると、コントロールパネルが表示されます。

コントロールパネルが表示されたら、やることは2つ。
  1. ffmpegのバイナリのインストール(コーデック)
  2. MediaStorageのフォーマット
です。以上が完了するとROCKに楽曲を転送する準備が完了します。Windowsからは\\ROCKでアクセスできます。参考動画でほぼいけます。内部ストレージのフォーマットを別にやるくらいです(UIから可能)。

参考動画:youtube


<ファンレスケースへの組み込み>
Akasaのplato x7への組み込みは多少面倒ですが、付属のマニュアルに従えばすんなりいきます。ちなみに組み立てに必要な部材は全て含まれてますので、追加で買う必要はないです。したの写真のように、組みあがります。VESAのマウントにひっかけられるようなパーツが付属しますので、自分はメインディスプレイの背面に取り付けています。結構重さがありますので、ディスプレイによっては傾いちゃうかもしれませんね。


akasaはファンレスのPCケースなどを作っている会社ですが、platoの他にもNewtonというケースもあります。NUCの世界はカスタムなどが盛んなのでこういうったケースなども豊富で楽しいですね。探せば色々出てきましたが、値段とデザインでplato x7を選びました。

Quiet PC / Akasa plato x7

日本だとほとんど輸入しているところが無いので、自分はQuiet PCというネットショップで購入しました、発送がめちゃ早かったので正解かな?Amazonで高いの買うより良いかと思われます。参考動画はnewtonですし古いですが、手順はほぼ同じ。

参考動画:youtube


後編ではHifiBerry Digi+ Proの構築やりたいと思います。






Roonを使ったシステムを構築してみた

最終的にHifiBerryなしの構成に落ち着いてます。その辺は最新の記事を参照してみてください。2017.08.27

2015年8月15日土曜日

OnePlus 2 買ってみた

久々にスマホ変えたい病が発症して、一番興味のあるOneplus2買ってみた。
いろいろ失敗もあるので、もし買う人がいたら参考に。

OnePlus 2 site ;)


まず。Dual SIMについて。

Oneplus 2には3つのハードウェアバージョンが存在しているらしく。それぞれが異なるリージョンで
利用されることを念頭においているらしい。確認されいるバージョンは

A2001
A2003
A2005

の3種類。地域としては、EU/Asia、Notrh America、Chinaというように3つの地域で分かれている。
どのモデルIDがどれに相当するのかは不明ですが。自分のOneplus 2はChina版だと思われ
A2001のモデル名が確認できます。

さてここからはOneplusのフォーラムからの引用になるんだけど。

EU/Asia

GSM: 850, 900, 1800, 1900MHz
WCDMA: Bands 1/2/5/8
FDD-LTE: Bands 1/3/5/7/8/20
TDD-LTE: Bands 38/40/41

3 and 20 are used almost all over Europe, but not at all in North America. Band 8, although available in both versions, is used in Europe and India but is seeing increasing adoption worldwide.

North America

GSM: 850, 900, 1800, 1900MHz
WCDMA: Bands 1/2/4/5/8
FDD-LTE: Bands 1/2/4/5/7/8/12/17

For NA, the removal of bands 3 & 20 allows us to add all the GSM bands you’ll need.

China

GSM: 850, 900, 1800, 1900MHz
WCDMA: 1/2/5/8
TD-SCDMA: 34/39
TDD-LTE: 38/39/40/41
FDD-LTE: 1/3/7

The Chinese version will have very limited 4G compatibility in Europe and North America. More importantly, it only has one IMEI meaning you will not have dual-SIM capability outside of China. If you like having dual SIMs, do not buy the Chinese version.

ということみたいですな。そこで一番ポイントなのが、IMEIの取り扱い。
中国版では2スロット存在していてもIMEIは1つしか登録されておらず。*#06#で確認しても
同じIMEIが2つ表示されるし、外箱も1つしかIMEIは記載されていない。

https://forums.oneplus.net/threads/oneplus-2-regional-versions-explained.338780/

A2005と思われる端末の箱がうつる動画をYoutubeで発見したが、拡大してみるとIMEIが2つ記載
されていそうな感じなので。中国版の制限としてDualでの運用は無理ぽい。

Dualスタンバイ(DSDSらしい)に興味がある人は中国版は避けること。ちなみにoppomartは高確率で
というか、中国版です。

Dualで使うことあるかと?うーん、ぶっちゃけないかなと思う。なのでサポートしている周波数的なものを
見てかうので正解かな?

Google+のOnePlusのForumでも発言がありましたけど。EU/Asiaの国際版とか北米版は、Inviteが必要みたいですね。ebayとかにInviteコード出品してる人もいるみたいです。いちおう待ち行列に入ってるみたいなので、まつかな。。といいつつebay突入してみたりしてw

この情報はあくまで自分が探した情報で、元ネタの保証もないので、購入する場合は自己責任で
よろしく。

2015年7月25日土曜日

Android 5.1 Lollipop SELinux policy injection for system apps.

というわけで久々のエントリですが。完全に自分用。
忘れっぽい自分のために。。

AndroidもlollipopになってからSELinuxが完全にEnforceになったようで、様々なデバイスやファイルに個別の権限を設定し運用されることになりました。たとえば、よくapkのなかにarmの実行形式のバイナリをrawファイルとしておいて、Runtime.execするようなアプリがありますけど、そういったものは完全にブロックされます。アプリ内臓のファイルは実行可能には基本的にはなりません(chmod云々の問題でなくSELinuxでの制御対象)。同様にいままでアプリに許可されていたデバイスへのアクセス権限もpermission以外にSELinuxによりkernelレベルで制御されます。/dev/uinputなんかもネットではいろいろ話題になってますね。JNIからアクセスできねーwwとか。。今回は、そういったエントリです。

最近MTKベースのrootとった端末で遊んでますが、lollipopからのSELinuxでいろんな制限がでてきましたね。いままで動いていたきわどいアプリとか動かないなんてことはふつうにありますね。

自分の体験した例では、/dev/uinputへのアクセスがアプリから完全にできなくなったことで、/dev/uinputを使うようなアプリの実行ができなくなったことです。いわゆる、仮想マウスとか、仮想キーボードを作ってリモートコントロールする、VNCなんかのアプリはこの影響を受けてると思います。

簡単な解決方法があればいいのですが。。いままでのところSELinuxのポリシーをいじるしかないという結論で、その辺を調査してみたということです。

まず、/dev/uinputの状態を見てみましょう。Zオプションでタグが見れます。

ls -lZ /dev/uinput
system net_bt_stack u:object_r:uhid_device:s0 uinput

となってます、基本的にuser=system group=net_bt_stackで、uhid_deviceドメインに属してます。

デバイスがどんなタグをもつかueventd.rcをみたらわかりますが、端末によってはあとから、inir.rcなどでchownとかしてますので、多少注意が必要です。

さて、オーナーがsystemなので、きほんてきにはsystemのユーザのcontextを参照するわけですが。seapp_contextsファイルがだいたい端末のルートにあるので、参照してみます。


user=system domain=system_app type=system_data_file

という感じでsystem_appのドメインを参照するようです。さて、実際のシステムはAOSPにあるようなSELinuxのポリシー以外にも独自のポリシーを適用していることが多く、実際の端末の状態を確認しないと、どんなポリシーが対象のアクセスを制御しているのかわからないことが多いです。なのでAOSPのソースのなかのSELinuxのポリシーだけを見てもダメってことです。もちろんターゲットデバイスのソース一式持ってるなら話は別ですけど。。

実際の端末のポリシーがどんなものかを確認するには。setoolsが必要です。setoolsのAndroid版を開発してくれている方がいますので。githubから落としてndk-buildしてバイナリを作成します。

https://github.com/xmikos/setools-android

非常に使えるツールです。クローンしたら、ディレクトリのトップでndk-buildするだけで、幾つかのCPUアーキテクチャに対応したバイナリが生成されます。詳しいことはgithubのページを参照してください。

git clone https://github.com/xmikos/setools-android.git
cd setools-android
ndk-build

できあがった3つのバイナリを端末に転送してpermissionを実行可能に。

adb push sepolicy-inject /sdcard/
adb push sesearch /sdcard/
adb push seinfo /sdcard/
adb shell
su
cd /data/local/tmp/
cp /sdcard/se* .
chmod 755 ./se*
それから、現在のsystem_appのドメインに定義されているポリシーをダンプしてみます。

/data/local/tmp/sesearch --allow | grep system_app
これで、system_appに許可されているポリシーが表示されます。この中にさきほどlsで確認した。uhid_deviceのアクセス許可が記述されていなければ、アクセスは拒否されます。
あ、ポリシーファイルはルートにあるsepolicyというファイルです。setools-andoidは特に指定しなければこのルートにあるsepolicyをデフォルトで参照してくれます。

さてここからが本番、今回はsystem_appドメインにポリシー追加したいと思いますが、appdomainあたりに追加するには注意が必要です。そもそもいろんなポリシーが不許可なdomainですので。今回追加するポリシーは/dev/uinputへのアクセス許可ですので。

allow system_app uhid_device:chr_file rw_file_perms;
とい感じになります。rw_file_permsはマクロで定義されたパラメータで幾つかのシステムコールの発行が可能になります。気になる人はglobal_macrosの定義を読んでみるといいでしょう。

さてこのポリシーを実行状態の端末に追加するにはsepolicy-injectコマンドを使います。ただし、先ほどのマクロ指定はつかえませんので、ちゃんとaccess_vectorsにあるキーワードをつかって指定しなくてはなりません。rw_file_permsは展開すると。

ioctl read write getattr lock append open
という感じになります。これを指定しますが、この新しいポリシー(TE)を含むポリシーファイルを作成して、それからそれを適用するという感じでやってみます。


cd /data/local/tmp
./sepolicy-inject -s system_app -t uhid_device -c chr_file  ¥
    -p ioctl,read,write,getattr,lock,append,open ¥
    -P /supolicy -o ./supolicy.new
カレントに supolicy.new が生成されればOKです。確認は上記のsesearchコマンドでやります。
./susearch -allow ./supolicy.new | grep system_app | grep uhid_device
追加したものが表示されればOK。次に適用です。/dev/uinputにアクセスするアプリもインストールしておいてください。
cd /
mount -o rw,remount /
cp /data/local/tmp/supolicy.new ./supolicy
sync
load_policy ./supolicy
am restart
最後にam restartすることでsystem_appドメインのアプリに対して、dex2oatなどが再度走ります。それで/data/data/あたりがリフレッシュされて利用可能になる感じ?。よくしらべてないのでカンですが。そんなイメージw

ちなみに端末を再起動してしまうと、sepolicyはもとにもどってしまうので、上記の方法で試してます。sepolicyを入れ替えるのが本来の方法でしょうけど。。ま、確認できればいいので。アプリが/dev/uinputにアクセスできれば仮想キーボードとか作成されますので。リモートからキー入力ができたりと、べんりなvncとかうごきますね。

今回の記事はかなーり適当。ソースをよんで裏取りとかしてませんので。もしやってみるという人は参考程度にね。

あ、ちなみに動かしたいアプリのAndroidManifestのpermissionとかちゃーんとしてないともちろんダメっす。

では。。