メトロノームは声でも操作できますが、これまで頼めたのはテンポ・再生・停止・トラックの切り替えだけでした。拍子を変えたい、カウントインを足したい、チューナーを出したい、となると楽器を置いて画面を触ることになります。そこで、声で頼める操作を新たに 39 個増やしました。

- 拍のメーターが 3 拍になった
- 聞き取った文字と、実行した操作を順に出す
- 拍子を変えてから再生を始めた
頼みを操作に読み替えるのは、判定だけをする安いモデル Jev です。Jev は文章を書かず、文と選択肢つきの問いを渡すと、どの選択肢に当たるかを確率つきで返します。アプリが使うのは、確率が 0.7 以上の答えだけです。なお「スタート」「止めて」のような短く決まった頼みは、Jev を待たずにアプリの中で決めています。
前の記事(声の頼みを Jev で操作に変え、練習中の独り言には反応させない)では、テンポ・再生・トラック・アプリへの頼みかどうか、の 4 つの問いを 1 回の呼び出しでまとめて聞きました。以下、この 1 つ 1 つの問いを「軸」と呼びます。操作ごとに「この操作をするか」の軸を 1 つずつ増やしていくと、軸は 40 を超えます。この記事では、軸をほとんど増やさずに頼める操作を増やした方法と、試して外れたところの直し方を書きます。
「どの操作か」を 1 つの問いにする
まず、これまでの操作も含めた全部の操作を 1 つの問いの選択肢(約 50 択)に並べて、どれか 1 つを選ばせてみました。51 個の言い方で 46 個が正解で、「どの操作か」の分類そのものはよく当たります。ただ、「あと 5 分」のような練習中の独り言を、タイマーの操作(確率 0.95。以下、かっこの数は Jev が返した確率)と取り違えました。また、1 つの問いでは、2 つの操作を一度に頼まれても片方しか選べません。前の記事で軸に分けたのも、このためでした。
そこで、前の 4 つの軸は残し、「それ以外の操作はどれか」を選ぶ軸(action)を 1 つだけ増やしました。独り言を操作として扱わないようにするのは、これまでどおり「アプリへの頼みか」の軸の役目です。
export const VOICE_ACTION_CRITERIA = {
mute: "Mute or unmute the sound of the metronome.",
tuner: "Open or close the tuner (to tune an instrument).",
timeSignature: "Change the time signature (meter), like 3/4, 4/4 or 6/8.",
sound: "Change the click sound, like wood block, beep or cowbell.",
countIn: "Change the count-in (bars that are counted before starting).",
// …ほかに 34 個
none: "None of the above, or not a request.",
} as const;「3拍子にして再生して」なら、再生の軸が start、action が timeSignature と返ります。実行は、止める → テンポ → トラック → ほかの操作 → 再生の順にしています。最初の 1 拍から 3 拍子で鳴らすためです。
値の問いは毎回まとめて聞く
拍子なら 3/4 か 6/8 か、音色ならどれか、という値も決める必要があります。Jev は選ぶだけで、文から値を取り出すことはできないため、値の候補を選択肢にした問いを作って選ばせます。「オンにして」「オフにして」「どちらとも言っていない」から選ぶオン・オフの問いも、値の問いの 1 つです。
action の答えを見てから値を聞くと、呼び出しが 2 回になります。値の問いを毎回すべて一緒に聞けば 1 回で済みますが、問いの数が増えます。そこで、問いの数で待ち時間が変わるかを測りました。
問いの数 | 待ち時間(中央値) |
|---|---|
5 問 | 262ms |
15 問 | 260ms |
ほとんど変わらなかったので、値の問いはどの頼みでも毎回まとめて聞くことにしました。今は 4 つの軸と action、値の問い 12 問を合わせて 17 問で、入力は約 3,400 トークン、1 回 $0.00014 ほどです。
拍子の選択肢のキーには「/」を使わず、m6_8 のように書いて、あとで 6/8 に読み替えています。数(BPM・タイマーの分・トラックの番号)は、前の記事と同じく、Jev ではなくアプリのコードで文から抜き出します。「3拍子にして」の 3 をテンポと取り違えないよう、拍子・タイマーなど数を使う操作のときは、文の中の数が 1 つならテンポの軸の答えを使いません。
試して外れたところ
評価用に、言いそうな言い方を 148 個並べて Jev に答えさせると、軸ごとの答えがすべて正しかったのは 96 個でした。外れの多くは、独り言の文で action の軸だけがずれたものです。独り言は「アプリへの頼みか」の軸で除くので、実際には困りません。困ったのは次の外れです。
設定を変える頼みで、再生まで始まる
左右両方のスピーカーから鳴らす頼みの「両方から鳴らして」や、「8 分音符を鳴らして」を、再生の軸が start(0.90・0.93)と答えました。設定を変えたいだけなのに鳴り出すのは困ります。ほかの操作と一緒のときは、文に「再生」「スタート」などの言葉があるときだけ再生するようにしました。
action の答えが境目に届かなかったときも、ほかの操作の確率が 0.5 以上あれば同じ扱いにしています。「左から出して」が、左右の出力を決めきれずに「出して」の再生だけになったためです。
英語の play は「play eighth notes」のように設定の頼みにも出てくるので、再生の言葉として扱うのは「and play」「then play」の形だけです。
「チューナー止めて」で、メトロノームが止まる
「止めて」は、Jev を待たず、言い終えるより前にその場で止めるようにしています。そのため「チューナー止めて」「録音止めて」でも、メトロノームまで止まりました。文にチューナー・タイマー・録音などの名前があれば、止める言葉でもメトロノームは止めず、その機能のオン・オフとして扱います。Jev の再生の軸が stop と答えたときも同じです。

- チューナーを閉じる頼みとして実行した
- メトロノームは鳴ったまま
「ミュートして」のオン・オフが逆になる
「ミュートして」を、オン・オフの問いが off と答えました。音を消すので「オフ」と読んだようです。問いの文に「ミュートは、音を消すのがオン」と書き加えました。
「オンにして」「オフにして」の操作は、今の状態を見て、すでにそうなっていれば何もしません。オンとオフを切り替える操作をそのまま実行すると、すでにオンのときに「オンにして」と頼んだだけでオフになるためです。
「だんだん速くして」で、テンポが一度だけ上がる
テンポの軸が faster(1.00)と強く答え、action の答えのプログレッシブ(テンポが少しずつ変わるモード)は 0.69 で、境目の 0.7 に届きませんでした。文に「だんだん」「徐々に」「gradually」などがあれば、テンポの軸の答え(速く・遅く)を、テンポを上げていくか下げていくかの向きにして、プログレッシブをオンにします。
操作と none に答えが割れる
「トラックを追加して」は、addTrack が 0.59、none が 0.41 で、境目の 0.7 に届きませんでした。最初は none の説明に「テンポを変える・再生・停止・次や前のトラックも none」と書いていました。この説明に引っぱられたのかと考えて「None of the above, or not a request.」だけに縮めましたが、割れ方はほとんど変わりませんでした。
Jev は、このように 1 つの操作と none に 0.6 と 0.4 で割ることがあります。ほかの操作と迷っているわけではないので、none と割れているだけなら、境目を 0.5 に下げて決めることにしました。ただし、none を除いて 2 番目に高い操作が 0.15 以上あるときは、ほかの操作と迷っているとみて決めません。独り言はすでに「アプリへの頼みか」の軸で除いています。
すると今度は、「再生して」がリピートの切り替え(0.50)と判定され、実行されるようになりました。再生を「繰り返す」と読んだようです。アプリでは「再生して」は Jev を待たずに決めるので、実際には起きず、評価の中でだけ見つかった外れです。それでも、値もオン・オフも言っていない切り替えの操作は、0.5 で決める扱いから外し、これまでどおり 0.7 以上のときだけ実行するようにしています。
203 個の言い方で試した結果
評価用の言い方は 203 個まで増やし(うち 27 個は独り言)、軸ごとではなく、実行する操作(値まで)が頼みと同じかで比べるようにしました。2 回試すと、外れた言い方は 1〜2 個入れ替わりましたが、数はどちらも同じでした。
結果 | |
|---|---|
正解 | 203 個中 190 個 |
違う操作をした | 0 個 |
独り言を実行した | 27 個中 0 個 |
待ち時間(中央値) | 258ms・276ms |
外れた 13 個は、どれも何もしなかったものです。「8分の6にして」は拍子(0.67)とガイドノートの細分(0.33)で割れ、英語の「select track 3」は none に寄りました。迷ったら何もしないので、言い直してもらえば済みます。
頼める操作と言い方の例は、マニュアルの「声で操作する」の章に表で載せました。表の例は、どれも評価で正しく実行できた言い方です。

- 操作と言い方の例の表。リズムと音・テンポ・練習の道具・画面・開く操作の 5 つに分けて並べた
声では受け付けない操作
全画面表示・設定のリンクのコピー・ファイルからの設定の読み込みは、声では頼めません。ブラウザは、これらをボタンを押した直後にしか許さないので、声で頼まれたときには動かせません。
初期状態へのリセットとトラックの削除も、取り消せないので声では頼めないようにしています。テンポの変更を元に戻す(undo)は頼めますが、やり直す(redo)は頼めません。「テンポをやり直して」を、Jev が元に戻す頼みと取り違えたためです。