Category Archives: Visual Studio

NugetパッケージのSystem.Speech がv7.0でインスタンス作成時にFailを出すようになった件。(.NET6.0にしたら治った)

Nuget package System.Speech v7.0 initialization fail on .NET5.0

無意識にNugetのパッケージをアップデートし、コンパイルが通らなくなった。常日頃から使っているSpeechを使った仕事用のアプリで使っている、Speechがv7.0からinstanceのnewで落ちる。

.NET 6.0では、System.Speech v7.0は使えている。

.NET 6.0というのがあるのでアップデートした。それで Speech v7.0は無事コンパイルできた。一瞬マイクロソフトのSpeechSynthesisの2024年を意識してのサポート切れかと思ったがまだ使えるらしい。

.NET 5.0と6.0の違いは不明。。。他のコンポーネントの様子を見ることにする。

しかし、UWPではだめのようだ。。。

Twitch 用 Botを作ってみる

Twitchのストリーマーがゲーム配信をしていて定期的なメッセージや、翻訳メッセージが表示されているのでどうなっているのか調べてみた。

チャットは、IRCがベース。

TwitchでBot用アカウントを作って、oauthパスワードを発行。

Readを一つのスレッドでループして、新規メッセージを読む

send, joinで接続。

参考資料

Writing a Twitch Bot From Scratch in C# (.NET Core) | by Bradley Saunders | The Startup | Medium

Speech API (SAPI)からCeVIO AI Voiceで読み上げ C++ 実装編 (COM SDKからのSpeakで失敗する)

タイトルの通りWin32 COM C++では、SAPIの音声リストからCeVIOのボイスの選択はS_OKで成功するが、Speakで “REGDB_E_CLASSNOTREG Class not registerd” エラーが出る。

Win32 COMではCeVIO AIのボイスを選択し、SAPIのSpeakでREGDB_E_CLASSNOTREG Class not registerd エラーが出る

OSにバンドルされているSAPIのボイスのSelect, Speakではエラーにはならない(正しい動作)ので、エラー処理でCeVIOを除外するしかない。(SpeakがFailした場合、最後にS_OKだったボイスをセット)今のところ、”CeVIO”がボイス名に含まれているか、Initializeの時の第一声テスト時にFailするボイスを自動選択しないようにするコードを追加。

このコードは、デスクトップ上に時刻を表示するアプリで、Win32 C++ COMでUIがD2Dベース。かれこれ5年くらいコードは触っていなかった。最近、CeVIOをインストールしたときから、Speechできなくなっていた。D2DはWindows Animationで画像表示やエフェクト、移動等ができビジュアル面では高機能。コードはWin32 C++ なのでメモリアドレス、メモリのコピペ等の操作のコード直書きなのでパフォーマンスがいいけれど、CeVIOがこれでは対応できない。

多分、CeVIOのC++コードをDLLインポートすると、2つのアプリではAPIは呼べないはずだし。

とりあえず今回は、CeVIO AIのボイスを除外する方向で修正済み。

TimeSignalアプリの時間表示。TimeSignal.exeにSpeechする言葉をオプションで起動することで、バックグラウンドで走る。画像は右クリックでExitメニューが表示されているところ

IEサポート終了なので。

MSのInternet Explorerのサポートは、2022/06/15で終了。スクレイピングできないサイトのオートパイロットはSHDocVw.dll内のAPIで使用していますが、どうやらDLLはなくならないっぽい。けれど確認は各自してくださいとの事らしい。

Internet explorer end of life: impacts on programs using SHDocVw.DLL – Microsoft Q&A

なので、C#で使えそうなAPIを模索中。WebAPIを公開していてもIPでブロックされて使えないサイト(某Yフ―ショッピング)もあるので結局、オートパイロットでUI上からダウンロードリンクのクリックを再現している。ダウンロードダイアログのダウンロードボタンは、別プログラムでクリックしている。

        
    SHDocVw.InternetExplorer objIE = new SHDocVw.InternetExplorer();
            objIE.Navigate("https://xxxx.com/URLPath");
            objIE.Visible = true;
            objIE.Silent = true;
            objIE.FileDownload += 
         new DWebBrowserEvents2_FileDownloadEventHandler(IE2_FileDownload);

    foreach (HTMLButtonElement b in objIE.Document.getElementsByTagName("button"))
        {

            if (b.name == "btnSubmit")
            {
                //Console.WriteLine(b.type);
                //Console.WriteLine(b.name);
                b.click();
                break;
            }

        }

代用できるAPIがみつかればIEはすぐに捨てていくことにする。できればブラウザのUIを表示しないでスクレイピングのみでやりたいけれど、WebAPIを公開しているのにもかかわらず登録IPのみ処理可能っていうのは、やめてほしい。登録してもPHPを走らせていているサーバはレンタルサーバーのせいか結局はじかれる。よくわからないがサポートと話すくらいならできる方法でやるしかない。
愚痴ってもしょうがない。

Visual Studio 2022

Visual Studio 2022にアップグレード

今月に入って、VS2019を立ち上げると、VS2019はサポート外ですとのメッセージが表示されたので、そのままVS2022のリンクをたどってインストールしました。(表示、インストールがあまりにもスムーズに済んだのでスクリーンショットを撮るの忘れました)

既存のソースコードを、早速アップグレードしコンパイルができることを確認。

最近増えつつある、NuGetのDependencyやライブラリのリンクもうまくいっている。いつものことだけど、一度開発環境をアップグレードすると前のバージョンに戻れなくなるのも慣れてきました。

一応、GITでアップグレード前にバックアップはしてるけど。

開発風景は、TwitchでBGM配信しながら画面共有しているので、よろしければ覗いてみてください。

リンクはこちら nGameMusic – Twitch

Visual Studio 2022
Visual Studio 2022