Philipsヘッドフォンマラソン Vol. 5 SHL9560

今年もいよいよ大晦日です。そして全5回に渡ってレビューさせて頂くという、Philipsさんのヘッドフォンマラソンも今回が最後となりました。トリを飾るのはSHL9560というヘッドバンドタイプのモデルです。では早速レビューです。

今回のヘッドフォンはアウトドアでスタイリッシュに、かつ快適に音楽を楽しみたい人たちへ訴求するプロダクトとなっているようです。まず目を引くのが、ポリマー加工されたウレタン部。内側には発色の良いイエローがあしらわれており、音楽を聴かずにヘッドフォンを首にかけて街中を移動する際に目立って良いのではないでしょうか?バンド部分は強度かつ軽量なプラスチックでできており、ここには稼働部は含まれておりません。内部のウレタン部が自動的に頭にフィットするように設計されてるので、サイズの調整の必要がありません。

また内側が同様のイエローでカラーリングされたヘッドパッド部にも特徴があり、これはユーザの耳をまるごとすっぽりと包み込むようなデザインとなっており、ヘッドフォンを長時間装着した場合に悩まされる、締め付け感からくる疲労を解消するようになっています。ただ、快適さとのトレードオフなのか、全体的に音が少し奥にあるような印象を受けたのは、この設計が関係しているような気もしました。

サウンドの方は、高音域は概ね良好。中音域は目立つものの、ちょっと無理矢理前に持ってきたような、不自然な印象を受けました。アウトドアでの使用を第一に考えられた設計だからでしょうか。とにかくボーカルはよく聞こえます。そして低音域はこれまでレビューしてきたPhilipsさんのプロダクトに比べれば、締まりはあるものの、比較的抑えられた感じでしょうか?

ヘッドバンドタイプはインイヤー型に比べ、タッチノイズが格段になく、このSHL9560のような軽量で装着感が快適なモデルは、街を颯爽と移動する際には便利に使えると思います。それにやはりこのプロダクトはデザインが秀逸ですね。個人的にはかわいらしい女のコが、街でこれを首掛けしてるのを見かけたら、萌えると思いますw。

例によって、購入した製品に満足しなかった場合、全額キャッシュバックするという、Phillipsの原音力体感キャンペーンが実施されておりますので、レビューで気になったモデルがあった方は、試してみてはいかがでしょうか?

Philipsヘッドフォンマラソン Vol. 4 SHH9756

フィリップスのヘッドフォンマラソン第4回目。今回はiPhone用コントローラが付いたSHH9756。現在Amazonで8000円近い値段で販売されています。いままでのヘッドフォンよりもかなり値がはるプロダクトですね。

では、さっそくレビュー。
今回は最初に残念だったところから。それはなんと言っても、このヘッドフォンのコントローラがiPhone 3Gで使用した場合、ボリュームの調整ができないのです。そもそも付属のQuick Start Guideに記載されている機種が、iPod nano 第4世代、iPod classiciPod touch 第2世代、そしてiPhone 3GSiPhone 3Gでも曲の再生/停止、次の曲/前の曲選択はできるのですが、ボリューム調整はできませんでした。さらにボイスコントロールも3GSのみということです。
iPhoneで音楽を聴いていて、もっとも使用するのは、おそらくボリューム調整だと思います。それだけにこれは痛い。まぁ、3GSユーザには関係ない話ですが。
コントローラの機能については、さらに音楽再生中に電話がかかってきた場合、コントローラの1クリックで電話に切り替えることができるそうです。これは便利ですね。

さて、付属コントローラばかりに注目しがちですが、このヘッドフォンで素晴らしいと思ったのが、ハウジング部に搭載されたシリコン素材のジェルスリーブ。グミを想像してもらえれば近いかな。これがとてもいい具合に耳にフィットし、かつ圧迫感もないのです。
あまり激しい動きをしなくても、ちょっとした動作でヘッドフォンがズレてしまうことって結構あると思うのですが、このジェルスリーブはそれを払拭する、素晴らしいアイディアだと思います。

肝心の音の方は、低音から高音にかけて、どれも安定して聴けます。とくに中音域が聴きやすいように思えました。いままでのヘッドフォンよりも値段が高額なぶん、サウンドもベターな印象を受けました。

ということで、コスト的には少々お高いですが、iPhoneコントローラと、ジェルスリーブが付属していることを加味すれば、充分検討の余地があるプロダクトだと思われます。特にiPhone 3GSユーザには、お勧めです。

購入した製品に満足しなかった場合、全額キャッシュバックするという、Phillipsの原音力体感キャンペーンはまだ実施中ですので、気になった方は試してみてはいかがでしょうか?

LoaderオブジェクトでaddChild()はダメ

AS3.0をやってみると、予想通り分からないことばかりで、blogネタに困らない今日この頃。こうやってハマった経験を晒すことくらいしか、Flash業界に貢献できないのが悲しいところです。

今日のハマりどころはLoaderオブジェクトです。これは外部のswfや画像ファイルを動的に読み込むためのクラスですね。このクラスはDisplayObjectContainerのサブクラス(つまり子オブジェクトを持てる)で、load()メソッドで読み込まれた外部データは、ロードが完了すると自動的に、Loaderクラスの子オブジェクトとなり、Loader.contentプロパティから参照することもできるようになります。

さて、問題はaddChild()。Loaderオブジェクトの中に、子オブジェクトとしてTextFieldを追加する以下のようなコードをコンパイルすると、「LoaderクラスはaddChildを実装していません」というような趣旨のアラートが表示されてしまいます。DidpalyObjectContainerのサブクラスなのに、addChild()を実装していない?なぜ?

package {
  
  import flash.display.Loader;
  import flash.text.TextField;
	
  public class MyLoader extends Loader {
    public function MyLoader() {
      var textfield:TextField = new TextField();
      textfield.text = "Text";
      addChild(textfield);
    }
  }

}

それもそのはず。ドキュメントにも書いてありましたが、LoaderオブジェクトはaddChild()、addChildAt()、removeChild()、removeChildAt()、および setChildIndex() といったメソッドを(使用できないように?)オーバーライドしているとのことなのです。そして、子オブジェクトとして持てるのは、load()で読み込むオブジェクト1つだけだったのです。

僕から言わせれば、コイツはせっかく親から譲り受けた才能を台無しにしてしまうような親不孝息子にしか見えないのですが、まぁ僕も他人様のことをとやかく言えるほどの人格者ではありませんので、そういう奴なんだと理解してやろうと思います。

さぁ、次はどんな罠にハマるのかなw。

マスクをするときの注意

今日のハマりどころはマスクです。AS2.0ではMovieClip.setMask()でしたが、AS3.0ではDisplayObjectクラスのmaskプロパティに置き換えられています。このように「AS2のあのプロパティ、メソッドは、AS3ではどこ行ったんだ?」と疑問に思うことがありますが、そんなときは【ActionScript 2.0からの移行】というページがドキュメントの付録に用意されているので、参照してみるのもいいかと思います。

さて、このDisplayObject.maskプロパティには同じようにDisplayObjectを代入することができます。MyMask、MyObjというDisplayObjectのサブクラスがある場合、以下のようにするとmyObjインスタンスをmyMaskインスタンスでマスクすることができます。

var myMask:MyMask = new MyMask();
var myObj:MyObj = new Obj();
myObj.mask = myMask;
addChild(myObj);

ですが、ここで注意。上記のような書き方だと、仮にmyObjの親のDispalyObjectContainerが移動するなどした場合、親オブジェクトの移動と同時にMyObjは移動するのですが、ディスプレーツリーに登録されていないmyMaskは移動しないので、結果としてマスク位置がずれてしまいます。これを防ぐためには、myMaskも親オブジェクトのディスプレーツリーにきちんとaddChild()して登録しておく必要があります。
addChild()しても、maskプロパティに格納されたDisplayObject自体は表示されませんので、myMask.visible = falseとかする必要もありません。

var myMask:MyMask = new MyMask();
addChild(myMask);  //myMaskもディスプレーツリーに登録
var myObj:MyObj = new Obj();
myObj.mask = myMask;
addChild(myObj);

今回のマスクにしてもそうなのですが、ハマりどころもドキュメントを読めば大抵のことはきちんと書かれているのですが、ハマらない限りじっくりとドキュメントを精査することはないから、まぁこうやって学んでいくしかないのかなと。

Philipsヘッドフォンマラソン Vol. 3 SHL9600



フィリップスのヘッドフォンマラソン第3回目として送られてきたSHL9600。今回は写真のようなヘッドバンドタイプです。ちなみに僕の中ではこういうのをヘッドフォン、前回までのようなのはイヤフォンというのかと思ってましたが、実際のところは知りません。

では、早速使用感をレビュー。まず長所として際立っているのが、低音の良さ。と言っても特別大きな低音がズンズンと響くというような感じではなく、非常にタイトな心地のよい低音が鳴ります。

また、40mmの大型スピーカードライバを搭載しながらも、非常に軽量でコンパクトな設計となっており、さらにイヤーパッド部は回転させることができるので、持ち運びにも便利です。

個人的に残念だったのは、高音域の迫力がかなり控えなこと。普段愛用しているAKGのイヤフォンと比べてみると、高域の音量の違いが顕著で、これだけ締まりのある低音が鳴っているのに、もったいないなぁという感想でした。

もひとつ難点を言うと、ヘッドフォンを装着したときの締め付け感が強く、長い時間音楽を聴いているのが辛かったです。メーカー側からのコメントには、「ヘッドバンドタイプは耳全体を覆うために不快感が少ない」と書いてあるのですが、SHL9600についていえば、これは当てはまらないのではないでしょうか?まぁ、個々人の頭の形や大きさにもよるのでしょうが。

引き続きフィリップスでは、購入した対象ヘッドフォンの音に御満足頂けなかった方に、全額を返金するというキャンペーンを実施しているとのことです。

Philipsヘッドフォンマラソン Vol. 2 SHE9551

フィリップスのヘッドフォンのモニターの第2弾。今回はSHE9551というモデル(SHE9500シリーズのホワイトカラー)をレビュー。「深く澄みわたる重低音」、そして「軽量で、動きにも強いので長時間使用していても不快感を感じさせない」というのが売りらしく、主にアクティブな男性にアピールする製品となっているそう。

さて、実際に10日程使ってみた感想だが、前回のモニタ商品のSHE9700と比べてみると、まず装着したときのフィット感はこちらの方が上。SHE9700はケーブルが少々硬くイヤフォン自体も大きいため、何かの拍子で外れてしまうことが多いよう。それに比べSH9551はケーブルがしなやかで、イヤフォン自体のフィット感も良い。上述したようなアクティブなシーンでは重宝されるのではないだろうか。

肝心のサウンドの方は、低価格の割にはそこそこのクオリティを確保しているとも言えるし、意地悪に言えば特徴に欠ける非常にフラットな音とも言える。確かに低音については安定した重いサウンドが聴けるのだが、中域に伸びがなくこもった感じで、ボーカルもの等を聴くと少し物足りなく、ボリュームを上げたくなる。

ということで、サウンドで言えば、前回のSHE9700のほうがクリアでお勧めなのだが、音楽を聴きながらマラソンをする等といった用途では、こちらのプロダクトのほうが断然使いやすいと思う。価格も安いし、シーンによって使い分けるというのがベストではないだろうか。

こちらの商品も、クオリティに満足できなかった場合は、全額返金するという原音力体感キャンペーン対象商品となっているので、気軽に試し聴きしてみてもいいのではないだろうか。

ガベージコレクションを意識してみる

AS3.0ではこれまで以上にメモリマネージメントについて注意を払う必要があるそうです。そんなわけでMoock先生のEssential ActionScript 3.0のChapter 14: Garbage Collectionを読んでみました。例によってよく理解できないこともあるのですが、理解できたことだけメモ。

ガベージコレクションの仕組み】

  1. Flashが実行されるとある一定量のメモリがOSによって自動的に割当てられる
  2. オブジェクトが生成される度にメモリ容量が蓄積されていく
  3. メモリの蓄積が一定量を超えると、ガベージコレクションが実行される周期が決定される
  4. 3の周期でガベージコレクションが実行され、メモリ内の不要なオブジェクトを削除する


ガベージコレクションの対象】

  • プログラム内で参照されていないオブジェクト。
  • 生成したオブジェクトを手動で削除することはできないが、参照値にnullを代入してやることによってガベージコレクションの対象とすることができる


【その他学んだこと】
ガベージコレクションの対象となっているオブジェクトも、ガベージコレクションが実行されるまでは存在し続ける。そのため、以下のような処理に留意

  1. イベントリスナーの登録解除
  2. timerやintervalの停止
  3. MovieClipの再生停止
  4. 上記の処理を外部から実行できるpublicメソッドを実装*1

こんな感じです。間違って理解している可能性も大いにあり得るので、興味がある方はMoockさんの本を実際に読んでみることをお奨めいたします。

*1:Interfaceの章を読んでたら、ネーミング慣例としてIKillableというのが挙ってました。これはつまりイベントリスナーの解除やタイマーの停止のためのpublicメソッドを実装し忘れないためのInterfaceかと思われます。頭いい!僕はIDisposableインターフェースにdiposeというメソッドを登録して使ってみようと思います。Moock先生にリスペクト。サイン貰いに行きます。