6


0

NET 3.5のSystem.Speech.Synthesis.SpeechSynthesizerクラスを使用すると、SpeakProgressEventArgsのAudioPositionプロパティが不正確に見えます。

次のコードは次の出力を生成します。

コード:

システムを使用する。 System.Speech.Synthesisを使用します。 System.Threadingを使用します。

名前空間SpeechTest {classプログラム{static ManualResetEvent speechDoneEvent = new ManualResetEvent(false);}

static void Main(string [] args){SpeechSynthesizer syntizer = new SpeechSynthesizer();}

syntizer.SpeakProgress = new EventHandler(synthesiser_SpeakProgress);

syntizer.SpeakCompleted = new EventHandler(synthesiser_SpeakCompleted);

syntizer.SetOutputToWaveFile( "Test.wav");

syntizer.SpeakAsync( "このホリデーシーズンは、Made in Washington、オンライン、または5つの地元の店のいずれかで、お気に入りの音楽をサポートしています。 ワシントンのチョコレートで作られた、豊富なギフトバスケットや装飾品は、家族、友人、同僚にぴったりのホリデーギフトです。 ");

speechDoneEvent.WaitOne(); }

static void synthesizer_SpeakCompleted(オブジェクト送信側、SpeakCompletedEventArgs e){speechDoneEvent.Set(); }

static void synthesizer_SpeakProgress(オブジェクト送信者、SpeakProgressEventArgs e){Console.WriteLine( "SpeakProgress:" AudioPosition = "e.AudioPosition"、\ tCharacterPosition = "e.CharacterPosition"、\ tCharacterCount = "e.CharacterCount"、\ tText = "e。テキスト); }}}

出力:

SpeakProgress:AudioPosition = 00:00:00:0043750、CharacterPosition = 0、CharacterCount = 4、Text =このSpeakProgress:AudioPosition = 00:00:00.2925625、CharacterPosition = 5、CharacterCount = 7、Text =休日SpeakProgress:AudioPosition = 00:00: 00.9086250、CharacterPosition = 13、CharacterCount = 6、Text =シーズンSpeakProgress:AudioPosition = 00:01.9421250、CharacterPount = 21、Text =サポートSpeakProgress:AudioPosition = 00:00:02.5621250、CharacterPount = 29 3、Text = SpeakProgress:AudioPosition = 00:00:02.6760625、CharacterPosition = 33、CharacterCount = 5、Text = music SpeakProgress:AudioPosition = 00:00:03.2648125、CharacterPosition = 39、CharacterCount = 3、Text =あなたSpeakProgress:AudioPosition = 00:00:03.5199375、CharacterPosition = 43、CharacterCount = 4、Text = love SpeakProgress:AudioPosition = 00:00:03.8435625、CharacterPosition = 48、CharacterCount = 2、Text = by SpeakProgress:AudioPosition = 00:00:04.070 1875、CharacterPosition = 51、CharacterCount = 8、Text =ショッピングSpeakProgress:AudioPosition = 00:00:04.6840625、CharacterPosition = 60、CharacterCount = 2、Text = at SpeakProgress:AudioPosition = 00:00:04.8036250、CharacterPount = 63 4、Text = Made SpeakProgress:AudioPosition = 00:00:05.0698125、CharacterPosition = 68、CharacterCount = 2、Text = in SpeakProgress:AudioPosition = 00:00:05.2521250、CharacterPosition = 71、CharacterCount = 10、Text =ワシントンSpeakProgress:AudioPosition = 00:00:06.2961875、CharacterPosition = 83、CharacterCount = 6、Text = online SpeakProgress:AudioPosition = 00:00:07.0540625、CharacterPosition = 90、CharacterCount = 3、Text =およびSpeakProgress:AudioPosition = 00:00:07.3331250、CharacterPosition = 94、CharacterCount = 2、Text = at SpeakProgress:AudioPosition = 00:00:07.6818750、CharacterPosition = 97、CharacterCount = 3、Text = 1 SpeakProgress:AudioPosition = 00:00:08.0598750、CharacterPosition = 101、CharacterCo unt = 2、Text = of SpeakProgress:AudioPosition = 00:00:08.2163750、CharacterPosition = 104、CharacterCount = 4、Text = 5 SpeakProgress:AudioPosition = 00:00:08.5971875、CharacterPosition = 109、CharacterCount = 5、Text =ローカルSpeakProgress :AudioPosition = 00:00:09.0243750、CharacterPosition = 115、CharacterCount = 6、Text =ストアSpeakProgress:AudioPosition = 00:00:10.5325625、CharacterPosition = 123、CharacterCount = 4、Text = Made SpeakProgress:AudioPosition = 00:00:10.7700625 、CharacterPosition = 128、CharacterCount = 2、Text = in SpeakProgress:AudioPosition = 00:00:10.9377500、CharacterPosition = 131、CharacterCount = 10、Text =ワシントンSpeakProgress:AudioPosition = 00:00:11.6708125、CharacterPosition = 142、CharacterCount = 10 、Text =チョコレートSpeakProgress:AudioPosition = 00:00:12.9798750、CharacterPosition = 154、Character = count:9 SpeakProgress:AudioPosition = 00:00:13.6303125、CharacterPosition = 164、CharacterCount = 4、Text =ギフトSpeakPr ogress:AudioPosition = 00:00:14.0959375、CharacterPosition = 169、CharacterCount = 7、Text =バスケットSpeakProgress:AudioPosition = 00:00:14.7848125、CharacterPosition = 177、CharacterCount = 3、Text =およびSpeakProgress:AudioPosition = 00:00: 15.0507500、CharacterPosition = 181、CharacterCount = 9、Text =装飾品SpeakProgress:AudioPosition = 00:00:15.7195000、CharacterPosition = 191、CharacterCount = 3、Text =はSpeakProgress:AudioPosition = 00:00:15.9872500、CharacterPosition = 195、CharacterCount = 195です。 3、Text = SpeakProgress:AudioPosition = 00:00:16.1488750、CharacterPosition = 199、Character = count SpeakProgress:AudioPosition = 00:00:16.7275000、CharacterPosition = 207、CharacterCount = 7、Text =休日SpeakProgress:AudioPosition = 00:00:17.3336875、CharacterPosition = 215、CharacterCount = 5、Text =ギフトSpeakProgress:AudioPosition = 00:00:17.9813125、CharacterPosition = 221、CharacterCount = 3、Text = SpeakProgress用:AudioPosition = 00:00:18.2216 875、CharacterPosition = 225、CharacterCount = 6、Text = family SpeakProgress:AudioPosition = 00:00:19.0973750、CharacterPosition = 233、Character = Count = 7、Text =フレンドSpeakProgress:AudioPosition = 00:00:19.7726250、CharacterPount = 241 3、Text =およびSpeakProgress:AudioPosition = 00:00:19.9655625、CharacterPosition = 245、CharacterCount = 10、Text =同僚SpeakProgress:AudioPosition = 00:00:20.2518750、CharacterPosition = 245、CharacterCount = 10、Text = co-労働者

ただし、作成された.wavファイルの期間は15.69秒です。 Streamまたはnullに出力した場合も同じ現象が発生します。

このプロパティの documentationには、プロパティは "イベントの時間位置を表すTimeSpanオブジェクトですオーディオ出力ストリームで "#:。

それは単語が出力ファイルで話し始められたか話し終わった時間を示す正確な時間であるべきですか、または私はそれを誤解していますか?

1 Answer


1


「audioPosition」は、音声合成装置の選択された音声に依存します。 私が経験したように、Anna、Zira、David、Hazelなどのマイクロソフトの声では、サポートされているオーディオフォーマットは16000Hz PCMです。 そのため、以下の解決策でauidoのポジションを修正できます。

var format =
new System.Speech.AudioFormat.SpeechAudioFormatInfo(EncodingFormat.Pcm,
                                                    16000, 16, 1, 32000, 2, null);
synthesizer.SetOutputToWaveFile("Test.wav", format);

注意してください、 SetOutputToWaveFile`のデフォルトのサンプルレートは22050で、 AudipPosition`(20.25)によって示される時間に対する正しい時間(15.69)の比率は約0.77です。 この比率に22050を掛けると、約16000になります。これは正しいサンプルレートです。