在ASP.NET C#中使用转发器控件的Speechsynthesizer [英] Speechsynthesizer with repeater control in ASP.NET C#

查看:59
本文介绍了在ASP.NET C#中使用转发器控件的Speechsynthesizer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何人都可以帮我解决问题。

使用转发器控件从数据库加载数据。它正常工作,虽然我正在为视障人士使用,但我正在使用SpeechSynthesizer为用户提供音频输出。



Can anyone please help me to solve is issue.
Am using repeater control to load the data from database. Its working properly, though am going this for visually impaired persons I am using SpeechSynthesizer to serve an audio output to the users.

 <%@ Page language="C#" autoeventwireup="true" codefile="Repeater.aspx.cs" inherits="Repeater"

    async="true" %>

<%@ Register assembly="AjaxControls" namespace="AjaxControls" tagprefix="cc1" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

        <asp:ScriptManager id="ScriptManager1" runat="server"></asp:ScriptManager>
        <asp:UpdatePanel id="UpdatePanel1" runat="server">
            <ContentTemplate>
                <div>
                    <asp:Repeater id="rptCustomers" runat="server">
                        <HeaderTemplate>
                            <table border="1">
                                <tr>
                                    <th scope="col" style="width: 80px">S.No
                                    </th>
                                    <th scope="col" style="width: 80px">Option A
                                    </th>
                                    <th scope="col" style="width: 120px">Option B
                                    </th>
                                </tr>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <tr>
                                <td>
                                    <asp:Label id="lbl_Sno" runat="server" text='<%# Bind("OrtAna_SNo") %>'></asp:Label>
                                </td>
                                <td>
                                    <asp:RadioButton id="rdOrtAna_ADesc" runat="server" text='<%# Bind("OrtAna_ADesc") %>'

                                        groupname="Option" />
                                </td>
                                <td>
                                    <asp:RadioButton id="rdOrtAna_BDesc" runat="server" text='<%# Bind("OrtAna_BDesc") %>'

                                        groupname="Option" />
                                </td>
                            </tr>
                            <tr>
                                <td colspan="3">
                                    <asp:Button id="btn_Spk" runat="server" text="Read" commandname="Speak" />
                                </td>
                            </tr>
                        </ItemTemplate>
                        <FooterTemplate>
                            </table>
                        </FooterTemplate>
                    </asp:Repeater>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Speech;
using System.Speech.Synthesis;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Threading;


public partial class Repeater : System.Web.UI.Page
{
    SpeechSynthesizer sp1 = new SpeechSynthesizer();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            bindgrid();
        }
    }

    public SqlConnection Con()
    {
        string Connectionstring = string.Empty;
        Connectionstring = ConfigurationManager.ConnectionStrings["DBCon"].ToString();
        SqlConnection conn = new SqlConnection(Connectionstring);
        return conn;
    }

    public void bindgrid()
    {
        SqlConnection conn = Con();
        SqlCommand cmd = new SqlCommand("select * from dbo.OrtAna order by OrtAna_SNo", conn); 
        cmd.CommandType = CommandType.Text;
        using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
        {
            DataTable dt = new DataTable();
            sda.Fill(dt);
            rptCustomers.DataSource = dt;
            rptCustomers.DataBind();
        }
    }
    override protected void OnInit(EventArgs e)
    {
        base.OnInit(e);
        rptCustomers.ItemCommand += new RepeaterCommandEventHandler(rptCustomers_ItemCommand);
    }
    protected void rptCustomers_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        RadioButtonList rbt1 = (RadioButtonList)(rptCustomers.FindControl("rdOrtAna_ADesc"));
        RadioButtonList rbt2 = (RadioButtonList)(rptCustomers.FindControl("rdOrtAna_BDesc"));
        
        sp1.Volume = 100;
        sp1.Rate = -3;

        if (e.CommandName == "Speak")
        {
            if (e.Item.ItemIndex == 0)
            {
                sp1.SpeakAsync(rbt1.Text); // Here the code gets keep on loading.
                sp1.Pause();
                Thread.Sleep(1500);
                sp1.Resume();
                sp1.SpeakAsync(rbt2.Text);
                sp1.Pause();
                Thread.Sleep(1500);
            }
            if (e.Item.ItemIndex == 1)
            {
                sp1.SpeakAsync(rbt1.Text);
                sp1.Pause();
                Thread.Sleep(1500);
                sp1.Resume();
                sp1.SpeakAsync(rbt2.Text);
                sp1.Pause();
                Thread.Sleep(1500);
            }
            if (e.Item.ItemIndex == 2)
            { 
                sp1.SpeakAsync(rbt1.Text);
                sp1.Pause();
                Thread.Sleep(1500);
                sp1.Resume();
                sp1.SpeakAsync(rbt2.Text);
                sp1.Pause();
                Thread.Sleep(1500);
            }
            if (e.Item.ItemIndex == 3)
            {
                sp1.SpeakAsync(rbt1.Text);
                sp1.Pause();
                Thread.Sleep(1500);
                sp1.Resume();
                sp1.SpeakAsync(rbt2.Text);
                sp1.Pause();
                Thread.Sleep(1500);
            }
            if (e.Item.ItemIndex == 4)
            {
                sp1.SpeakAsync(rbt1.Text);
                sp1.Pause();
                Thread.Sleep(1500);
                sp1.Resume();
                sp1.SpeakAsync(rbt2.Text);
                sp1.Pause();
                Thread.Sleep(1500);
            }
            if (e.Item.ItemIndex == 5)
            {
                sp1.SpeakAsync(rbt1.Text);
                sp1.Pause();
                Thread.Sleep(1500);
                sp1.Resume();
                sp1.SpeakAsync(rbt2.Text);
                sp1.Pause();
                Thread.Sleep(1500);
            }
            //need more itemindex to be looped; because having 100 of records to be accessed.
        }
    }
}





我尝试了什么:



如果不使用转发器,音频工作正常,但我需要将100个数据加载到页面,所以我一定要转发。使用转发器,SpeechSynthesizer无法正常工作。请检查我的代码并做必要的事情。



What I have tried:

Without using repeater the audio is working perfectly , but I need to load 100’s of data to the page, so I bound to repeater. Using repeater the SpeechSynthesizer is not functioning. Please check my code and do the needful.

推荐答案

I found the answer from

http://www.aspforums.net/Threads/130496/SpeechSynthesizer-with-Repeater-control/Replies/1#Replies










<![CDATA[<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TT.aspx.cs" Inherits="TT" Async="true" %>]]>



<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Text to Speech </title>
</head>
<body>
    <form id="form1" runat="server">
 
    <div>
    <asp:repeater id="rptOA" runat="server" xmlns:asp="#unknown">
        <HeaderTemplate>
            <table border="1">
                <tr>
                    <th scope="col" style="width: 80px">
                        S.No
                    </th>
                    <th scope="col" style="width: 80px">
                        Option A
                    </th>
                    <th scope="col" style="width: 120px">
                        Option B
                    </th>
                </tr>
        </HeaderTemplate>
        <itemtemplate>
            <tr>
                <td>
                    <asp:label id="lbl_Sno" runat="server" text="<%# Bind("OrtAna_SNo") %>"></asp:label>
                </td>
                <td>
                    <asp:radiobutton id="rdOrtAna_ADesc" runat="server" text="<%# Bind("OrtAna_ADesc") %>">
                        GroupName="Option" />
                </asp:radiobutton></td>
                <td>
                    <asp:radiobutton id="rdOrtAna_BDesc" runat="server" text="<%# Bind("OrtAna_BDesc") %>">
                        GroupName="Option" />
                </asp:radiobutton></td>
            </tr>
            <tr>
                <td colspan="3">
                    <asp:button id="btn_Spk" runat="server" text="Read" commandname="Speak" />
                </td>
            </tr>
        </itemtemplate>
        <footertemplate>
            </footertemplate></table>
        
    </asp:repeater>
</div>
         
 
    </form>
</body>
</html>







using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Speech;
using System.Speech.Synthesis;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Threading;
public partial class TT : System.Web.UI.Page
{
    SpeechSynthesizer sp1 = new SpeechSynthesizer();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
            binddata();
        }
    }

    public SqlConnection Con()
    {
        string Connectionstring = string.Empty;
        Connectionstring = ConfigurationManager.ConnectionStrings["DBCon"].ToString();
        SqlConnection conn = new SqlConnection(Connectionstring);
        return conn;
    }

    public void binddata()
    {
        SqlConnection conn = Con();
        SqlCommand cmd = new SqlCommand("select * from dbo.OrtAna order by OrtAna_SNo", conn);
        cmd.CommandType = CommandType.Text;
        using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
        {
            DataTable dt = new DataTable();
            sda.Fill(dt);
            rptOA.DataSource = dt;
            rptOA.DataBind();
        }
    }
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        rptOA.ItemCommand += new RepeaterCommandEventHandler(rptOA_ItemCommand);        
    }

    protected void rptOA_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        RadioButton rbt1 = (RadioButton)(e.Item.FindControl("rdOrtAna_ADesc"));
        RadioButton rbt2 = (RadioButton)(e.Item.FindControl("rdOrtAna_BDesc"));
        sp1.SelectVoiceByHints(VoiceGender.Male);
        sp1.Volume = 100;
        sp1.Rate = 0;

        if (e.CommandName == "Speak")
        {
            sp1.SpeakAsync(rbt1.Text); 
            Thread.Sleep(100);
            sp1.SpeakAsync(rbt2.Text);
        }
    }
}







Narendran Namachivayam




Narendran Namachivayam


这篇关于在ASP.NET C#中使用转发器控件的Speechsynthesizer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆