【レビュー】ハイレゾウォークマンNW-ZX2を開封した

フラグシップウォークマンの NW-ZX2 遂に購入したので写真多めでファーストインプレッションレビューをしていきます。

以下が今回購入したものです。

  • ウォークマンZXシリーズ「NW-ZX2」
    • OS: Android 4.2
    • 内蔵メモリ: 128GB
    • 連続再生時間: 61 時間 (MP3)
    • 付加要素: ハイレゾ再生, MicroSDスロット, Bluetooth, DSEE HX, クリアオーディオ+
  • NW-ZX2専用レザーケース「CKL-NWZX2」
  • 密閉型インナーイヤーレシーバー「XBA-A3」
  • ZX/F880シリーズ専用液晶保護シート「PRF-NWH40」

ソニーストア10%OFFクーポンを使ってウォークマンだけで11万円ほど、総額16万円の買い物になりました( ゚_ ゚) その分、DAP として恐ろしくハイスペックです。3年ワイド保証もつけています。

ちなみにこのモデルは音質に特化しているため、それに相反する要素はばっさり捨てられています。例えばノイズキャンセリング機能や内臓スピーカは省かれています。また、イヤホンは付属しておらず、自分でそれなりのイヤホンやヘッドホンを用意してねという感じになっています。

NW-ZX2

まずはパッケージです。

NW-ZX2 パッケージ

重厚な包装でワクワク感が増します。取り出した第一印象はずっしりで、市場に出回っている同サイズのどのスマホよりも重いと思いますw

NW-ZX2 包装

イヤホンの接続端子は今回も金メッキです。

NW-ZX2 イヤホンジャック接続部

NW-ZX2専用レザーケース「CKL-NWZX2」

一緒に購入したケースも開封しました。天然皮革素材だそうです。

CKL-NWZX2 パッケージ

CKL-NWZX2 外観1

パカっと開いて、閉じる時はマグネットで固定されます。サイドに付いている再生ボタンなどの操作ボタンなどは全てそのまま使えるため便利です。

CKL-NWZX2 外観2

密閉型インナーイヤーレシーバー「XBA-A3」

イヤホンです。

XBA-A3 パッケージ

XBA-A3 化粧箱

取り出すのがもったいない><

XBA-A3 外観

イヤホンをしまうためのポーチも付属しています。これが結構良く出来ていて、開いた左右にポケットがついていて、イヤホンのジャックの部分と耳に入れる部分をそれぞれポケットに入れておけば絡まりません。とはいえ、毎回しまうのは少し大変なのでどうするか考え中です(ll´`)

XBA-A3付属キャリングポーチ

あと他にも付属品は色々充実していて、イヤホンのコードの長さを調節するコードアジャクターや、移動中の摩擦音を防ぐクリップ、イヤーピースなどが付属しています。

ここまでで開封の儀式終わりです。

音楽再生してみた

ドラッグ&ドロップで DIR EN GREY の ARCHE を転送してW.ミュージックアプリを起動したところです。写真だと分かりにくいのですが、ディスプレイも結構きれいで美しくアートワークが表示されています。再生してみるとバンドが作り出す空間を感じるサウンドを生々しく味わうことができました。

W.ミュージックアプリ(DIR EN GREY - ARCHE)

カバーアートビュー

W.ミュージックプレイヤーを触っていておもしろい機能だなと思ったのがカバーアートビューです。散らばったCDジャケットから聴きたいアルバムを選べます。

W.Music カバーアートビュー

歌詞表示 / 歌詞ピタ

音楽ファイル名の拡張子を.txtや.lrcに変えたファイルも一緒に入れておくとアートワークの上に歌詞表示してくれます。

W.Music 歌詞表示

音楽転送について

MP3 ファイルを D&D で放り込むだけで転送出来ました。手軽で良い感じです。個人的にオススメの転送方法は BunBackup というソフトを使って PC 側で追加・変更されたファイルのみ差分転送する方法です。

試しに可逆圧縮の flac + cue ファイルも転送してみましたが cue シートは認識してくれないようなのでトラックごとに分けて転送する必要がありそうです。

Android OS

Android 4.2.2 Jelly Bean が入っていました。5.0 Lollipop なんかも出始めていますが、ある程度枯れて安定した OS を入れているとのこと。

ブラウザや Youtube 見るのは問題なく出来ます。音楽再生にかかわらないアプリは大体アンインストールしました。

ちなみに自社で開発している Unity 製のゲームアプリをインストールしてみましたが普通に遊べました。どちらかというと iPhone5 のほうがサクサクかなという印象ではありました。

感想

決して安くない買い物でしたが、音楽を聴くことが一層楽しくなること間違いないです。ピュアオーディオはお金をかけ出すとマジできりがない訳ですが、手軽に一歩進んだピュアオーディオを味わうにはよい機種かなと思います。ファーストインプレッションレビューは以上です。

【Android】現在のActivityスタックの状態を確認したい

Androidアプリ開発をしていると、現在のActivityスタック(画面の重なり)を確認したくなることありませんか。

Androidは画面を開いていくとスタック方式でどんどん上に画面が重なっていき、バックキーを押すと上から順に画面が破棄されていく仕組みになっています。

しかし、ちょっと複雑な画面遷移をしようとすると Activity 起動時の Intent を発行する際に flag指定(FLAG_ACTICITY_CLEAR_TOPなど)をしたり、AndroidManifest の launchMode を変更する必要が出てきます。

タスクとバックスタック – 起動モードの定義について

実際に複雑な画面遷移を実現してみようと試行錯誤していると今のActivityスタックの状態が分からなくなったりします。そんな時は取りあえずコマンドラインの adbコマンドで現在の Task と Activity スタックの状態をダンプしてみるといいと思います。

USBで端末を繋いで以下のコマンドを叩くとダンプできます。ただ、このコマンドは出力される情報量が膨大です。

adb shell dumpsys activity

そこで、上記コマンドの結果に対して更にgrepをかけて、起動しているタスクとアクティビティの一覧だけ表示されるようフィルタリングすると見やすくなります!コマンド例は以下です。最近多用しているコマンドの一つです:)

adb shell dumpsys activity | grep -B 1 "Run #[0-9]*:"

標準のマップアプリを起動して上記コマンドを実行したときの結果はこんな感じになります。

TaskRecord{42466fe0 #7 A com.google.android.apps.maps U 0}
 Run #6: ActivityRecord{4238bb10 u0 com.google.android.apps.maps/com.google.android.maps.MapsActivity}
TaskRecord{42954380 #8 A com.android.systemui U 0}
 Run #5: ActivityRecord{42953138 u0 com.android.systemui/.recent.RecentsActivity}
TaskRecord{424a50d8 #2 A com.android.launcher U 0}
 Run #4: ActivityRecord{424a32b0 u0 com.android.launcher/com.android.launcher2.Launcher}
TaskRecord{425c3758 #6 A com.google.android.gm U 0}
 Run #3: ActivityRecord{42598ed0 u0 com.google.android.gm/.ConversationListActivityGmail}
TaskRecord{423acbd8 #5 A com.google.android.youtube U 0}
 Run #2: ActivityRecord{42350d90 u0 com.google.android.youtube/.app.honeycomb.phone.HomeActivity}
TaskRecord{4254bc50 #4 A com.android.chrome U 0}
 Run #1: ActivityRecord{423e3720 u0 com.android.chrome/com.google.android.apps.chrome.Main}
TaskRecord{42354ec8 #3 A com.android.settings U 0}
 Run #0: ActivityRecord{423b2af0 u0 com.android.settings/.Settings}

上に表示されている Activity ほど最近開いた画面になります。

アクティビティはタスクに属しますが、上記の出力結果は TaskRecord #7 に対して ActivityRecord #6 MapsActivity(GoogleMap) が所属していることを表しています。

Androidの解像度の違いを考慮したデザイン基礎知識

多様にある Android 端末の画面サイズと解像度

Android 端末は様々なメーカから発売されており、多種多様な端末があります。スマートフォンとタブレットも合わせるとかなりの数になります。

そんな Android のアプリデザインを作っていく上で避けて通れないのは、多様にある端末環境のことを考慮したUIデザイン設計です。端末の種類が限られている Apple の iPhone とは異なった事情があります。

考慮してデザイン制作と実装を進めていかないと、せっかくデザイナーさんが頑張ってイケてるデザインを作ったのに実装後に残念な見栄えになってしまったりします。

プログラマとデザイナーは密にやり取りをすべき

デザイナーが画像素材を用意してプログラマがそれを使って実装していくのが一般的ですが、出来ればどういう風に素材を用意して欲しいかお互い相談しながら制作を進めていくべきでしょう。

  • 画像スライスの仕方(png への切り出し方)
  • 用意する画像サイズ
  • 基本 UI パーツのデザインをそのまま使うかカスタムデザインにするか
  • クライアントやデザイナーがやりたいデザインをそもそも実現できるのか

また、相談する時はお互いに基礎知識を持っていたほうが話が早いですが、デザイナーが基礎知識を知っているとは限らないので、プログラマの人は必ず理解しておくべきだと思います。

現場によるかとは思いますが、「Web デザインしか経験のないデザイナーさんにアプリ素材を作ってもらうことになった」とか、割とよくある話だと思います。

主要な用語の意味

ここからの基礎知識の説明にあたり、色々と用語が登場するので、先に意味を書きます。

現実世界の物理的なサイズ単位(センチメートルとか)と、抽象的な論理サイズ単位(dip とか)があるので、ごっちゃにならないように区別して考えたほうが良さそうです。

ピクセル(px)とは

画像や文字を構成する最小単位の点(ドット)。800px は最小単位の点が800個あることを表す。

インチ(inch)とは

1インチ = 2.54cm の物理サイズ。端末の画面サイズを表す時に利用される。例えば7インチタブレットとは対角線の長さが 17.78cm の画面サイズのタブレットのことを指す。

dpi とは

Dot Per Inch の略。1インチ(=2.54cm)の幅にドット(画像や文字を構成する最小単位)がいくつあるか、その数を表す。この値が大きいほど1ドットの物理的な大きさが小さくなり、よりきめ細かくなる。

端末の解像度だけで dpi 値が決まるわけではなく、画面の物理サイズ(インチ)も影響する点に注意。

dip(dp)とは

Density Indipendent Pxcels の略で、画面密度に依存しない抽象的なピクセルを表す。Android で大きさを指定する時に使う単位。dip を省略してdpとも表記する。

Android 端末が 160dpi(mdpi)のときに 1dip は 1px で表示される。また、320dpi(xhdpi)のときは倍の密度なので 1dip は 2px で表示される。

dip でサイズ指定しておけば、画面密度が異なる端末でもほぼ同じ物理サイズで表示してくれる。48dip を指定すると物理的な大きさは 9mm 前後になる。

px で直接サイズ指定しちゃうと、画面密度が異なる端末で見えるサイズがもろに変わってしまうので、基本的に扱わない。

※ dip と dpi があってややこしいけど、別な単位なので注意。

画面密度に合わせた素材をそれぞれ用意する

Androidには画面密度(dpi)の大きさの分類がいくつかあります。その分類ごとに画像サイズを調整した素材をそれぞれ用意しておくことが出来ます。

画面密度(dpi)の分類一覧

画面密度分類 dpi px/dip シェア
(2012年)
シェア
(2016年)
備考
ldpi 120dpi 0.75px/dip 2.2% 2.7% ほぼ使われていません
mdpi 160dpi 1px/dip 18.0% 13.6% シェアは低下傾向です
基準となる分類です(baseline)
tvdpi 213dpi 1.33px/dip 2.4% Nexus7(2012)などが
該当します
hdpi 240dpi 1.5px/dip 51.1% 42.4% 主流です
xhdpi 320dpi 2px/dip 28.7% 24.1% 主流です
xxhdpi 480dpi 3px/dip 14.8% シェアを伸ばしています

※シェアのソース: Dashboards | Android Developers

大きさの比率: 1(mdpi) : 1.33(tvdpi) : 1.5(hdpi) : 2(xhdpi) : 3(xxhdpi)

なので例えば、xhdpi 用の素材を75%のサイズにしたものが hdpi 用素材となります(2*0.75=1.5)

大は小を兼ねるから xxhdpi 用の素材だけ用意すればいいんじゃないの?

その通りとも言えます。大きい dpi 向けの大きい素材だけ用意しておけば勝手に縮小して表示してくれます。

ですが、小さい dpi 向け素材を用意しておかないと以下の様なデメリットも発生しますので、シェアの多い dpi 向けの素材は用意しておいた方が無難かもしれません。

Android:xhdpiリソースしか持たないアプリが抱える問題

全ての dpi 種別向けに素材を用意していると当然アプリサイズ(容量)も大きくなるのでケースバイケースで考えましょう。

デザイナー目線から見た UI 設計の仕方

  • 多様な画面サイズがあることを見越した UI 設計
  • リキッドレイアウトや 9-patch などを活用して解像度が異なっても大丈夫なデザインにする

結局のところデザイナーは何の解像度を基準に素材を用意すべきか

横幅: 320dip 〜 360dip を目処に
縦幅: 480dip 〜 540dip を目処に。480dip で収まるようにしておけば大体の機種で可視領域に収まるはず

※必ずしも上記 dip 範囲に収まるわけではありません。

縦幅は様々な種類があるので、高さが違っても大丈夫なデザインにしときましょう。
横幅は 320dip と 360dip の2タイプが主流です。

仮に320x480dipを基準画面サイズと考え、これを px に直すと以下になります。

mdpi向け素材: 320×480(px)
hdpi向け素材: 480×720(px)
xhdpi向け素材: 640×960(px)

タブレットの場合はもっと大きいpx(dip)が想定されます。

デザイナーはどういう手順で用意すべきか

まずは市場に出回っている最も大きい dpi を基準に素材を用意して、最後に小さい dpi 向けにサイズだけ小さくした素材をまとめて作成するといいです。

最近やった事例だと、まず xhdpi 用の素材を作成し、最後にそれを75%サイズに縮小した hdpi 用素材もまとめて作成という手順で用意しています。

dip という大きさの感覚

スマートフォンの画面の横幅は 320dip というのを一つの目安に覚えておくと良さそうです。
タブレットの場合はもっと大きいです。例えば Nexus7 の場合は 600dip(800px * 0.751density)もあります。

エンジニア目線のレイアウトの組み方

  • フォントのサイズは sp 、それ以外のサイズは dip が基本
  • MATCH_PARENT(FILL_PARENT)や weight 指定を活用したリキッドレイアウトを活用する
  • 大きさを指定する単位に直接ピクセルを扱うことは避け、dip を利用する
  • AbsoluteLayout は避ける
  • ゲームなどでアスペクト比をきっちり維持して表示させなくてなならない場合は、上下に黒帯を入れる方法などを検討する

ImageView のサイズを WRAP_CONTENT にすると表示ピクセル数はどうなる?

例えば100×150ピクセルの画像を WRAP_CONTENT で表示した場合、基本的には以下のように調整されて表示されると思われます。

  • mdpi 環境の機種では100×150ピクセルで表示される
  • xhdpi 環境の機種では200×300ピクセル(2倍)で表示される(なので xhdpi 用素材が必要という理屈)

それ以外にも、様々な要因でサイズは調整されます。
参考: ImageViewの表示サイズの決まり方(リライト)

参考サイト

編集履歴

  • 2013/03/13追記: 一部 dpi 分類名に誤りがあったので修正しました。
  • 2016/02/23追記: Densities ごとのシェア情報に2016年1月の情報を加えました。リンク切れを修正しました。