如何在 ASP.NET MVC 中使用 Windows 语音合成器

2023-12-31

我尝试使用System.Speech在 ASP.NET mvc 应用程序中生成语音的类。

[HttpPost]
public  ActionResult TTS(string text)
{
   SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
   speechSynthesizer.Speak(text);
   return View();
}

但它给出了以下错误。

 System.InvalidOperationException: 'An asynchronous operation cannot be 
 Started at this time. Asynchronous operations may only be started within an 
 asynchronous handler or module or during certain events in the Page lifecycle. 
 If this exception occurred while executing a Page, ensure that the Page is
 marked <%@ Page Async="true" %>. 
 This exception may also indicate an attempt to call an "async void" method, 
 which is generally unsupported within ASP.NET request processing. Instead, 
the asynchronous method should return a Task, and the caller should await it.

我在 wpf 应用程序中使用了 System.Speech 类和异步方法。

  1. System.Speech 类可以在 ASP.NET mvc 应用程序中使用吗?

  2. 怎么做?

  3. 应该在哪里<%@ Page Async="true" %>是 放置?

答案是:yes, 您可以使用System.SpeechMVC 中的类。

我想你可以尝试使用async控制器动作方法及使用SpeechSynthesizer.Speak https://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.speak(v=vs.110).aspx with Task.Run像这样的方法:

[HttpPost]
public async Task<ActionResult> TTS(string text)
{
    Task<ViewResult> task = Task.Run(() =>
    {
        using (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer())
        {
            speechSynthesizer.Speak(text);
            return View();
        }
    });
    return await task;
}

但是,如上面的示例所示,生成的声音在服务器上播放,因为上面的代码在服务器端而不是客户端运行。要启用在客户端播放,您可以使用SetOutputToWaveFile https://msdn.microsoft.com/en-us/library/ms586883(v=vs.110).aspx方法及用途audio返回视图页面时播放音频内容的标签,如下例所示(假设您在 CSHTML 视图中使用 HTML 5):

控制器

[HttpPost]
public async Task<ActionResult> TTS(string text)
{
    // you can set output file name as method argument or generated from text
    string fileName = "fileName";
    Task<ViewResult> task = Task.Run(() =>
    {
        using (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer())
        {
            speechSynthesizer.SetOutputToWaveFile(Server.MapPath("~/path/to/file/") + fileName + ".wav");
            speechSynthesizer.Speak(text);

            ViewBag.FileName = fileName + ".wav";
            return View();
        }
    });
    return await task;
}

View

<audio autoplay="autoplay" src="@Url.Content("~/path/to/file/" + ViewBag.FileName)">
</audio>

或者您可以将操作类型更改为FileContentResult并使用MemoryStream with SetOutputToWaveStream https://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.setoutputtowavestream(v=vs.110).aspx让用户自己播放音频文件:

Task<FileContentResult> task = Task.Run(() =>
{
    using (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer())
    {
        using (MemoryStream stream = new MemoryStream())
        {
            speechSynthesizer.SetOutputToWaveStream(stream);
            speechSynthesizer.Speak(text);
            var bytes = stream.GetBuffer();
            return File(bytes, "audio/x-wav");
        }
    }
});

参考:

在 ASP.NET MVC 中使用异步方法 https://learn.microsoft.com/en-us/aspnet/mvc/overview/performance/using-asynchronous-methods-in-aspnet-mvc-4

类似问题:

mvc中如何使用语音 https://forums.asp.net/t/2003629.aspx?How%20to%20use%20speech%20in%20mvc

System.Speech.Synthesis 在 2012 R2 上因 CPU 高而挂起 https://stackoverflow.com/questions/32236923/system-speech-synthesis-hangs-with-high-cpu-on-2012-r2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ASP.NET MVC 中使用 Windows 语音合成器 的相关文章

  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 返回视图作为 JSON 对象的一部分

    我有一个应用程序只加载一次完整视图 我这样做的原因并不重要 重要的是 其余内容只会以部分视图的形式返回 除了一些内容之外 我还有一些 JSON 对象 我想通过每个 AJAX 请求在服务器之间来回传递 有没有办法返回一个 JSON 对象 并将
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p

随机推荐

  • 如何使用 Docker 导出 Mongo 数据库?

    我在 docker container 中使用 mongoDB 图像 当我运行将数据库导出到 csv 的命令时 docker exec i 418f46e5595d mongoexport db saveInfo collection in
  • 转换并合并两个相同接口但不同类型的列表

    我有两个使用相同接口的实体 我想将从实体框架获得的两个结果合并到一个列表中IKurs public async Task
  • 获取出现次数最多的外键

    我有以下表格 user option question answer 我想获取以下记录 按用户分组的答案数 按用户分组的回答最多的选项 我尝试使用以下查询 SELECT u id u email COUNT a question id as
  • 向数据框列添加百分号

    我一直在尝试向数据框中的列添加百分号 但无济于事 有人知道吗 import pandas as pd names jimmy red julie brad oranges score 82 38 55 19 33 df pd DataFra
  • 使用 Linq-to-XML ASP.Net C# 查询嵌套 XML 元素

    在我的 ASP Net C 应用程序中 我正在尝试将嵌套的 XML 元素读取到匿名类型集合 这是 XML 示例
  • 为什么布尔原语不调用原型 toString()?

    假设我有这段代码 Boolean prototype toString function toString return this valueOf 1 0 var object true true false false 1 1 0 0 t
  • 是否可以优化我的自定义反序列化器?

    我创建了一个新的自定义反序列化器 当 json 中存在空字符串时 它会返回 null public class CustomDeserializer extends JsonDeserializer
  • 无法安装动物园包(R)

    我正在尝试使用以下方法下载动物园包来处理时间序列 install packages zoo 但我收到以下消息 Please select a CRAN mirror for use in this session Warning unabl
  • JS insertBefore() 并传递一个包含 html 的字符串

    我正在寻找一种方法 如何在纯 JavaScript 中的元素之前插入内容 我有一个页脚元素 html
  • WordPress 和被动事件侦听器的最佳实践

    所以我在 Chrome 中对一个网站进行了审核 谷歌说我应该使用被动事件侦听器 我查看了代码并发现它来自 wordpress 表情符号集成
  • 如何在启动时运行 shell 脚本

    On an 亚马逊S3 https en wikipedia org wiki Amazon S3Linux 实例 我有两个名为start my app and stop my app启动和停止forever https www npmjs
  • 如何以编程方式打开 SearchView?

    ActionBar 有一个名为 SearchView 的小部件 不使用时 它看起来像这样 当它在使用时 它看起来像这样 我想 当然以编程方式 打开搜索视图 使其 使用中 我尝试了几个功能 例如 SearchView searchView S
  • 如何在 R 中复制月度周期图

    我想使用 R 和任何使其看起来不错的包输出一个与本页 右侧 所示的图表类似的图表 http processtrends com pg charts monthly cycle chart htm http processtrends com
  • 检索SQL语句的输出参数

    我正在使用一个有两列的表格 customer id and customer name customer name是一个简单的varchar customer id是一个自动递增的主键 我想使用我的 C 应用程序插入customer nam
  • 更改 BATCH 中的区域和语言选项

    如何使用批处理代码更改 Windows XP 和 7 中的区域和语言选项 我想使用 bat 文件将 标准和格式 更改为墨西哥西班牙语 这些设置位于注册表中HKCU Control Panel International 您可以使用 reg
  • ExtJS:在局部变量中获取代理帖子的响应

    我是 ExtJS 的新手 所以如果这是非常基本的 请原谅 我用谷歌搜索但找不到任何有用的答案 我有一个带有 AJAX 代理类型的商店 tableStore Ext create Ext data Store model TableData
  • 如何通过 IAM 控制用户对 Amazon DynamoDB 数据的访问?

    Does AWS 身份和访问管理 IAM http aws amazon com iam 提供一种方法 使用户只能编辑或删除某个项目中的项目亚马逊动态数据库 http aws amazon com dynamodb 他之前添加的表 AWS
  • Qt 的图表库[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • SSIS - OLE DB 目标 - 表或视图加载与快速加载

    据我读到 表或视图数据访问模式将每一行作为一个事务一次提交 因此 制作一个传输 500 万行的包需要很长时间 30 分钟以上 快速加载数据访问模式允许在插入到目标时指定批处理行和提交大小 例如 插入 500 万条记录只需 2 分钟多一点 现
  • 如何在 ASP.NET MVC 中使用 Windows 语音合成器

    我尝试使用System Speech在 ASP NET mvc 应用程序中生成语音的类 HttpPost public ActionResult TTS string text SpeechSynthesizer speechSynthes