前回、「コードネームを問題にして、コードトーンを答える」というショートカットをつくりました。
これの逆の「コードトーンを問題にして、コードネームを答える」というのを作ろうかと思いました。ただ問題と答えをひっくり返せば可能なんですが、もうちょっとレベルアップしたものを作りたい…。
というのも、実際に使う時って「ドミソ」だけじゃなくて、「ソドミ」も使うし、「ドソミ」も使うじゃないですか?
なので、もうすこし偶発性がある問題の方が応用力がつくのでは?と思い、前に作ったショートカットと別の方法で作ってみました!
どういうものにするか?
問題の出し方は前回と同じで“キーC”の「ドレミファソラシド」から出題するようにしました。
この中からランダムに4つの音を選ぶだけ、というもの。
半音が続いて4つになると、流石にコードにならないので、ひとまず1つのキーのみに絞りました。
答えは表示されません。
あまりややこしくするとショートカット自体が重くなるので、とりあえずはこれくらいの機能で…。
早速、作ってみます!
設定をする
まずはショートカットのファイルを作ります。画面右上の「+」か「シ…トカット…」のどちらからでも作ることができます。
ファイルが開けたら名前を決めましょう。画面右上の設定ボタンをタップして設定画面を開きます。
この画面で今開いているショートカットファイルの設定を変更することができます。
まずは名前を決めてしまいます。「このコードトーンは何?」とでもしておきます。
ついでに設定も済ませましょう。
Siriにショートカットを起動してもらいたいので「Siriに追加」をタップして、起動のきっかけとなるキーワードを録音します。
録音するのは、ショートカットの名前と同じでもいいですし、全く違うフレーズでもいいです。
例えば「山」とすれば、当然「山」で起動することができます。
変んな言葉だとSiriが認識しにくかったりするので、わかりやすいキーワードにしましょう。
ウィジェットと共有シートは今回はOFFにしておきます。
作ってみる
まずはリストを作ります。画面下の検索フィールドから”リスト”と入れてアクションを追加します。
「リスト」の中身は使われるノートを1つずつに分けて入れます。
この中から、4音をランダムで選びます。
同じく検索フィールドに”リスト”と入れて、その中から「リストから項目を取得」を追加します。
リストからランダムで項目を取得したいので、選択部分を“ランダム取得”にします。
画面上の「▶︎」再生ボタンをタップしてテストしてみます。
これで、リストの中からランダムで1つの音を取得することができるようになりました。
4つの音を取得したいので、「繰り返す」というアクションを追加します。
「繰り返しの終了」と2つのアクションが追加されるので、その間に「リストからの項目を取得」を動かしてください。
繰り返す回数は4回なので、“+”をタップして数字を4にしてください。
これで、とりあえずテストしてみます…。
これで完成!……と思いきや、問題発生。
これだと同じ音が2回以上も出てくることあります。
- 「ドミレド」「シレシシ」…など
なので、1回使った音を繰り返しの中で再び使わないようにしたい…。
“リストの中で使ったものを消す”というアクションはないので、これを作っていきます。
とりあえず、リストの下に「変数を設定」を追加します。
変数名はNoteから「n」にしました。この変数のリストからランダムで選ばれた音を以外を更新するようにします。
繰り返しの「リストから項目を取得」の後に「変数に追加」を入れます。
今度は「変数に”追加”」です。この変数にはランダムで選ばれた音を追加していって出題される問題を作ります。
変数名はQuestionの「q」にしました。
次は変数「n」のリストの中からランダムで選ばれたものを分けていきます。
まずは変数「n」を呼び出します。「変数を取得」を「変数に追加」の後に入れます。変数を選択で「n」を選びます。
1音ずつ調べるしかないので、「変数を取得」の後に「それぞれを繰り返す」を入れます。
このアクションはリストなどのデータを項目がなくなるまで1つずつ同じことを繰り返すというものです。
今回の場合だと「ド、レ、ミ、ファ、ソ、ラ、シ」全てに「それぞれで繰り返す」の中のアクションを行う、ということになります。
続いて、繰り返されるデータがランダムで選ばれた音なのか?というのを判別していきます。「それぞれで繰り返す」と「繰り返しの終了」の間に「次の場合」というアクションを入れます。
入力を“次と等しい”にします。値はマジック変数を使って“リストからの項目”にします。
マジック変数は入力フィールドを選択した時に表示されるキーボードの左上のボタンをタップすることで選択できます。
画面をスクロールして、ランダムで選んだ後「リストからの項目」を選択します。
これで、ランダムで選ばれた音が、“次の場合”。
それ以外の音は、“その他の場合”にデータが行くことになります。
ランダムで選ばれた音は消したいので、「次の場合」の後に「ファイルを削除」というアクションを入れます。“削除前に確認” はいちいち確認しなくていいので、OFFにしておきます。
「その他の場合」には、ランダムで選ばれなかった音が来るので、ここに新規の変数に入れます。
「変数に追加」を追加。変数名はListから「l」としました。
これで、ランダムで選ばれた音と選ばれなかった音の選り分けが終わりました。
- ランダムで選ばれた音 > 削除
- ランダムで選ばれなかった音 > 変数 「l」
…という風になりました。
変数「l」にはランダムで選ばれなかった音のリストが入っているので、これを変数「n」に上書きしていきます。
繰り返しの終了が2つあると思うので、その間に「変数の取得」を追加します。追加する変数は「l」です
その後に「変数の設定」で「n」とします。
これで「n」の変数がランダムで選ばれなかった方のリストに更新されました。
一番最後に「変数を取得」を追加。ランダムで選択された4つの音が入った「q」を追加します。
ここで、テストをしてみます。
…うまくいきませんでした。同じ音が出てきてしまいました。繰り返しのはじめに変数「n」を呼び出していませんでした。これでは「q」に「n」のランダムではなく、そのままのリストから、「q」にランダムで選ばれることになります。
4回の「繰り返す」の後に方に「変数を取得」の「n」を追加します。
もう一度テスト…。
今度は結果が1つになってしまいました。
これは繰り返す際に「l」のリストを更新しなかったので、「次の場合」ですべての音が一致するようになってしまいました。
なので、繰り返しの一番最初に「l」を何もない変数に更新します。
4回の「繰り返す」のすぐ後に「何もしない」を追加します。
その後に「変数を設定」で「l」を追加します。
これで、繰り返しの頭で「l」が何も入っていない変数になりました。
テストしてみましょう。
今度は大丈夫そうです。
最後にSiriに読んでもらいたいので「テキストを読み上げる」を追加します。
設定はそのままでいいと思います。
これで完成です!
使ってみてどうか?
使ってみました!
答えはないので、ある程度コードの知識がある人におすすめ!
例えば問題は「シドレソ」。
まずは、どこがルートになりそうか?を考える。
シだとドが、あるので厳しい、レはシがあるのでイマイチ、ソは?ド(4度)、シ(3度)が同時になるのでダメ…。ドなら3度の音がないけど、大丈夫!「CM9 omit3」
…という風に少し思いつきそうもないものも、こんな感じで頭の中でコードを考えてみれば適応力が上がりそうです。
まとめ
ショートカットには関数などがないので、ある程度自分でない機能を作らないといけない…。
もう少し簡単な方法もありそうな気もしますが、今はここまでで。
コードの練習については楽器を弾くだけじゃなくて、少しこういう違った形でトレーニングするのも、良さそうですね。
コメント