using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Speech.Synthesis;
using System.IO;
namespace Mittelhochdeutsches_Hörbuch1
{
class Program
{
static void Main(string[] args)
{
/* Unsere Textdatei:
* Wenn das Programm mit Parametern aufgerufen wurde
* Ist das erste davon der Dateiname der Textdatei
* Wir überprüfen, dann ob die Datei existiert und eine Textdatei ist
*/
string TextDateiName = args.Length > 0? args[0]:"";
while (TextDateiName==null | System.IO.File.Exists(TextDateiName)==false | System.IO.Path.GetExtension(TextDateiName) !=".txt" )
{
// Falls keine entsprechende Textdatei zu finden ist,
// erhalten wir den Namen durch eine Konsoleneingabe.
Console.WriteLine("Welche Textdatei soll in ein Hörbuch umgewandelt werden? \n");
TextDateiName = Console.ReadLine();
if (TextDateiName == "") TextDateiName = "D:/Lanzelet 1 - 49.txt"; // Default.
}
StreamReader Textdatei = new StreamReader(TextDateiName);
SpeechSynthesizer synth = new SpeechSynthesizer();
PromptBuilder pb = new PromptBuilder();
Hedda Hedda = new Hedda();
/* Die Ausgabe erfolgt:
* a) In eine beim Programmaufruf durch den zweiten Parameter angegebene Datei
* b) In eine wav Datei, die Namen und das Verzeichnis von der Textdatei übernimmt.
* c) Wenn der Benutzer KEIN "j" auf die Anfrage des Programms antwortet spricht der Computer
*/
string Pfad = System.IO.Path.GetDirectoryName(TextDateiName);
string DateiName = args.Length > 1 ? args[1] : Pfad + System.IO.Path.GetFileNameWithoutExtension(TextDateiName) + ".wav";
Console.WriteLine("Sprachausgabe in Datei?");
if (Console.ReadKey().KeyChar=='j') synth.SetOutputToWaveFile(DateiName+".wav");
string Zeile;
pb.StartSentence(); //Das Vorlesen startet mit einem Satzbeginn
/* Schleife:
* Solange bis das Ende der Textdatei erreicht ist (der Befehl ReadLine() null ergibt)
* Lies die nächste Zeile ein
* Und übergib sie an Hedda zum Vorlesen.
*/
while (( Zeile = Textdatei.ReadLine())!=null)
{
Hedda.LeseZeile(Zeile, pb);
}
//Das Vorlesen endet mit einem Satzende.
pb.EndSentence();
if (Hedda.UnbekannteZeichen.Count > 0)
{
// Unbekannte, also nicht in Lautschrift umsetzbare Zeichen,
// Werden in der Konsole ausgegeben und vorgelesen (sofern möglich).
synth.Speak("Ich habe folgende mir unbekannten Zeichen gefunden:");
Console.WriteLine("Ich habe folgende mir unbekannten Zeichen gefunden:");
foreach (char c in Hedda.UnbekannteZeichen)
{
Console.Write(c); // Schreibe die Hedda unbekannten Zeichen ins Konsolenfenster .
synth.Speak(c.ToString()); // und lass Hedda die Buchstaben sprechen.
}
Console.ReadKey(); //Warte auf eine Zeicheneingabe, bevor Hedda mit dem Lesen des Textes beginnt.
}
Hedda.SchreibeLexikon();
synth.Speak(pb);
Console.ReadKey();
}
}
}