[JB]iOSのプッシュ通知を音声読み上げするSpeakingPushNotification
2014/08/13
価値ある情報をユーザー視点で発信するブログ
2014/08/13
もくじ
スマートフォンから出る音声を、もっとプッシュ型の情報伝達手段に使ってもいいのではないか、というのが昔からの持論。
そこで、iOSのプッシュ通知を音声読み上げするJailbreak Tweak、SpeakingPushNotificationというものを作ってみました。
動画は、以下のメンションを読み上げています。(続きは[Read More]から)
https://twitter.com/At_Zamasu_Zansu/status/489500344242565120
SpeakingPushNotificationは、iOSのプッシュ通知を音声合成で読み上げるためのJailbreak Tweakです。
しゃべらせるとミュージックアプリのiPod機能の再生等が止まるので、SpeakingPushNotificationで調停してポーズ/再開処理をしていますが、対処しているのはミュージックアプリのiPod機能だけです。
また、ミュージックアプリのiPod機能のポーズ/再開処理も完璧でなく、不整合が起きる場合がありますが、これ以上きめ細やかに制御するつもりはありません。
しゃべらせることと他のオーディオ再生が排他なので、どうしても限界があります。
プッシュ通知のバナー表示を利用しているので、これを非表示にすると読み上げられません。
SpeakingPushNotificationをインストールすると「設定>SpeakingPushNotification」が出現します。
アプリケーション選択画面は、以下のようになっています。
変数msgに通知メッセージが入っているので、加工してmsgに戻します。
msg = msg.replace(/@/g, "");
変数idには、通知メッセージを飛ばしてきたアプリのBundle Identifierが入っているので、アプリ別の処理ができます。デフォルト値である以下の例は、Tweetbot3からの通知のメッセージ中のアットマークを削除、の意。
if (id == "com.tapbots.Tweetbot3") { msg = msg.replace(/@/g, ""); }
@を消すほかに、やりたいことがあったら縦に連ねて書いていきます。
if (id == "com.tapbots.Tweetbot3") { msg = msg.replace(/@/g, ""); msg = msg.replace(/RT/g, "リツイート"); msg = msg.replace(/花澤/g, "はなざわ"); msg = msg.replace(/香菜/g, "かな"); }
通常、読み上げはシステムの言語環境に依るので、日本語なら日本語読みされます。
例外的に、読み上げる通知メッセージがASCII文字だけで構成されていた場合は、言語環境に依らず英語で読み上げます。
判定には、NSStringのsmallestEncodingを使っています。
「〜さんからのツイート Hello, World」という読み上げがされている場合は、「Hello, World」の部分が英語でも、日本語読みされます。
こういう場合に英語読みしてほしい場合は、Pre Process (JavaScript)機能でASCII文字じゃないものをつぶしてください。
コメントを寄せていただいたholo_holo氏によれば、TweakのNowListeningとの併用で可能のようです。
「Target Application」で「ミュージック」をオンにします。SpeakingPushNotification Ver.0.0.2以降では曲名も読み上げられます。
「ミュージック」が発行するローカル通知なので、「ミュージック」が前面にある間は通知が表示されないようです。
曲名とアーチスト名はタブ区切りにした(Ver.0.0.3より)ので、読み上げを加工する場合はそれを利用します。
Ver.0.0.4から、NowPlayingアイテムの情報を、各変数から参照できるようにしました。
if (id == "com.apple.Music") { msg = title + " by " + artist; }
if (id == "com.apple.Music") { msg = artist + ", " + title; }
if (id == "com.apple.Music") { msg = title; }
if (id == "com.apple.Music") { msg = title + " by " + artist + " from " + albumTitle; }
if (id == "com.apple.Music") { msg = title + " by " + artist; } if (id == "com.tapbots.Tweetbot3") { msg = msg.replace(/@/g, ""); }
clipboard変数にテキストを入れておくと、これをクリップボードにコピーします。
JavaScriptで加工するに当たり、通知テキストをテスト用に手元に持ってきたい場合に使うと便利かと。
clipboard = msg;
ProwlのようなAPIが公開されたプッシュ通知アプリを使い、サーバから、例えば毎時0分に時刻を知らせるプッシュ通知を送れば、時報になります。
サーバ側でRSS等を監視して、変化があったら通知を送る、といったことをやるのも面白いですね。
Prowl: Growl Client
カテゴリ: Utilities
販売元: Zac West(サイズ: 722 KB)
全てのバージョンの評価: (50 件の評価)
SpeakingPushNotificationは無保証、無サポートです。自己責任でお使いください。
iOS 7.1.2 / iPhone 5s
いつもの New野良リポジトリ をCydiaに登録後、以下のリンクをタップしてインストールしてください。
インストール後、「設定>SpeakingPushNotification」を設定してください。
SpeakingPushNotificationをCydiaからインストールする