- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
使用 .Net 3.5 中的 System.Speech.Synthesis.SpeechSynthesizer 类,SpeakProgressEventArgs 的 AudioPosition 属性似乎不准确。
以下代码产生以下输出:
代码:
using System;
using System.Speech.Synthesis;
using System.Threading;
namespace SpeechTest
{
class Program
{
static ManualResetEvent speechDoneEvent = new ManualResetEvent(false);
static void Main(string[] args)
{
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
synthesizer.SpeakProgress += new EventHandler<SpeakProgressEventArgs>(synthesizer_SpeakProgress);
synthesizer.SpeakCompleted += new EventHandler<SpeakCompletedEventArgs>(synthesizer_SpeakCompleted);
synthesizer.SetOutputToWaveFile("Test.wav");
synthesizer.SpeakAsync("This holiday season, support the music you love by shopping at Made in Washington, online and at one of five local stores. Made in Washington chocolates, bountiful gift baskets and ornaments are the perfect holiday gifts for family, friends and co-workers.");
speechDoneEvent.WaitOne();
}
static void synthesizer_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
{
speechDoneEvent.Set();
}
static void synthesizer_SpeakProgress(object sender, SpeakProgressEventArgs e)
{
Console.WriteLine("SpeakProgress: AudioPosition=" + e.AudioPosition + ",\tCharacterPosition=" + e.CharacterPosition + ",\tCharacterCount=" + e.CharacterCount + ",\tText=" + e.Text);
}
}
}
输出:
SpeakProgress: AudioPosition=00:00:00.0043750, CharacterPosition=0, CharacterCount=4, Text=This
SpeakProgress: AudioPosition=00:00:00.2925625, CharacterPosition=5, CharacterCount=7, Text=holiday
SpeakProgress: AudioPosition=00:00:00.9086250, CharacterPosition=13, CharacterCount=6, Text=season
SpeakProgress: AudioPosition=00:00:01.9421250, CharacterPosition=21, CharacterCount=7, Text=support
SpeakProgress: AudioPosition=00:00:02.5621250, CharacterPosition=29, CharacterCount=3, Text=the
SpeakProgress: AudioPosition=00:00:02.6760625, CharacterPosition=33, CharacterCount=5, Text=music
SpeakProgress: AudioPosition=00:00:03.2648125, CharacterPosition=39, CharacterCount=3, Text=you
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.0701875, CharacterPosition=51, CharacterCount=8, Text=shopping
SpeakProgress: AudioPosition=00:00:04.6840625, CharacterPosition=60, CharacterCount=2, Text=at
SpeakProgress: AudioPosition=00:00:04.8036250, CharacterPosition=63, CharacterCount=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=Washington
SpeakProgress: AudioPosition=00:00:06.2961875, CharacterPosition=83, CharacterCount=6, Text=online
SpeakProgress: AudioPosition=00:00:07.0540625, CharacterPosition=90, CharacterCount=3, Text=and
SpeakProgress: AudioPosition=00:00:07.3331250, CharacterPosition=94, CharacterCount=2, Text=at
SpeakProgress: AudioPosition=00:00:07.6818750, CharacterPosition=97, CharacterCount=3, Text=one
SpeakProgress: AudioPosition=00:00:08.0598750, CharacterPosition=101, CharacterCount=2, Text=of
SpeakProgress: AudioPosition=00:00:08.2163750, CharacterPosition=104, CharacterCount=4, Text=five
SpeakProgress: AudioPosition=00:00:08.5971875, CharacterPosition=109, CharacterCount=5, Text=local
SpeakProgress: AudioPosition=00:00:09.0243750, CharacterPosition=115, CharacterCount=6, Text=stores
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=Washington
SpeakProgress: AudioPosition=00:00:11.6708125, CharacterPosition=142, CharacterCount=10, Text=chocolates
SpeakProgress: AudioPosition=00:00:12.9798750, CharacterPosition=154, CharacterCount=9, Text=bountiful
SpeakProgress: AudioPosition=00:00:13.6303125, CharacterPosition=164, CharacterCount=4, Text=gift
SpeakProgress: AudioPosition=00:00:14.0959375, CharacterPosition=169, CharacterCount=7, Text=baskets
SpeakProgress: AudioPosition=00:00:14.7848125, CharacterPosition=177, CharacterCount=3, Text=and
SpeakProgress: AudioPosition=00:00:15.0507500, CharacterPosition=181, CharacterCount=9, Text=ornaments
SpeakProgress: AudioPosition=00:00:15.7195000, CharacterPosition=191, CharacterCount=3, Text=are
SpeakProgress: AudioPosition=00:00:15.9872500, CharacterPosition=195, CharacterCount=3, Text=the
SpeakProgress: AudioPosition=00:00:16.1488750, CharacterPosition=199, CharacterCount=7, Text=perfect
SpeakProgress: AudioPosition=00:00:16.7275000, CharacterPosition=207, CharacterCount=7, Text=holiday
SpeakProgress: AudioPosition=00:00:17.3336875, CharacterPosition=215, CharacterCount=5, Text=gifts
SpeakProgress: AudioPosition=00:00:17.9813125, CharacterPosition=221, CharacterCount=3, Text=for
SpeakProgress: AudioPosition=00:00:18.2216875, CharacterPosition=225, CharacterCount=6, Text=family
SpeakProgress: AudioPosition=00:00:19.0973750, CharacterPosition=233, CharacterCount=7, Text=friends
SpeakProgress: AudioPosition=00:00:19.7726250, CharacterPosition=241, CharacterCount=3, Text=and
SpeakProgress: AudioPosition=00:00:19.9655625, CharacterPosition=245, CharacterCount=10, Text=co-workers
SpeakProgress: AudioPosition=00:00:20.2518750, CharacterPosition=245, CharacterCount=10, Text=co-workers
但是,生成的 .wav 文件的持续时间为 15.69 秒。如果您输出到 Stream 或 null,则会发生相同的行为。
documentation对于该属性,表示该属性是“一个 TimeSpan 对象,表示事件在音频输出流中的时间位置”。
它应该是一个准确的时间,表示输出文件中单词开始或结束的时间,还是我误解了它?
最佳答案
audioPosition
取决于所选语音合成器的声音。对于某些 Microsoft 语音,如 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,正确时间 (15.69) 与 AudipPosition
显示的时间 (20.25) 的比率约为 0.77。如果将此比率乘以 22050,您将得到大约 16000,这是正确的采样率。
关于c# - SpeechSynthesizer 的 SpeakProgressEventArgs 是否不准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1718967/
我目前正在做一个项目,我想让 SpeechSynthesizer 说出一段文字。我还想要一个文本块来显示说话时的单词。如果您不了解语音合成器,您可以阅读本文。 所以基本上问题是,当语音合成器说出文本框
我在 Windows 7 64 位操作系统中安装了新的 32 位 Scansoft 语音 (Jennifer),以便能够在我正在开发的一个 .NET 应用程序中使用。 问题是当我调用该方法时:
我有以下代码 [WebMethod] public byte[] stringToWav(string text) { SpeechSynthesizer ss = new SpeechSyn
我开发了一个项目,我想发布它使用 c#、WPF 和 System.Speech.Synthesizer 对象。阻止该项目发布的问题是,每当调用 SpeakAsync 时,它都会留下内存泄漏,该泄漏会增
除了默认的 Anna 语音外,我还需要在 SpeechSynthesizer 中使用男声。我从 Microsoft 安装了一些文件,GetInstalledVoices() 方法说现在我有 Micro
我在我的 Windows 7 32 位操作系统中安装了一个新语音,以便能够在我正在开发的一个 .NET 应用程序中使用。 但是当我使用 GetInstalledVoices() 方法查看所有语音列表时
我试图更换扬声器,但我没有在 SpeechSynthesizer 类中征集所有已安装的扬声器(George、Susan、Jakub),另一方面我有一个根本没有安装(齐拉)。 这里发生了什么?我能否以某
我正在尝试使用 SpeakAsync() 方法来朗读一些文本。但是,在我调用 Speak() 之前它不会开始说话。我不想调用 Speak()。如果我从此代码中删除 Speak() 方法,则根本不会调用
我创建了一个 Storyboard,其中包含一些移动元素/对象,我想将 SpeechSynthesizer 添加到 Storyboard中。 这可能吗?我正在使用 C#。 Storyboard myS
在 C# 的文本到语音应用程序中,我使用 SpeechSynthesizer 类,它有一个名为 SpeakProgress 的事件,每个说出的词都会被触发。但对于某些声音,参数 e.AudioPosi
我正在尝试通过 SSML 和 .NET SpeechSynthesizer (System.Speech.Synthesis) 更改语音文本的音调 SpeechSynthesizer synthesi
我正在执行一些文本到语音转换,我想在词典文件中指定一些特殊的发音。我跑了MSDN's AddLexicon example逐字逐句,它说出句子,但它不使用给定的词典,似乎有些东西被破坏了。 这是提供的
我正在编写一个应用程序来向学生朗读随机学习问题。 基本流程是: 生成随机问题 将文本分配给 SpeechUtterrance 使用 SpeechSynthesizer 播放 SpeechUtteran
所以我正在尝试向 SpeechSynthesizer 添加一种新语言,特别是挪威语,但它似乎没有安装。 发现这个: Add another voice into .NET Speech(但这里的问题是
我正在使用 Microsoft 的 SpeechSynthesizer 为我的 Windows Phone 应用创建音频输出。我用这个代码 private async void TextToSpeec
我想做的是按下朗读按钮,这将突出显示第一段,然后朗读该段落,然后将下一段滚动到 textView 的中心并突出显示该段落并朗读它等等。我必须添加什么代码才能做到这一点? import UIKit im
在 C# 中使用语音 API 或 SAPI 的这两种方法有什么区别? ? using SpeechLib; SpVoice speech = new SpVoice(); speech.Speak(t
我正在处理文字转语音任务。我面临的问题是,如果我得到例如文本:大家好。还剩 2 分钟。 然后将下面的代码用于语音合成器,它将整个文本视为一个句子,并且在 Hello everyone. 之后不会自然停
我目前正在开发一个需要传输编码为特定音频格式的语音的应用程序。 System.Speech.AudioFormat.SpeechAudioFormatInfo synthFormat =
使用 .Net 3.5 中的 System.Speech.Synthesis.SpeechSynthesizer 类,SpeakProgressEventArgs 的 AudioPosition 属性
我是一名优秀的程序员,十分优秀!