見出し画像

ショートカット「音楽クイズ」を修正する

唐突ですが、ショートカット文法を知らないまま、調べる気もないまま、修正してみました。
いちおうC#, Pythonを触ったことがあるので、なんとかなるかな、と。
結論から言うと、なんとかはなったけれど、UI周りは???よくわからないままです。

はじめに

「音楽クイズ」とは、いわゆるイントロクイズです。流れている曲のタイトルを答えるクイズです。
MacやiPhone, iPadには「音楽クイズ」という名前のショートカットが用意されています。
おそらく、AppleとしてはショートカットAppとはこういうものだよ!と周知すべく、ゲーム性の強いショートカットを用意しているのでしょう。

自分は、2つのPDFを1つに結合したくて、Macを買って以来初めてショートカットAppを使いました。
その時、「音楽クイズ」を見つけたので、おもしろそうだなと実行してみました。すると、5曲中2曲目が再生されず、しかも何やらエラーが出ました。

エラー画面

なんだろう?と思ってネットで検索しても必要な情報が見つけられませんでした。
エラーが出た後、何もしないでいると音楽が流れ始め、音楽クイズが再開されました。
「ショートカット」は、英語表記でも日本語表記でも、「App」を付けても付けなくても、圧倒的に一般名詞としての「ショートカット」が強すぎます。

デバッグその1

昔プログラミングをかじったことを思い出し、アクションを追ってみることにしました。すると、どうやら曲を再生するところでエラーが起きているようです。

疑惑のアクション

しかも、[Macで中間点 秒 特定の再生位置に進める] アクションがありますが、実際に動かしてみると何も起きていないように見えます。

おそらく意図としては、サビなど聞き馴染みのある場所まで曲を進めて、そこを出題したいということでしょう。サビの位置は曲によって違いますが、だいたいの曲は真ん中に来るだろうと考えて、中間点まで進めているのでしょう。この割り切りは理解できます。
つまり、冒頭に「イントロクイズ」と書きましたが、正確には「イントロクイズ」ではなく、名前の通り「音楽クイズ」なのです。

意図がこの通りだとして、問題は、意図通りに動いていないことです。プログラムが開発者の意図通りに動かないことを、世間ではバグと言います。
エラーは起きていませんが、このアクション部分も修正したいところです。

デバッグその2

さて、なぜ曲を再生しようとするとエラーになるのか、なぜ再生できる曲とできない曲があるのか、もう少し調べてみましょう。
今度は、アクションを編集して、動作が変わるかどうか試してみます。
そのために、まずは元々のショートカットのバックアップを取っておきましょう。Mac PCの場合、ショートカットの上で右クリックして [複製] を選びます。

ショートカットの複製

ショートカットでは、変数はオレンジ色で表示されているようです。変数の情報を見るには、変数名を長押しします。変数 [正しい曲] を長押しすると、下図のように表示されました。

[正しい曲] の情報

変数 [正しい曲] の種類は <iTunesメディア> で、<iTunesメディア> の中から <iTunesメディア>を入手しています。
これを C# ぽく解釈すると、<iTunesメディア> という型は、タイトルやアルバム、アーティスト、アルバムアーティスト、ジャンルなど、いろいろなメンバ変数を持っていますが、<iTunesメディア> インスタンスそのもの(C#のthis, Pythonならself)を使用するという意味でしょう。
ミュージックAppで <iTunesメディア> を再生しようとしているのですから、型が違うエラー(C#なら InvalidCastException)ではなさそうです。

変数 [正しい曲] の設定場所をたどるとリスト [リストからの項目] へ、リスト [リストからの項目] の設定場所をたどるとリスト [ラウンドの曲] へ、 リスト [ラウンドの曲] の設定場所をたどるとリスト[曲からRangeの項目の1からオプション数までを取得] に着きます。
設定場所をたどる時は、変数を長押しして現れる画面の[表示]ボタンを押します。

変数の設定場所を表示する

変数 [曲] の設定場所をたどると [見つかった音楽] であることがわかります。
[見つかった音楽] というのは、下図の条件で検索した結果、見つかった音楽全てという意味です。

曲を検索する時の条件

自分のミュージックAppに入っている曲の中から検索された曲を再生しようとしてエラーが起きているようです。
ミュージックAppは毎日使っていますが、エラーが出た記憶はありません。

ですが、エラーをたどってきたら、ここに着いたのですから、このアクションを編集して、動作が変わるかどうか試してみましょう。

デバッグその3

[アルバムアートワークあり] に着目しました。
なぜなら、アルバムアートワークがある曲の中にも、自動的にアルバムアートワークが反映された曲と、アルバムアートワークが反映されないので手動で画像を設定した曲があります。手動で画像を設定したのがいけないのか?と思ったからです。
[アルバムアートワークあり] をクリックすると、長いドロップボックスが表示されました。

[アルバムアートワークあり] をクリック

この中から[アルバムアートワークなし] を選び、実行してみます。が、結果は変わらず。
次に、マイナスボタンを押して、アルバムアートワーク有無の条件を消して実行してみましたが、結果は変わりません。

アルバムアートワーク有無の条件を消す

しかし、何回も繰り返し実行していて、気づくことがありました。外国語教材の音声トラックが正解の時、エラーが起きやすいのです。

外国語教材トラックの特徴は、短いこと。J-POPは4分前後の曲が多いですが、自分が持っている外国語教材トラックの場合、母音1音だけの5秒で終わるものもあります。会話を収録しているトラックも、1分程度のものがほとんどでした。
ここで、先ほど気になっていた [Macで中間点 秒 特定の再生位置に進める] アクションが疑わしく見えてきます。お馴染みの、範囲の外に出てしまったエラー(C#ならIndexOutOfRangeException)ではないでしょうか?
ということで、[Macで中間点 秒 特定の再生位置に進める] アクションを消して実行してみますが、結果は変わらず。
よくよく考えてみれば、[Macで中間点 秒 特定の再生位置に進める] アクションの前の [正しい曲を再生] アクションでエラーが起きているのですから、当たり前です。完全に、先入見に引きずられてしまいました。

もう一度、外国語教材トラックの特徴を考えてみます。

  • アートワークがないものが多い。

  • アートワークがあるもののほとんどは、手動で画像を設定した。

  • ファイルサイズは小さめ(だいたいが 1 MB 未満)。

  • アルバムアーティストが未設定。

  • 作曲者も未設定。

  • ジャンルも未設定のものが多い。

  • 同名タイトルのトラックがある(例えば「トラック01」は7個あった)。

  • 再生回数が少ない。0回のものが多い。

  • 最後に再生してから半年くらい経っているものが多い。

自分に失望してしまう、とても残念な結果ですが、再生回数が0回あるいは数ヶ月再生していないという条件が当たりでした。
外国語を勉強しようと思って買ったのに、買って満足してしまって一度も聞かないとか、一度聞いたら満足して終わりという、非常に残念な学習態度が明らかになってしまいました。

修正したショートカット

修正したミュージック検索の条件は下図の通りです。

ここで [クラウドの項目ではない] という条件について説明します。
上までの記事を書いた翌日に実行したところ、修正した条件でエラーが起きました。しかし、2時間後に同じショートカットを実行したところ、正常終了しました。
どうやら、ネットワーク環境により、クラウドにある曲を再生できる場合と再生できない場合があるようです。そこで、ネットワークが弱くても実行できるよう、クラウドにない曲だけ検索することにしました。

修正した条件

ネットワーク環境は、[最後に再生した日] の期間を何ヶ月にするかにも影響します。自分の場合、初めは6ヶ月でも問題なかったのですが、翌日は3ヶ月にしてもエラーになりました。

というわけで、完全には解決しませんでしたが、遊べるイントロクイズになりました。

曲を指定した位置まで進められない

上で [Macで中間点 秒 特定の再生位置に進める] アクションについて、何も起きていないようだと書きました。
これについては、何回も繰り返し実行してみて、やはり何も起きないことを確認しました。
Googleで検索しても、情報が見つからず。直すことができませんでした。

UIについて

このイントロクイズは、見た目について気になることがいろいろあります。
まず、選択肢が5曲あるのに、3曲と半分しか見えません。もちろん5曲表示されています。しかし、スクロールバーを動かさないと5曲目が見えません。

選択肢の画面

ウインドウサイズを変更したいのですが、Googleで検索してもわかりませんでした。仕方なく、アルバムアートワークを表示させず、曲名のみの表示にしてみました。

選択肢の画面(曲名のみ)

他の対処法としては、選択肢を3曲に減らすことでしょうか?

次に、再生直前に正解の曲名が見えてしまうというのも気になります。曲が再生される前に、ミュージックAppが前面に表示されてしまうのです。
このショートカットはひとり遊び用だと思うので、よくありません。
しかし、ミュージックAppをずっと非表示のままにする方法がわかりませんでした。
次善の策として、ミュージックAppウインドウを最小化する、あるいは曲名が見えないくらい端っこに移動させることを考えたのですが、これもうまくいきません。
検索したところ、次のような質問が見つかりました。2022年に投下された質問ですが、解決方法は提示されていません。

対処法としては、ミュージックApp表示→曲が流れ始める→選択肢のリスト表示 という順序なので、曲が始まるまで目をつぶっていることでしょうか?

最後に

エラーを起きなくさせるのは、成功したと言って良さそうです。
曲が再生されないという問題は、根本的には解決していませんが、なんとなく回避できそうです。
曲を指定した位置まで進められないという問題は、全く解決しませんでした。
UI周りも、残念ながら力が及びませんでした。

この記事が参加している募集

よろしければサポートお願いします! 今後もポイ活のレビューをしていきたいです。