Category Archives: Windows 10

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メニューが表示されているところ

Speech API (SAPI)からCeVIO AI Voiceで読み上げ APIでボイスのインストールは確認できるけど、SAPIでSpeechできず

CeVIO AIをSAPIから使ってみる。マイクロソフトのボイスから卒業できるか検証してみる。

CeVIO AIのユーザーガイドページ

CeVIO AIインストール前のSAPI VOICEのリスト。英語Zira、Davidと、日本語Harukaがインストールされている。

CeVIO AIインストール前のSAPI VOICEのリスト。英語Zira、Davidと、日本語Harukaがインストールされている。

今回は、お買い得なスターターパック、エディタと日本語、英語がセットになった弦巻マキのダウンロード版を購入してみました。セットアップは簡単。だけどマイクロソフトにダウンロードしたExeの起動をブロックされたけれど無視(レポートも送らないよ)。許可してZipを自動展開して起動。MSIが起動されインストールされる。

CeVIO AIのインストール画面

インストールのステップは省きます。

日本語のボイスをインストールした状態で、SAPIのインストールは以下の通り。

CeVIO AI 弦巻マキ 日本語 をインストールした状態 エディタはインストールしていない

エディタをインストールしていない状況ではExceptionがでる。(補足。結果から言うと、エディタをインストールしても結局同じエラーがでます)

CeVIO AI トークエディタをインストールしていない状況ではExceptionがでる。

スターターパックを購入した後、トークエディタのダウンロードは別でライセンスキーのみ提供される。トークディタ、ボイス、日本語、英語のライセンス認証しても、SelectVoiceで同じエラーがでる。

そして、コントロールパネルから音声合成のテストでエラーが出る。やっぱりプロテクトがかけられているのか。トークエディタでは使えている。

CeVIOはWindows10でOSの音声合成に使えない

このままでは、マイクロソフトのボイスと共存もさせられないし。

こちらでは、CeVIOのdllからアセンブリ経由でAPIを呼ぶように推奨されている。SAPI5では動くみたいだけれど、Win10でSAPI5はもうないだろう。

多分SpeechSynthesizer.GetInstalledVoices APIに対応してVoiceリストを返せるようにしたけれど、TTSエンジンのDLLは提供しないということなのだろう。マイクロソフトのSpeechボイスのCLSIDはTTSエンジンのDLLが定義されている。CeVIOのCLSIDはダミー。SelectVoiceをCallした時点でエラーがでる。

あきらめて、.NET DLL API に変更。共存する時にはCeVIOのボイスは選択をスキップするしかない。

CeVIOのサンプルコードを使った結果は次回。

PS:記事には、Officeは32Bitだから動かないとかSAPI5のアプリだったら動くようなことが書かれているけれど今は、64Bit主流でSAPI5に戻りようがないし。Officeから使うのかは疑問だなぁ。

C# WASAPI NAudioで音量レベルメーターを作る

最低限必要なオーディオレベルメーターです。緑のメーターが音量、黄色CH1,CH2がそれぞれ左右のチャンネルです。オーディオデバイスが5.1chだと黄色いメーターが6個表示されます。5.1の”.1″は5ch + ウーハーのチャンネル。ドルビーとかの映画とかでしか使わないと思われる。(ゲームでも使われるのかな)

今回は、カスタムコントロール内でデバイス選択用のコンボボックスと、プログレスバーのオーバーライド(標準のままだと時間制御が入っていて音声の反応に追いつかないので、ただの四角で対応しています)

作ったきっかけ

最近、Twitchで音楽配信をやりたくなってドラムマシン(BOSS DR-880)とKORG Gadget 2のゲーム音源を使ってサンプリング音源で遊んでたりしてます。その時に音が出ているか目で確認したくて作りました。

前にも仕事でWASAPI+D2DでOSDとかWin32で作ってたけど、C#で 名前空間を 書き直したラッパーを公開している人がいるみたいなので使ってみました。Win32C++でCOMをマスターしてれば、MSDNそのまま使えるから必要ないんだけど。時間と作業効率上の問題か。それとバグった時の…しかし人が書いたコードを理解する時間と、自分で書くのとどっちが早いかが勝負。WASAPIを書き直したこの人の労力はすごいかも。C#でWASAPI理解するなら、C++でもいいじゃん。C++だと、アプリの動作が7割早いらしいね。(Win32 + COM最強!)

配信でOBSを使うならバックグランドを淡色にすれば背景を消せるので、これでもいいといえばいい。

あとは、アニメーションを作るときのエフェクトとか合わせるときの問題か。DXならブレンディングできるし。今後の課題。今回はAudioRenderデバイス(再生デバイス)からメインボリュームと、使えるチャンネルを表示している。

AudioCaptureデバイスもモニタ出来るけれど、Captureデバイスからサブスクリプションで有効なデータを受け取るイベントを受け取ってバッファを読むようだ。これだと生データが読めるのでFFTもできそう。実際はAudioRenderをループバックして、バッファを読んでデータを表示。スペアナの表示もできるっていうことらしい。ちなみにAudioCaptureのバッファのデータは、WaveExフォーマットでステレオデータを読むのでこれまたC++の方が使い勝手がいい(Win32 APIがSDKに用意されている)気がする

ダウンロードはこちら

Gitとかは相変わらず使いにくいし、シェアする気もないのでソースはZIPでアップしておく。(ご利用はご自由ですが一切責任は負いかねますのでよろしくお願いします)

このサイトは、プログラミングの知識のある上級者向けですのでソースコードに関する不具合は環境によって書き直してください。(サイトの管理者Nは対応しません)

これをエンジンとして、ビジュアル的なエフェクトが作れればいいなと思います。

Windows 10 VisualStudio 2019 C#WinFormで作成しています。必要なNuGetパッケージはスクショのリストの通り。NuGetからNAudio周りのパッケージをDLしてください。

次は、またSPEECH APIでコマンド管理アプリを上げていこうか。OpenCVで目、口、鼻トラックもできるようになったのでそっちかな。あとは、Youtubeチャット読み上げアプリとか絡めて、VTuber用アプリとか。

自分のTwitchアプリを作っていこう。

ちなみにTwitchチャンネルはこちらです。

結局MBPはWindows10マシンになりました

現状、PHPでSQLのデータのCSVエクスポート、.NET Frameworkアプリでの処理、そしてCSVファイルを生成してアップロードという作業がメインになっております。

しばらくは、MBPのWin10パーティションのサイズが足りなくなり、パーティションの切り直しして再インストールしようと思って古いデスクトップマシンで作業していたけれど、MBPでパーティションのリサイズができたので結局MBPのWin10に戻って作業しております。

MacのOSアップデートもたまに起動したときにするくらいで、XCodeも最近は触っておらず・・・

iPhoneアプリもそろそろライブラリのアップデートリリースしないと

そして、やっとLolipopのSSHを使ってリポジトリを導入することができました。まだセキュリティ周りの仕組みがわかっていない。手順は書けるけど最近のセキュリティ設定はちんぷんかんぷん。

そういえば、アンケートやレビュー書かなくなったなぁ。絶対にどこかでデータ抜かれてるんだろうけど、いちいち時間とられるし、自分から書きに行く行為が一番危ないと思う今日この頃。

Steinberg UR242 その3 Windows 導入編

dspMixFXはWindows版は問題なく起動できる

中古で買ったUR242の続き。前回Macではライセンスがなくて、dspMixFXは起動できなかった(正確にはDSP設定ダイアログが起動できない)。そしてiOSでは問題なく起動できた。そして今回はWindowsで使用できたのでアップデート。

その1のドライバアップデートページからWindows版をダウンロード。結果は同じだろうと諦めていたけれど同じ手順ですんなりエフェクトウィンドウが表示される。

Cubase Pro 10ではInsertにRev-Xを選択した時点でライセンスエラーになる

さらにCubase Pro 10からは、デバイス設定画面からYAMAHA Steinberg USB ASIOを選択後、オーディオコネクションで入力バスに選択可能になるもミキサーから3種類のRev-Xエフェクトを選択した時点でライセンスエラーとなる。dspMixFx上では、マスターのエフェクトにRev-Xエフェクトは選択可能。

メニューからスタジオ→ スタジオ設定
ASIOドライバをYAMAHA Steinbert USB ASIOに設定

Yamaha Steinbert USB ASIOを選択
Cubase 10でUR242が認識されている
メニューからスタジオ→オーディオコネクションから
UR242を入力バスに設定(全面の入力は Input 1と2、背面は3と4)

なかなか、操作性が複雑になってきているCubaseですが、Cubase Pro 10ではこれらのウィンドウはメニュー→スタジオから表示することができる。

eLicenserを使ってアクティベーションを試みる

再度ライセンスソフトを使って、アクティベーションを試みるもアクティベーション済みのメッセージが出る

BasixFXをアクティベーションしようとしてもすでに使用済み