Click here to Skip to main content
15,889,116 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
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.

ASP.NET
 <%@ 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>

C#
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.
        }
    }
}


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.
Posted
Updated 18-May-16 1:20am

1 solution

C#
I found the answer from

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



ASP.NET
<![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>


C#
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
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900