【iPhone】ショートカットでちゃんと早押しクイズがしたい! [作業ログ]

以前作った早押しクイズショートカットを改良したので作業手順をメモ。まあ効果音を追加しただけなんだけど。

改良前の動作

改良後の動作


問題を読み上げるはやさとかは要調整かなあ。。

あとついでに、ボタンを押してからすぐに問い読みを止める方法についてもまとめておく。(ただしボタンの効果音は聞こえなくなる)

0. はじめに

ボタンの効果音等は OtoLogic というサイトから頂きました。ありがとうございます。


1. 下準備

・ファイルAppが必要

letsQuiz 2 を複製して編集できるようにしておく

OtoLogic からボタン音などをダウンロードする

・ダウンロードした音の長さを調整しておく。以下のアプリとかが使えるかな。


2. ファイルからbase64エンコード

特定の音声(音声に限らず画像やら動画やらのバイナリファイル)をショートカットレシピの中で使いたい場合、一番シンプルな方法としてはファイルパスなどを指定するなりしてショートカット実行時に外から拾ってくるという方法だと思う。(ショートカット中に直接音やら画像などのバイナリファイルは埋め込めないので)

ただ、これだとショートカットの配布(共有)の際は面倒。ショートカット本体に加えてファイルまで配布して「〇〇フォルダを作ってそこに置いてください」とかやらないといけない。

なので、ショートカット単体で完結させる方法として、(埋め込みたい)バイナリファイルをbase64エンコードしたものを「テキスト」アクションなどに張り付けて、レシピ中に埋め込んでおくという方法がある。そして、ファイルなどの代わりにそれをデコードして使うようにする。(ショートカット実行時にテキストからバイナリに戻す)

こうすればショートカット単体で動くので、配布の際も便利になる。

やり方として、先ず以下のような「base64エンコード結果をクリップボードにコピーする」ショートカットを作っておく。

画像1


あとは、それを使ってクリップボードに自分の好きなファイル(音声, 画像, 動画もできるがサイズが大きいのでオススメはしない)をコピーして、「テキスト」アクションなどに張り付けた後、base64デコードして使うだけ。例えば以下ような感じ。

画像2

※ クリップボードにbase64エンコード結果をコピーした後、ショートカットエディタ上に「base64エンコード」アクションを置き、それをタップして"上にペースト"を選択すると簡単


3. ショートカットを改良する

先ずは、letsQuiz の冒頭で使いたい音声を全てbase64デコードして元のバイナリに戻しておく。(戻るのは実行時)

画像3

※ みどり線で囲った部分がワンセット。これを使いたい音声の数だけ繰り返す

※ なんの音声かわかりやすいように「コメント」アクションを使ってコメントを書いておくと良い

※ 「base64(デコード)」アクションの結果のマジック変数名をわかりやすいものに変えておく(あるいは手動変数を用意して代入)


あとは、音を鳴らしたいタイミングで「サウンドを再生」アクションを実行する。サウンドファイルにデコード結果のマジック変数を指定する。

出題音を鳴らす

画像4


以下のタイミングでも、同じようにする。

・ボタンが押されたタイミング
・正解のタイミング
・不正解のタイミング
・結果発表のタイミング


問題を読み上げている途中でサウンドが鳴ると、問題の読み上げが止まるので、早押しボタンの機能が実現できる。(ただし記事冒頭の動画で確認できるように、問題を読むのが完全に聞こえなくなるまでの時間は思ったよりかかる)


4. ボタンを押してすぐに問い読みを止める

ようは音が聞こえなくなればいい。つまりボタンを押してすぐにiPhoneの音量を0にしてしまえば問い読みは聞こえなくなる。

つまり、「アラートを表示」アクション(早押しボタン)の次に、「音量を設定」アクションを呼び出し、音量を0に設定する。

そして、次の問題が読まれるまでに音量を元に戻しておく。元に戻すためには、0になる前の音量をどこかに保存しておく必要があるので、適当なタイミングで「デバイスの詳細を取得」アクションを使って現在の音量を取得しておく。

レシピとしては以下のような感じ。「サウンドを再生」アクションは問い読みを止めるために必要だが、呼び出す前に音量が0になるため、ユーザにはボタン音は聞こえない。

画像5


5. まとめ

読み上げのはやさとか、使うボタン音声とかを色々調整したらもっといい感じにできると思う。

問題は、メモじゃなくてファイルから拾うようにしてもいいし、メモのフォルダを指定したければ指定すればいい。

では今回はこの辺で。

この記事が気に入ったらサポートをしてみませんか?