Archief - [PROG]C# C# speech technology

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ReCkLeSS123

Legacy Member
voor mijn GIP bestuur ik externe hardware vie spraak technologie.
Op csharpcorner.com het ik een voorbeeld programma gevonden.

als ik alles instaleer van engines, en alle nodige zaken toevoeg in c# heb ik problemen met hetvolgende :
"Kan geen exemplaar maken van ActiveX-besturingselement d45fd31b-5c6e-11d1-9ec1-00c04fd7081f, omdat de huidige thread zich niet in een apartment met één thread bevindt."

ik versta er niets van

pic :
error.JPG



hopelijk weten jullie tips, of oplossingen

Emerxill

Legacy Member
try { //de regel waar hij een fout geeft } catch(ThreadStateException tse) { //handling }
der rond doen?

Ik zou dat toch zo in java zo doen (of uwe method die exception laten throwen) :unsure:

ReCkLeSS123

Legacy Member
het rare is als hij het eerder aanmaakt, geeft hij geen fouten, het is pas als hij het eerst gebruikt dat hij fouten heeft :
de code :

Code:
using System;
using System.Drawing;
using System.WinForms;
using AgentObjects;
public class Speech : Form
{
private System.ComponentModel.Container components;
private System.WinForms.Button button2;
private System.WinForms.Button button1;
private System.WinForms.TextBox textBox1;
[U]private AxAgentObjects.AxAgent AxAgent;[/U]
private IAgentCtlCharacterEx Character;
public Speech()
{
InitializeComponent();
}
public static void Main(string[] args)
{
Application.Run(new Speech());
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.button1 = new System.WinForms.Button();
this.button2 = new System.WinForms.Button();
this.textBox1 = new System.WinForms.TextBox();
[U]this.AxAgent = new AxAgentObjects.AxAgent();[/U]
AxAgent.BeginInit();
button2.Click += new System.EventHandler(button2_Click);
button1.Location = new System.Drawing.Point(88, 208);
button1.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB
(byte)255, (byte)128, (byte)128);
button1.Size = new System.Drawing.Size(152, 32);
button1.TabIndex = 1;
button1.Text = "Load character";
button2.Location = new System.Drawing.Point(120, 240);
button2.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB
(byte)255, (byte)128, (byte)128);
button2.Size = new System.Drawing.Size(96, 24);
button2.TabIndex = 2;
button2.Text = "SPEAK";
textBox1.Location = new System.Drawing.Point(48, 8);
textBox1.Text = " ";
textBox1.Multiline = true;
textBox1.TabIndex = 0;
textBox1.Size = new System.Drawing.Size(248, 200);
textBox1.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB
(byte)255, (byte)128, (byte)128);
this.Text = "MSAGENT DEMO";
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.WindowState = System.WinForms.FormWindowState.Maximized;
this.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB((byte)
55, (byte)192, (byte)192);
this.ClientSize = new System.Drawing.Size(344, 301);
AxAgent.Command += new
AxAgentObjects._AgentEvents_CommandEventHandler(AxAgent_Command);
this.Controls.Add(button2);
this.Controls.Add(button1);
this.Controls.Add(textBox1);
this.Controls.Add(AxAgent);
button1.Click += new System.EventHandler(button1_Click);
AxAgent.EndInit();
}
protected void button2_Click(object sender, System.EventArgs e)
{
if(textBox1.Text.Length == 0)
return;
Character.Speak(textBox1.Text, null);
}
protected void button1_Click(object sender, System.EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.Filter = "Microsoft Agent Characters (*.acs)|*.acs";
openFileDialog.FilterIndex = 1 ;
openFileDialog.RestoreDirectory = true ;
if(openFileDialog.ShowDialog() != DialogResult.OK)
return;
try { AxAgent.Characters.Unload("CharacterID"); }
catch { }
AxAgent.Characters.Load("CharacterID", (object)openFileDialog.FileName);
Character = AxAgent.Characters["CharacterID"];
haracter.LanguageID = 0x409;
Character.Show(null);
Character.Commands.Caption = "Sample Commands";
Character.Commands.Add("Who is your Master?",
(object)"Who is your Master?",
(object)"(Your(Master| Administrator))",
(object)true,
(object)true);
Character.Commands.Add("Exit",
(object)"Exit",
(object)"(exit | close | quit)",
(object)true,
(object)true);
Character.Play ("announce");
Character.Speak ("welcome you sir",null);
}
protected void AxAgent_Command(object sender,
AxAgentObjects._AgentEvents_CommandEvent e)
{
IAgentCtlUserInput ui;
ui = (IAgentCtlUserInput)e.p_userInput;
if(ui.Name == "Who is your Master?")
{
Character.Play ("Pleased");
Character.Speak((object)"My Master name is G.GNANA ARUN GANESH." +
" You can contact him through his mail [email protected].", null);
}
if(ui.Name == "Exit")
{
Character.Speak((object)"Good bye", null);
Character.Play("Wave");
Character.Play("Hide");
}
}
}


(zie onderlijnde)

killgore

Legacy Member
private AxAgentObjects.AxAgent AxAgent; = declaratie, wordt nog niets van constructors en zo opgeroepen (in een taal als c++ is dit anders moest je je hierop bv. baseren).
this.AxAgent = new AxAgentObjects.AxAgent(); = creatie van een object. Als dit object niet kan gemaakt worden (wegens ontbreken van ondersteuning) zal hij hier pas een fout geven.

Het eerste zal enkel en alleen een fout geven wanneer die klasse niet bestaat. Dat 2e zal uw activex fouten leveren ;).

En de fout lijkt me nogal duidelijk tbh :x.

Emerxill

Legacy Member
Idd, en daarom dat ge developers van die code bij de method "AxAgent" een Exception hebben gedeclareerd met de bedoeling dat de gebruiker van die code deze afhandelt of, opnieuw declareert (Handle or Declare) zodat die later afgehandelt kan worden.
Hoe dan ook ge zult die Exception ooit moeten afhandelen, zodat moest er een probleem zich voordoen uw applicatie nog verder kan blijven draaien. Tenzij ge wenst dat die stopt bij deze Exception...

ReCkLeSS123

Legacy Member
killgore zei:
private AxAgentObjects.AxAgent AxAgent; = declaratie, wordt nog niets van constructors en zo opgeroepen (in een taal als c++ is dit anders moest je je hierop bv. baseren).
this.AxAgent = new AxAgentObjects.AxAgent(); = creatie van een object. Als dit object niet kan gemaakt worden (wegens ontbreken van ondersteuning) zal hij hier pas een fout geven.

Het eerste zal enkel en alleen een fout geven wanneer die klasse niet bestaat. Dat 2e zal uw activex fouten leveren ;).

En de fout lijkt me nogal duidelijk tbh :x.

dat had ik ook al door, maar daarmee kom ik niet veel verder... :s

emerxill, hoe moet ik dit doen ? (srr voor eventueel noob overkomen ^^)

Emerxill

Legacy Member
ReCkLeSS123 zei:
dat had ik ook al door, maar daarmee kom ik niet veel verder... :s

emerxill, hoe moet ik dit doen ? (srr voor eventueel noob overkomen ^^)

Ik zou proberen rond die lijn een try-catch te zetten.
Alleen weet ik niet 100% hoe dat precies in C# moet, ik vermoed dat het gelijkaardig is aan Java.
Code:
 try { 
//de regel waar hij een fout geeft 
this.AxAgent = new AxAgentObjects.AxAgent();
} catch(ThreadStateException tse) { 
//handling, hier kunt ge bijv uw exception uitprinten of iets dergelijks zodat ge weet wat er gebeurt.
}

Ik zou u ens aanraden de vakliteratuur van C# ivm Exception handling eens te bekijken om na te gaan hoe dat precies moet, want ik spreek hier alleen uit mijn ervaring met Java.
Tenzij de lokale C# kenners mij willen aanvullen/verbeteren...

ReCkLeSS123

Legacy Member
als ik er een try-catch over plaats, en hem (indien de code niet lukt) laat doorgaan, krijg ik een error bij hetvolgende :

error2.JPG

Emerxill

Legacy Member
wat hebt ge geleerd door daar ne Exception handler rond te bouwen? :)

*edit* nu weet ik niet hoe dat in C# zit, ma feitelijk zijt ge niet geacht een NullReferenceException op te vangen. :unsure:
NullRefEx wil eigenlijk zeggen het Object dat ge wilt gebruiken niet instantieerd is (dmv "new" te gebruiken maakt ge een instance van uw klasse aan)

ReCkLeSS123

Legacy Member
ben al stapje verder geraakt.
ik kan nu het prog runnen zonder errors, maar mijn design-kader komt er wel op.
Maar er staat niets in

de code die ik heb gewijzigt is :
Code:
public Hello()
{
//InitializeComponent();
}

hij zei dat hij dit al zelf aanmaakte en dat dit niet automatisch most gebeuren

maarjah ...

nu is mijn programma dus :


Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using AgentObjects;
public class Hello: Form
{
private System.ComponentModel.Container components;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
private AxAgentObjects.AxAgent AxAgent;
private IAgentCtlCharacterEx Character;

public Hello()
{
//InitializeComponent();
}
public static void Main(string[] args)
{
Application.Run(new Hello());
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.AxAgent = new AxAgentObjects.AxAgent();
AxAgent.BeginInit();
button2.Click += new System.EventHandler(button2_Click);
button1.Location = new System.Drawing.Point(88, 208);
//button1.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128,(byte)128);
button1.Size = new System.Drawing.Size(152, 32);
button1.TabIndex = 1;
button1.Text = "Load character";
button2.Location = new System.Drawing.Point(120, 240);
//button2.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128,(byte)128);
button2.Size = new System.Drawing.Size(96, 24);
button2.TabIndex = 2;
button2.Text = "SPEAK";
textBox1.Location = new System.Drawing.Point(48, 8);
textBox1.Text = " ";
textBox1.Multiline = true;
textBox1.TabIndex = 0;
textBox1.Size = new System.Drawing.Size(248, 200);
//textBox1.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128,(byte)128);
this.Text = "MSAGENT DEMO";
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
//this.BackColor = (System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)192,(byte)192);
this.ClientSize = new System.Drawing.Size(344, 301);
this.Controls.Add(button2);
this.Controls.Add(button1);
this.Controls.Add(textBox1);
this.Controls.Add(AxAgent);
button1.Click += new System.EventHandler(button1_Click);
AxAgent.EndInit();
}
protected void button2_Click(object sender, System.EventArgs e)
{
if(textBox1.Text.Length == 0)
return;
Character.Speak(textBox1.Text, null);
}
protected void button1_Click(object sender, System.EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.Filter = "Microsoft Agent Characters (*.acs)|*.acs";
openFileDialog.FilterIndex = 1 ;
openFileDialog.RestoreDirectory = true ;
if(openFileDialog.ShowDialog() != DialogResult.OK)
return;
try { AxAgent.Characters.Unload("CharacterID"); }
catch { }
AxAgent.Characters.Load("CharacterID", (object)openFileDialog.FileName);
Character = AxAgent.Characters["CharacterID"];
Character.LanguageID = 0x409;
Character.Show(null);
Character.Play ("announce");
Character.Speak ("welcome you sir",null);
}
}

killgore

Legacy Member
Emerxill zei:
wat hebt ge geleerd door daar ne Exception handler rond te bouwen? :)

*edit* nu weet ik niet hoe dat in C# zit, ma feitelijk zijt ge niet geacht een NullReferenceException op te vangen. :unsure:
NullRefEx wil eigenlijk zeggen het Object dat ge wilt gebruiken niet instantieerd is (dmv "new" te gebruiken maakt ge een instance van uw klasse aan)

Wat vrij wiedes is, de creatie van zijn object mislukt in de try-code & dan gaat hij doodleuk met dat object voortwerken.

big nono :naughty:.

In die catch exit je als die variabele cruciaal is!

Emerxill

Legacy Member
Zo ver had ik nogeens niet gedacht, u heeft gelijk :)
Pff ne ganse dag in crappy code werken verloederd het brein :sad:
(niet bedoeld op de threadstarter zijn code)

jodeman

Legacy Member
Emerxill zei:
Zo ver had ik nogeens niet gedacht, u heeft gelijk :)
Pff ne ganse dag in crappy code werken verloederd het brein :sad:
(niet bedoeld op de threadstarter zijn code)
off topic : mss moeten we eens een thread starten met crappy code dat we tegenkomen. Ik heb ook al wat meesterwerken zien passeren :p.

killgore

Legacy Member
jodeman zei:
off topic : mss moeten we eens een thread starten met crappy code dat we tegenkomen. Ik heb ook al wat meesterwerken zien passeren :p.

geen dailywtf readers :p?

(em steekt wel licht tegen de laatste maanden)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan