在 UWP 里,可以非常方便將某個文本轉換為音頻語音,轉換時,將會根據輸入的內容以及本機所安裝的語言庫選擇一位機器人幫忙將輸入的文本轉換為語音,本文來告訴大家如何切換文本轉語音的機器人,例如從默認的女聲轉換為男聲,如選擇 Kangkang 或 Huihui 等特定機器人幫助轉換語音
剛好從盧老師那里接了一個任務,錄制 dotnet 的 20 周年的祝賀視頻,然而過年生活太好的我嗓子沙啞了,于是本來普通話就說得不標準的我開始尋求起代碼之神的幫助,好在翻到了自己的博客,找到了 win10 uwp 字符文本轉語音聲音檔案方法 這篇博客,開始按照此方式錄制,卻發現了默認語音不是 Kangkang 機器人的,在 UWP 里的 SpeechSynthesizer 的 Voice 屬性可以讓咱設定所采用的機器人,但是此 VoiceInformation 物件卻不能創建,不得不贊嘆一下 API 設計者的強大
按照我也不知道哪學到的知識,文本轉語音所采用的 TTS 需要依靠本機所安裝的語言庫,可以在注冊表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\ 路徑下獲取到當前本機所安裝的語言庫,也就是說即使自己開發了此功能,在用戶端能否使用,完全需要取決于用戶端是否安裝了對應的語言包
在 UWP 下,不提供 VoiceInformation 物件的創建方法,必須通過 SpeechSynthesizer 的 AllVoices 屬性獲取本機已安裝的機器人,從里面挑選一個用來設定,例如以下代碼就是挑選 Kangkang 機器人用來幫忙轉文本
using Windows.Media.SpeechSynthesis;
using (SpeechSynthesizer synthesizer = new SpeechSynthesizer())
{
VoiceInformation voice = SpeechSynthesizer.AllVoices.FirstOrDefault(v => v.Id.Contains("zhCN_KangkangM"));
synthesizer.Voice = voice;
}
以上的 AllVoices 屬性是靜態屬性,獲取時,即可拿到本機所有的已安裝的機器人,可以自己遍歷,但是由于這是一個 COM 物件,在 VS 除錯使用相對不方便,推薦大家自己寫一次回圈獲取一下
接下來的轉換文本為語音的方法就之前博客的差不多,代碼如下
private async void Button_OnClick(object sender, RoutedEventArgs e)
{
using (SpeechSynthesizer synthesizer = new SpeechSynthesizer())
{
VoiceInformation voice = SpeechSynthesizer.AllVoices.FirstOrDefault(v => v.Id.Contains("zhCN_KangkangM"));
synthesizer.Voice = voice;
var text = InputTextBox.Text;
try
{
SpeechSynthesisStream stream = await synthesizer.SynthesizeTextToStreamAsync(text);
using (stream)
{
FileSavePicker savePicker = new FileSavePicker();
savePicker.FileTypeChoices.Add("音頻", new[] { ".wav" });
var result = await savePicker.PickSaveFileAsync();
var wordFile = result;
using (var wordFileStream = await wordFile.OpenStreamForWriteAsync())
{
await stream.AsStreamForRead().CopyToAsync(wordFileStream);
}
}
}
catch (Exception exception)
{
Debug.WriteLine(exception);
}
}
}
界面代碼如下
<Grid>
<TextBox x:Name="InputTextBox" Margin="10,10,10,100" HorizontalTextAlignment="Left" HorizontalAlignment="Left" TextWrapping="Wrap"/>
<Button Margin="10,10,10,10" VerticalAlignment="Bottom" Content="文字轉語音" Click="Button_OnClick"></Button>
</Grid>
本文代碼放在 github 歡迎小伙伴訪問
更多請看 SpeechSynthesizer 類 (System.Speech.Synthesis) Microsoft Docs
博客園博客只做備份,博客發布就不再更新,如果想看最新博客,請到 https://blog.lindexi.com/

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可,歡迎轉載、使用、重新發布,但務必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布,如有任何疑問,請與我[聯系](mailto:[email protected]),
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436928.html
標籤:UWP
上一篇:.net core多環境發布部署
