見出し画像

『今すぐ書ける 1分間プログラミング』に関するFAQ(よく聞かれる質問)

Chapter 2、p134のGetWeatherLineByCityメソッドを使うサンプルを書いたが、天気予報が何も出てこない。

残念ながらLivedoorの天気予報サービスは2020年7月末をもって終了します。そこで、新しいいNugetでは気象庁のサイトから予報のテキストを抽出するようにしました。Nugetパッケージ、MagicWandの3.0.0以降では修正されています。出版時の2.0.2をお使いの方は最新版のMagicWandWinもしくはMagicWandWinEasyMagicWandCore(マック用)に更新してください。MagicWandの更新についてはp47を参照してください。


Macでプロジェクトを作ると、Magic.Speakはうまく動くが、Magic.Recognizeが音声を認識せず、NoMatchというエラーが出る

これはMacOSの最新版、Catalinaからの問題のようで、それ以前のMacOSでは問題はありません。また、Mohaveとそれ以前のMacOSからCatalinaへアップデートしたマシンでも問題となっていないようです。最新のCatalinaではデフォルトでTerminalから内臓マイクへのアクセスが許可されていません。ただ、Terminalは単独でインストールするものではないので、インストールの過程でマイクへのアクセス許可を設定する機会はありません。しかし、セキュリティの設定で手作業でTerminalやVisual Studioにマイクアクセスの許可設定をするのはかなり煩雑な作業を要します。

そこで、最も簡単な対処方法は、Visual Studio for Macを管理者権限で立ち上げることです。これでMagic.Recognizeのメソッドを呼ぶコードを開始すると、そこでTerminalにマイクアクセスを許可するかどうか聞いてきます。そこで「はい」をクリックするとマイクは正常に稼働し、二回目以降はこの操作をする必要はありません。

では具体的なステップを説明します。

【前提】Magic.Speakの時はきちんとMacから音声が聞こえてくるが、p88のMagic.Recognizeのコードが全く反応しない。20秒近く経ってNoMatchというエラーが表示される。

まずはVisual Studioを閉じてから次の作業に入ってください。
❶ スポットライトで「ターミナル」と入力。結果からターミナルをクリックして立ち上げる。
❷ 次のコマンドを入れてReturnキーを押す(コピペしてください)_

sudo /Applications/Visual\ Studio.app/Contents/MacOS/VisualStudio

❸ すぐに管理者のパスワードを聞いてくるので入力する(注:ここではセキュリティ保護のためにタイプしてもターミナルの画面には何も表示されません。ブラインドで入力することになるので注意してパスワードを入力してください
❹パスワードを入れてReturnを押すとVisual Studioが立ち上がるので、p88のSpeak3-1のプロジェクトを開く(すでにこのコードは書いていものとします)。そのままコンソールアプリを開始する。
アプリがスタートすると今度はターミナルにマイクへのアクセスを許可するかどうか聞いてくるので「はい」を選択。ここが重要!
❻ その後パソコンに向かって「皆さんこんにちは」などと何か言ってみる今度はきちんと日本語が表示される。
➐ いったんVisual Studioを閉じる。
❽ 再度Visual Studioを普通にスタートさせ、同じアプリを開始してみる。今度はそのままうまく音声認識する。

この作業をすることでSecurity設定の中で、マイクへのアクセが許可されたアプリとして「ターミナル」が追加されます。この管理者権限でVSを立ち上げる作業は一回で済むので、煩わしい作業ですががんばってやってみてください。

今のところこの問題はMacOSがCatalinaでのみ報告されていますが、もし他のOSバージョンで同じようにNoMatchが常に出てくる場合は同様の作業をしてみてください。

Chapter 1でコンソールアプリのプロジェクトを作ってSpeakメソッドを実行すると、「ハンドルされていない例外」というエラーメッセージがコードの中で表示されてアプリが止まる。

一番最初に作るプロジェクトでは、Magic.Speak ("私はパソコンです")というコードを一行だけ書いて実行します。ここで次のようなエラーが出てくることがあります。

画像1

この場合、最も注意してもらいたいのは、作ったコンソールアプリが.Net Frameworkのものかどうかです。コンソールアプリにはほかに.Net Coreというものもあり、アイコンも一緒なので間違ってCoreのほうを選んでしまうかもしれません。

画像2

Windowsで.Net Coreのコンソールアプリのプロジェクトを作って、MagicWandWinを参照して使うとこのようなエラーが出てきます。この場合、画面右側のソリューションエクスプローラーをチェックしてみてください。この画面のように依存関係の下にあるMagicWandWinのパッケージに黄色い注意マークのアイコンが表示されているはずです。

画像3

こうなった場合はもう一度コンソールアプリを作り直して、その際に「コンソールアプリ(.Net Framework)」を必ず選択してください。

Windowsで音声認識がどうしてもうまくいかず、「こんにちは」と言ってもきちんと認識されない。

音声認識のトラブルシューティングについてはChapter 4の後半にマイクの設定方法について詳しく解説しています。「こんにちは」という簡単な言葉は必ず認識されます。にもかかわらずうまくいかない場合はほぼまちがいなくマイクの音質の問題です。Windowsに入っている音声認識は口元にマイクが来るヘッドフォン型マイクロフォンや卓上マイクロフォンなどに最適化されています。最も手っ取り早い対処法王は外部マイクを使うことです。

それでもうまくいかない時は高性能な音声機能を提供するクラウドを使うことです。Chapter 4ではMacユーザーの方に向けて1分間プログラミングの方法を解説していますが、ここで使っているのがクラウドです。MacにはWindowsのようにローカルのAPIで使える音声認識がないので、Azure(アジュール)を使ったMagicWandCoreというパッケージの使い方を説明しています。実はこれはWindowsユーザーでも使えます。次の要領で1分間プログラミングをやってみてください。

❶ コンソールアプリのプロジェクトを作る際に、「コンソールアプリ(.Net Frameword)」ではなく、「コンソールアプリ(.Net Core)」を選択する。
❷ NugetパッケージはMagiWandWinではなくMagicWandCoreを使う。
❸ SpeakやRecognizeなどの音声メソッドを使う時だけ、APIキーを渡す。詳しくはChapter 4を参照してください。

後のコーディングはWindowsの時とまったく同じです。APIキーは音声関連のメソッド以外では不要です。Magic.Speak、Magic.Recognize、Magic.RecognizeFromListだけがキーを必要とするメソッドです。

これだけで音声認識の精度が格段に上がりますので、Windows環境で認識があまりよくないと感じている場合は是非この方法を試してください。

Macを使っていますが、コンソールアプリを開始してもTerminal画面が出てきません。その代わりにVisual Studioの下の方に結果が表示されます。

これはVisual Studio for Macがバージョン8.6になってからIntergrated Terminal(統合されたTerminal)に変更されたためです。以下の画面のように、Visual Studio内の下の方にTerminalが含まれて、1分間プログラミングで書いたプログラムの実行結果はここに表示されます。

画像4

Terminal画面の高さが足りない場合はドラッグして上の方に広げる必要がありますが、機能的には本で解説しているTerminalと同じです。ただ、実行が終わって画面が閉じることがないので、プログラムの最後にConsole.ReadLine()を入れてコンソール画面をホールドする必要はなくなります。もちろんあっても支障はありません。


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