📌

MAUIでWindows上の追加した合成音声を聞きたい!

2022/06/18に公開

前提

VOICEVOXのきゃわいい声を聞けるようにしたい!

実装的には「MAUIでWindows上の新たにSAPIForVOICEVOXで追加した合成音声を聞きたい!」と思い手を動かしました。
https://github.com/shigobu/SAPIForVOICEVOX

VOICEVOXSAPIForVOICEVOXは、事前に入れておいてね。

ちなみに当然のことながら、Windows限定の動作なので、実装するときは、プラットフォーム制限掛けてね。

結論

MAUIデフォのTextToSpeechでは無理

https://docs.microsoft.com/ja-jp/windows/apps/develop/speech

そもそも論、最近のWindowsの合成音声事情が関係してて、SAPIForVOICEVOXでは、名前の通りWindowsではレガシ機能として分類されているSAPIに、音声を追加している。でも、最近のWindowsは、UWP(Windows.Media.SpeechSynthesis)を使う方針になっている。MAUIもその関係上、UWP(Windows.Media.SpeechSynthesis)を使っている。なので、無理。

ちなみに、MAUIデフォにあるTextToSpeechの中身はこちら…
https://github.com/dotnet/maui/blob/f8936a5c62d35eecd95d4345dcb30e1db2419d2d/src/Essentials/src/TextToSpeech/TextToSpeech.uwp.cs

System.Speech.Synthesisを使う

かなぁぁ~~~り丁寧に説明されてた。
なお、System.Speech.Synthesisは、特に依存関係がないので、結構安心して使える。

https://docs.microsoft.com/en-us/dotnet/api/system.speech.synthesis?view=netframework-4.8

NuGetで、System.Speechをインストールする。

https://docs.microsoft.com/en-us/dotnet/api/system.speech.synthesis.speechsynthesizer?view=netframework-4.8

今回は、テストで、色んな声が入っているか確認したいので、下記のように書いた。

SpeechSynthesizer synth = new SpeechSynthesizer();
synth.SetOutputToDefaultAudioDevice();
foreach(InstalledVoice item in synth.GetInstalledVoices()){
	synth.SelectVoice(item.VoiceInfo.Name);
	synth.Speak(item.VoiceInfo.Name);
}

以上、今回は、speak関数使っているので、同期的に動いていますが、SpeakAsyncとeventなどを駆使すれば、非同期にもちゃんと使えます。

Discussion