Wykonuję tekst do mowy i chciałbym podać jakieś specjalne wymowy w pliku leksykonu. Zdałem dosłowniei mówi to zdanie, ale nie używa ono podanego leksykonu, coś wygląda na zepsute.Jak używać leksykonu z SpeechSynthesizer?
Oto warunkiem przykład:
using System;
using Microsoft.Speech.Synthesis;
namespace SampleSynthesis
{
class Program
{
static void Main(string[] args)
{
// Initialize a new instance of the SpeechSynthesizer.
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
// Configure the audio output.
synth.SetOutputToDefaultAudioDevice();
PromptBuilder builder = new PromptBuilder();
builder.AppendText("Gimme the whatchamacallit.");
// Append the lexicon file.
synth.AddLexicon(new Uri("c:\\test\\whatchamacallit.pls"), "application/pls+xml");
// Speak the prompt and play back the output file.
synth.Speak(builder);
}
Console.WriteLine();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
i leksykon file:
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="x-microsoft-ups" xml:lang="en-US">
<lexeme>
<grapheme> whatchamacallit </grapheme>
<phoneme> W S1 AX T CH AX M AX K S2 AA L IH T </phoneme>
</lexeme>
</lexicon>
Konsola otwiera tekst jest używany, ale nowy wymowa nie jest używany. Oczywiście zapisałem plik pod numerem c:\test\whatchamacallit.pls
.
Próbowałem wariantów lokalizacji Uri i plików (np @"C:\Temp\whatchamacallit.pls"
, @"file:///c:\test\whatchamacallit.pls"
), ścieżek bezwzględnych i względnych, kopiując je w folderze build itp
Pobiegłem Process Monitor a plik nie jest dostępny . Gdyby to był problem z uprawnieniami do katalogu/pliku (który nie jest) nadal widziałbym komunikaty odmowy dostępu, jednak nie loguję się w ogóle, z wyjątkiem sporadycznego z mojego edytora tekstu. Widzę dostęp do pliku, gdy próbuję File.OpenRead
.
Niestety nie ma komunikatów o błędach podczas korzystania ze śmieci Uri.
W toku dalszych badań zdałem sobie sprawę, że ten przykład pochodzi z Microsoft.Speech.Synthesis, natomiast używam tutaj System.Speech.Synthesis. Jednak z tego, co mogę powiedzieć, są one identyczne, z wyjątkiem niektórych dodatkowych informacji i przykładów i oba wskazują na tę samą specyfikację. Czy to nadal może być problem?
ja zweryfikowany projekt jest skonfigurowany do korzystania właściwa .NET Framework 4.
Porównałem przykład z MSDN do examples from the referenced spec, a także próbuje ci wprost, ale to nie pomogło. Biorąc pod uwagę, że plik nie jest dostępny, nie jestem zaskoczony.
(jestem w stanie wykorzystać PromptBuilder.AppendTextWithPronunciation
dobrze, ale to słaba alternatywa dla mojego przypadku użycia.)
jest przykład na MSDN uszkodzony? Jak używać leksykonu z SpeechSynthesizer?
Chciałem z tego co może powiedzieć, że _ dokumentacja_ jest identyczna. Wreszcie odpowiedź! Dzięki! –
Dokumentacja jest identyczna i nie została nigdzie wymieniona jako znany błąd, co jest dość dziwne. W każdym razie, nie ma za co, mam nadzieję, że to pomaga :) –
Tak, po prostu nie działa w ogóle. –