Autor Beitrag
Gooner
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 25.06.10 11:40 
Hallo zusammen!

Ich lese mit Hilfe der Windows Spracherkennung Phrasen, die in einer xml.Datei hinterlegt sind ein.
Es werden immer "Phrasen" von 3-4 Wörtern erkannt und dann gesplittet gespeichert. In einer Schleife
sind die einzelnen Wörter der Phrase dann über - words[i] - abrufbar.

Nun würde ich diese erkannten Wörter gerne mit Hilfe von Windows Forms wiedergeben, sodass der Nutzer
in der GUI immer eine Übersicht hat, was erkannt wurde.

Es soll also ein kleines Fenster sein, in dem dokumentiert wird, was alles erkannt wurde.
Es soll nichts überschrieben werden, sondern ein Wort nach dem anderen heruntergeschrieben werden.

Die erkannten Wörter in der Schleife jeweils per MessageBox wiederzugeben, bekomme ich hin aber das ist
ja nicht das was ich suche und alle Versuche mit RichTextBox o.ä. sind bisher gescheitert.

Hätte jemand evtl. einen Tipp, welches Control hier am besten geeignet wäre und einen Hinweis wie
ich den Text in jedem Schleifendurchlauf an das Control "sende"?

Liebe Grüße
Gooner
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 25.06.10 11:50 
Hallo und :welcome:,

du könntest das ListBox-Control nehmen. Beim abspeichern in die Xml-Datei werden die einzelnen Phrasen ja irgendo zugegriffen. An dieser Stelle würdest du den Satz/Ausdruck der ListBox hinzufügen.

Gruß

Für diesen Beitrag haben gedankt: Gooner
Gooner Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 25.06.10 12:26 
Hallo Daniel,

vielen Dank für Deine Antwort!

Ich fürchte, Du hast mich missverstanden.

Die xml. Datei mit den Phrasen existiert schon und bleibt so wie sie ist. Wenn ich jetzt etwas in
mein Mikrofon spreche, vergleicht Windows mit Hilfe des C# Codes das Signal am Mikrofoneingang mit allen
Phrasen in dieser xml. Datei. Wird etwas gefunden, wird eine Funktion aufgerufen, in der ich dann die Phrase
aufsplitte und in einen Speicher schreibe. Auf die einzelnen Wörter dieser Phrase kann ich dann mit - words[i] -
zugreifen.

An dieser Stelle würde ich gerne in jedem Schleifendurchlauf den Inhalt von words[i] an die Listbox schicken
und da komme ich im Moment, trotz meines 1600 Seiten dicken Buchs nicht weiter!

Liebe Grüße
Gooner
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 25.06.10 12:55 
Ah okay ... dann zeig mal woran es happert. Wenn du die Stelle schon hast, ein Control etc. dann sollte es ja nur eine Kleinigkeit sein.
Gooner Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 25.06.10 13:03 
Hi Daniel,

habe jetzt mal meinen Code hier rein kopiert, hoffe das geht in Ordnung!

Im Moment wird die Spracherkennung durch einen Button getartet.
Wenn dann was erkannt wird, wird es im Moment, wie erwähnt in Message.Boxen ausgegeben
aber das war wie gesagt nur ein Versuch..

Ich weiß jetzt einfach gerade nicht, wie ich die Listbox damit verheirate...

Liebe Grüße und Danke!
Gooner





ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;
using System.Speech;


namespace Mike
{
    public partial class Form1 : Form
    {

        
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {



            SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
            recognizer.SetInputToDefaultAudioDevice();
            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
            recognizer.EndSilenceTimeout = System.TimeSpan.Parse("00:00:00.0000000");
            Grammar grammar = new Grammar("grammar.xml""thema");
            recognizer.UnloadAllGrammars();
            recognizer.LoadGrammar(grammar);
            recognizer.RecognizeAsync(RecognizeMode.Multiple);

        } 
        
  
        private static void recognizer_SpeechRecognized(object sender, System.Speech.Recognition.SpeechRecognizedEventArgs e)
        {

            string s = e.Result.Text;
            string[] words = s.Split(' ');
            for (int i = 0; i < words.Length; i++)
            {
               
                    MessageBox.Show(words[i]);
                
            }

        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }


       
    }
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 25.06.10 13:09 
Anstelle der MessageBox.Show musst das Wort an die ListBox anhängen...
ausblenden C#-Quelltext
1:
listBox1.Add(words[i]);					


Solche Grundlagen findest du auch in jedem C# Buch. Wie zum Beispiel das OpenBook C#.

Gruß
Gooner Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 25.06.10 13:36 
Hallo Daniel,

wenn ich das mache, bekomme ich folgenden Fehler.

Für das nicht statische Feld, die Methode oder die Eigenschaft "Mike.Form1.listBox1" ist ein Objektverweis erforderlich.

Ich weiß gerade nicht, wie ich

ausblenden C#-Quelltext
1:
2:
3:
4:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}


mit meiner Funktion und der Schleife zusammenbringe...

Mir ist klar, dass das hier irgendwo im Buch steht und es ist auch nicht so, dass ich mir keine Mühe gebe aber irgendwie
finde ich in dem Buch selten eine Antwort auf meine Fragen...

Sorry und Danke
Gooner

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 25.06.10 14:02 
Überhaupt nicht.. woher hast du den das? Scheint mir einfach nur reinkopiert zu sein :((

Zuerst musst du dein Control über den Designer (oder im QuellCode selber.. ich rate dir als Anfänger aber den Designer zu verwenden) auf dem Form platzieren. Danach erstellt er automatisch eine Instanz auf die, wie ich im vorherigen Post gezeigt habe, darauf zugreifen kannst.

Und mir ist klar, dass die Antworten zu deiner Frage nicht in einem Buch steht. Aber dort steht eben wie man ein Control und auf ein Form bringt und diese Grundlagen benötigst du für sämtliche Aktivitäten!
Gooner Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 25.06.10 15:46 
Hallo Daniel,

das was ich im letzten Beitrag reinkopiert habe, hat VS 2010 selbst erzeugt
nach dem ich das ListBox Control im Designer plaziert habe.

Ich werde einfach mal weiter probieren.

Danke
Gooner
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Sa 26.06.10 09:45 
Hallo Gooner.

Dass es mit der ListBox nich klappt, hat einfach mal den Grund, dass der Eventhandler bei Dir static ist. Ist normalerweisen nicht so, und habe ich ich noch nie gesehen.
Und Du kannst von einer statischen Methode nicht auf ein nichtstatisches Feld zugreifen.

Also nehme mal das static weg, und dann passt das schon. Habe das alles noch ein bisschen umgeschrieben.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
  if (e!= null && e.Result != null)
  {  
    foreach (RecognizedWordUnit word in e.Result.Words)
    {
      listBox1.Items.Add(word.Text);   
    }   
  }
}

Aber ehrlich gesagt, sieht es für mich auch reinkopiert aus. Sonst wäre der Eventhandler auch nicht static.
Ist nicht böse gemeint und ist ja auch nicht schlimm, sich von woanders mal Hilfe zu holen, aber man sollte dann schon verstehen, wie es denn funktioniert. Und die grundlegensten Sachen sollte man natürlich auch so wissen.

Gruss, Marko
Gooner Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Sa 26.06.10 12:45 
Hallo Marko,

vielen Dank!

Ich werde mich in der nächsten Zeit sehr viel damit auseinander setzen müssen und
ich habe auch nicht vor hier alles zu erfragen nur gestern war ich einfach ein wenig
ungeduldig :-)

Das Programm soll am Ende noch um einiges komplexer sein, deshalb werde ich viel lernen
müssen und hoffe, dass ich das hinbekomme...

Grüße und Danke!
Gooner