テキスト読み上げを実行していますが、レキシコンファイルでいくつかの特別な発音を指定したいと思います。私はMSDNのAddLexiconの例を逐語的に実行しました、そしてそれは文を話します、しかしそれは与えられたレキシコンを使用しません、何かが壊れているように見えます。
提供されている例は次のとおりです。
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();
}
}
}
およびレキシコンファイル:
<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>
コンソールが開き、テキストが読み上げられますが、新しい発音は使用されません。c:\test\whatchamacallit.pls
もちろん、指定どおりにファイルを保存しました。
@"C:\Temp\whatchamacallit.pls"
URIとファイルの場所(たとえば、@"file:///c:\test\whatchamacallit.pls"
)、絶対パスと相対パスのバリエーション、ビルドフォルダーへのコピーなどを試しました。
Process Monitorを実行しましたが、ファイルにアクセスできません。それがディレクトリ/ファイルのアクセス許可の問題である場合(そうではありません)、アクセス拒否のメッセージが表示されますが、テキストエディタからの時折の参照を除いて、参照はまったく記録されません。試してみると、アクセスされたファイルが表示されますFile.OpenRead
。
残念ながら、ガベージウリを使用してもエラーメッセージは表示されません。
さらに調査したところ、この例はMicrosoft.Speech.Synthesisからのものであることがわかりましたが、ここではSystem.Speech.Synthesisを使用しています。しかし、私が知る限り、いくつかの追加情報と例を除いてそれらは同一であり、両方とも同じ仕様を指しています。これはまだ問題でしょうか?
プロジェクトが適切な.NETFramework4を使用するように設定されていることを確認しました。
私はMSDNの例を参照されている仕様の例と比較し、それらを完全に試しましたが、役に立ちませんでした。ファイルがアクセスされていないように思われることを考えると、私は驚かない。
(私はPromptBuilder.AppendTextWithPronunciation
問題なく使用できますが、私のユースケースには適していません。)
MSDNの例は壊れていますか?SpeechSynthesizerでレキシコンを使用するにはどうすればよいですか?