2009年7月5日日曜日

iMacとiPhoneでBluetoothのヘッドセットを使ってみた

以前からずっと気になっていたBluetoothヘッドセットをこのたび購入したので、iPhone 3GやiMacとつないでみました。
使用感などをレポートしてみたいと思います。


■購入したヘッドセット
某所で紹介されていた、「Bluetoothステレオヘッドセット ELANVITAL EVSH-2882」という奴です。ネックバンド型でA2DPに対応していて通話ももちろん出来ちゃう、その上8000円未満となかなかお買い得。(ソニーとかモトローラのやつは1万6000円とかしますからね><)


■iMacで使う
まずは「環境設定」から「Bluetooth」を開いてヘッドセットとペアリングさせます。ペアリングさせると、「ヘッドセットを有効にする」と「ヘッドフォンを有効にする」の二つが選択できる様になります。

こんな感じ。

実はここに落とし穴があって、
  • ヘッドセットを有効にすると、HSPを用いてiMacとヘッドフォンが通信を行う。
    そのため音楽等を聞くとモノラルで電話並みのひどい音質になる。
  • 逆にヘッドフォンを有効にすると、A2DPを用いて通信が行われるため音質は最高になるが、
    ヘッドセットとして認識されない(要するにヘッドセット内蔵のマイクが使えない)
何この残念な状況orz

MacのBluetoothの扱いが悪いのか、このヘッドセット自体に問題があるのか、それともBluetooth2.1の規格がそもそもそんな使い方を想定していないのかは知りませんが、とにかく「Mac OS X 10.5.7上でELANVITAL EVSH-2882を使う場合、そのままではステレオ音質でヘッドセットとしてマイクを自由に使うことはできない」というのは間違いなさそうです。

それでもいろいろ試して見た結果、以下の手順を取ればステレオの音質でマイクが使えるようになりました。
  1. 「ヘッドフォンを有効」にする。
  2. 「環境設定」の「サウンド」を開き、出力と入力を以下のように設定する。

    出力は、「Bluetooth ヘッドフォン」を選択。


    入力は、「Bluetooth ヘッドセット」を選択。
この設定を行った状態でSkypeを開き、オーディオデバイスを適当に設定して友人とSkypeで通話してみましたが、無事ステレオ音質でマイクが使えました。しかしこの方法は何かしらの無理をしているようで、突然音質がモノラルになったり、突然マイクが使えなくなったりします。その上バックグラウンドで動かしていたiTunesの音が全く聞こえませんでした。ということで、おすすめできません。


■iPhoneで使う
設定方法とかはAppBankさんのこちらの記事が詳しいのでそちらをご参照をば。
http://www.appbank.net/2009/06/19/iphone-news/32183.php
http://www.appbank.net/2009/06/21/iphone-application/32492.php

使ってみた感想ですが、A2DPのおかげで音質はかなり良いです。私はオーディオマニアではないので参考にはならないかもしれませんが、有線のヘッドフォンと全く違いが分かりません。普段から1万円以上のイヤフォンやヘッドフォンを使われるような方でなければ問題ないと思います。

着信があったときの移行もスムーズです。また、着信を受けてからBluetoothヘッドセットの電源を入れて、オーディオデバイスをそちらにに切り替えても問題なく通話が出来ました(ただし友人曰く、ちょっと音が遠いとのことなので、ひょっとしたらiPhone本体のマイクで音を拾っていたのかも)

Macでは音声出力先・入力先ごとに音量を保持してくれていたのですが、iPhoneではどうやらそのような機能がないようです(すべての音量が共通)。そのため、Bluetoothヘッドセットで小さいと思った音がiPhone本体のスピーカーでは大音量と言うことがあります。ちょっと不便。

最大の問題が、「一時停止」「次の曲」「前の曲」ボタンがすべて利用できないことです。私は結構頻繁に曲を次に送ったり一時停止したりする使い方をするので、これらのボタンが使えないのが苦痛になっています。
ひょっとしたら使える機種もあるかもしれませんが、少なくとも今回私が購入したものではダメでした。気になる方はご自身で確認されることをお勧めします。

電池の消耗については、有線よりは確実に減ります。どれぐらいがっつり減るかは未確認ですが、1時間程度付けっぱなしにしていると10%ほど減っていました。(別の要因もあるので一概には決められませんが・・・)

なお、音声コントロールはBluetoothヘッドセットが使用できませんでした。ヘッドセットをペアリングさせて使える状態にしていても、本体のマイクとスピーカーが使用されてしまいました。

結論としては、聞くだけ・通話するだけ専門としてはほとんど申し分ありません。ケーブルが邪魔になるジムでの運動時などでは最大限に威力を発揮すると思います。逆に普段使いでは電池の消耗・iPodコントロール不可などのデメリットが目立つかと思います。


■iMacとiPhoneで併用
ペアリング自体は全く何の問題もありません。iPhoneとiMacの両方に同じヘッドセットをペアリングさせることが出来ました。
しかし当然ですが同時に使うことは出来ません。ヘッドセットの電源を入れた後、「先に認識を完了した」デバイスが独占的にヘッドセットを使います。認識が遅れた方はエラーになりヘッドセットを使うことが出来ません。
iPhoneとiMacの両方のBluetoothがオンになっていると、どちらが先に認識するか安定しないため、
  • iPhoneで使うときは、iMac側のBluetooth自体をオフにする
  • iMacで使うときは、逆にiPhone側のBluetoothをオフにする
という面倒な作業が必要になります。結局、私はiPhone専用としてヘッドセットを使うことにしました。

2009年6月26日金曜日

第5回 Python温泉に参加中



第5回Python温泉に参加中です。以下、随時更新していきます。



■2009/06/26
16:00ぐらい
到着。挨拶もそこそこに早速Mac引っ張り出して開発開発。


18:46
晩ご飯準備中、いすがないので大の大人が20人も階段に座り込んだりたったままプログラム書いたり>< カオス><

19:00
ご飯。Pyspaグッズ販売について説明。Pyspaマグほしい。


19:56
晩ご飯終了。@moriyoshiがパンツ一丁で走り回っていたりとか。

21:04
最近書いてなかったうちにたまったネタでBlog更新。
@nakamura001さんにiPhone 3GSの良さを語ったりとか。

22:02
ひたすらプログラム。眠い、集中力が落ちてきているが何とかがんばる。
iPhone 3GSの新機能 VoiceOverを使ってsayコマンド祭りを試みるが、vの人に「感動を覚えない」と一蹴される><

22:25
眠い・・・寝るー。

■2009/06/27
6:56
おきったー。およそ7時間半睡眠。よほど疲れていたらしい。あと食い過ぎで胃がもたれている感じなので今日は自重する。軽く散歩して目を覚ましてから昨日の続きのコードを書く。
周りは死屍累々。徹夜と思われる4人以外全員寝てる。


7:00
layoutSubviewsの中で[super layoutSubviews];を呼び出してなくてセルがうまく描画されていなかった問題を修正。

8:26
朝ご飯終了。Python温泉鉄の掟のため、朝ご飯タイム(8時〜8時半)は強制的にたたき起こされます。

9:27
くぼけーさんと政治談義とか?やはり渡米して政治学とか専攻されている方は凄い、外から客観的に日本が見られるというのはいいな

10:00
コーディングコーディング。YourTurnのリファクタリングを行ったり。

11:00
お菓子買い出し


12:17
お昼ご飯&コーディング。隣で@nishioさんとvの人がErlangやらHaskelやらについて熱く議論してますが、1mmも理解できないので無視。何か論文みたいなのを確認しているようだが・・・いや、この人たちレベル高杉><

12:21
現在のタイムライン:
コンパイラーとかインタープリターとかCPUとか自作する?

CPU自作の本の表紙が萌え〜で買いづらい

もっと萌え〜なのと一緒に持って行けばいい

むしろオライリー本を萌え〜で挟んで持って行く

「何それ蛇とか萌え〜なのかしらこわい」

12:27
Python談義。@aodagさんがWerkZeuk嫌いですとかそういう話。
@moriyoshiの実装力&PHP力 + @nishiohirokazuの理論 + @tmatsuoのドキュメントスキル + 料理スキルという化け物プログラマの話(しかもニートらしい)

12:34
でもcommit logがひどい「impl」「impl」「impl」「impl「implばっかじゃねーか!」

12:43
rabbitMQのお話、@everesさんとvの人が戦争中
rabbitMQはzero-configulationだよ(ユーザーの追加だけ)!rpmでもyamでもapt-getでも入るよ!

14:56
お昼寝して散歩してリフレッシュ。



15:34
化学実験(コーヒーにドライアイスを投下などする)。

16:27
順調に進まない。あとは設定をつけるだけとか高をくくっていたのだが
設定をつけるって超大変じゃないか・・・

17:45
晩飯撤収タイム。いまのうちに温泉に行ってくることにする。

18:36
カードゲームタイム!


20:12
ご飯終了。カードゲームの続き。
隣では企業偏差値ランキングとかで盛り上がっているが。

22:18
@moriyoshi先生によるLiveプログラミング会(1時間半!)これは熱い!
なぜかjava.applet.Appletでボールを跳ね返すプログラムを作って遊んでいた。

続いて@ianmluiceの作ったSnippleというWebアプリの解説。タスクキューを使ったバックグラウンド処理とか、「メールボックスのような設計」とか(ある人が処理を行ったら、フォロワー全員のメールボックスにキューで処理を投げて、ある人がそのストリームを読めるようにする)

22:46
会議室に降りてきてラストスパート!

23:28
幕間設定できた!!


Just a small step for the world, but a giant leap for me!!

■2009/06/28
1:32
音ファイル設定も下地が完成。後は家に帰って音声素材を探してきて追加するだけ。
どうやら明日には予定通りApp Storeに提出できそうです。

2:00
就寝。

7:00
起床。

8:00
朝ご飯。

9:14
宿泊代金も支払って暇タイム。

10:04
10時より第6回Python温泉受付開始しました。開始5分で28人枠埋まりました。

11:00
解散!おつかれさまでした!

Xcodeのテンプレートを作成する方法

Xcodeにデフォルトで付随しているテンプレートでは満足出来なくなってきたため、デフォルトのテンプレートを改造して自分用の新規ファイル作成テンプレートを作ることにしました。
参考文献はこちら。
http://d.hatena.ne.jp/griffin-stewie/20090315/p1


■デフォルトのテンプレートのあるパス
デフォルトのiPhone SDK用のテンプレートは以下のパスにあります。
/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/
中を見ると、
akisute Xcode$ pwd
/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode
akisute Xcode$ tree -L 1
.
|-- File Templates
|-- Plug-ins
|-- Project Templates
|-- Specifications
`-- Target Templates

5 directories, 0 files
このようにファイル用のテンプレートとかプロジェクト用のテンプレートなどが用意されています。

■自分で作成したテンプレートを置くパス
自分で作成したテンプレートは、以下のパスに配置するとXcodeが認識してくれます。
~/Library/Application Support/Developer/Shared/Xcode/


■テンプレートの書き方
まずは元となるファイルをデフォルトのテンプレートのあるパスからコピーしてきます。今回はファイルのテンプレートを操作したいので、File Templatesディレクトリを丸ごとコピーします。
akisute Xcode$ cp -r File\ Templates/  ~/Library/Application\ Support/Developer/Shared/Xcode/
コピーしたテンプレートを修正します。テンプレートの構成は以下のようになっています。
File Templates
`-- Cocoa Touch Class
    `-- Objective-C class
        |-- NSObject subclass.pbfiletemplate
        |   |-- TemplateInfo.plist
        |   |-- class.h
        |   `-- class.m
        |-- TemplateChooser.plist
        |-- UITableViewCell subclass.pbfiletemplate
        |   |-- TemplateInfo.plist
        |   |-- class.h
        |   `-- class.m
        |-- UITableViewController subclass.pbfiletemplate
        |   |-- TemplateInfo.plist
        |   |-- class.h
        |   `-- class.m
        `-- UIView subclass.pbfiletemplate
            |-- TemplateInfo.plist
            |-- class.h
            `-- class.m
Cocoa Touch ClassディレクトリとObjective-C classディレクトリが階層構造になっており、その下のHogehoge.pbfiletemplateが実際のテンプレートになります。中のclass.hとclass.mを書き換えることで、テンプレートの内容を変更できます。

論より証拠、実際にやってみます。さっきの構造をXcodeに読み込ませると、以下の図のようになります。


それぞれの要素がどの位置に対応しているかがわかります。

実際にテンプレートを編集するときは、class.hとclass.mの内容を適当なテキストエディタで編集します。このとき、«YEAR»や«DATE»のような特定の文字列は自動的に置換されます。iPhone SDK付属のテンプレートを参考にしてみてください。


■余談:«»はどうやって出力する?
基本コピペすれば問題ないですが、自分で入力する場合は、
・JIS配列のキーボードの時は、Option + [とOption + ]で入力できます。
・ASCII配列のキーボードの時は、Option + \とOption + |で入力できます。