我为SAPI5 Eliska22k安装了捷克语音。它在Windows 7上运行正常。现在我已经在Windows 8上调用了Speak
方法,它给了我Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
此外,我尝试使用.NET System.Speech中的SpeechSynthesizer
。它还可以看到安装了Eliska22k语音(在W7上它只适用于SAPI5)但它不会写任何它不会启动的异常。在SelectVoice("Eliska22k")
方法程序上退出。
默认语音在SAPI5中也可以在默认语音中正常工作。
我安装了SpeechPad
,它可以正常使用语音Eliska22k。我找不到问题了。
SpeechSynthesizer voice = new SpeechSynthesizer();
voice.SelectVoice("Eliska22k");// here program just exit without any exeption
voice.Rate = 2;
voice.SpeakAsync("Ahoj, jak se máš?");
SAPI5
SpVoice voice = new SpVoice();
voice.Voice = voice.GetVoices().Item(6);// index of eliska voice
voice.Rate = 2;
voice.Speak("Ahoj, jak se máš?", SpeechVoiceSpeakFlags.SVSFlagsAsync);//here occurs exeption
感谢您的想法。
答案 0 :(得分:0)
据我所知,该软件尚未与Windows 8兼容。
Xtranormal开发了这些语音包,将其文本添加到动画软件中作为补充。
从PC World查看此软件的评论表明其2.5测试版的规格适用于Windows XP和Windows Vista。
请注意,PCWorld审核是在2010年进行的。在此次审核之后,Windows 7支持已经整合。
注意到Windows 7发布后的滞后以及将此软件升级到Windows 7的兼容性也加强了我的论点,即这还没有准备好。 (Windows 7发布后5个月,PC世界评测了这个软件,这与Windows 7不兼容,Windows 8还没有那么久,升级软件需要时间;))
在their own website上查看他们的技术详细信息建议最迟使用Windows 7的建议设置。
这对我来说表明他们尚未将其更新到Windows 8。
(作为一个额外的FootNote,不是YouTube上这个带有Windows 8的软件的单一教程,但是很多其他操作系统,人们会做一些关于这些日子的教程,而且这个操作系统缺少一个教程(尽管应用程序越来越多) 2年期间的人气再次表明,还没有Windows 8;)
脚注上的注释,Software Informer是一个几乎所有可用软件都经过审核的网站,旧版本收到2-3个评论,相比之下提交的最新版本为260,因此知名人气增加 )
脚注2;我专注于软件的原因是因为声音最初是为该软件设计的。因此,如果声音要接收升级,他们打算首先使用它的软件可能会先升级)
您认为他们只会在他们的网站上说出他们支持的操作系统:/
答案 1 :(得分:0)
不确定这是否是答案,但每当我尝试重复使用相同的媒体元素来反复播放不同的流时(例如,用户是按钮混搭),我就遇到了同样的错误。解决方案是使用显式GC.Collect()。虽然有5个媒体元素也有点好看,因为它似乎可以通过停止和重启音频来加快速度。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Media.SpeechSynthesis;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
namespace SpeechMark
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class BlankPage1 : Page
{
public BlankPage1()
{
this.InitializeComponent();
m_button.Click += m_button_Click;
m_audioPlayerPool = new MediaElement[5];
for(int index = 0; index < m_audioPlayerPool.Length; index++)
{
var audioPlayer = new MediaElement();
audioPlayer.AutoPlay = true;
m_audioPlayerPool[index] = audioPlayer;
m_grid.Children.Add(audioPlayer);
}
m_textToSpeech = new SpeechSynthesizer();
}
async void m_button_Click(object sender, RoutedEventArgs e)
{
m_button.IsEnabled = false;
if (m_audioPlayer != null)
{
m_audioPlayer.Stop();
}
if (m_stream != null)
{
m_stream.Dispose();
m_stream = null;
}
GC.Collect();
m_audioPlayer = m_audioPlayerPool[m_nextAudioPlayerToUse];
m_nextAudioPlayerToUse = (m_nextAudioPlayerToUse + 1) % m_audioPlayerPool.Length;
string ssml = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en\"><voice gender=\"female\" xml:lang=\"en\"><prosody rate=\"1\">how are you doing</prosody><mark name=\"utteranceComplete\"/></voice></speak>";
m_stream = await m_textToSpeech.SynthesizeSsmlToStreamAsync(ssml);
m_audioPlayer.SetSource(m_stream, m_stream.ContentType);
m_button.IsEnabled = true;
}
private MediaElement m_audioPlayer;
private MediaElement[] m_audioPlayerPool;
private int m_nextAudioPlayerToUse = 0;
private SpeechSynthesizer m_textToSpeech;
public SpeechSynthesisStream m_stream { get; set; }
}
}
XAML:
<Page
x:Class="SpeechMark.BlankPage1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SpeechMark"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid x:Name="m_grid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name="m_button" Height="128" Margin="446,303,0,337" Width="256"/>
</Grid>
</Page>