Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Vorleseprogramm liest nicht vor :) (https://www.delphipraxis.net/15466-vorleseprogramm-liest-nicht-vor.html)

MisterNiceGuy 29. Jan 2004 11:44


Vorleseprogramm liest nicht vor :)
 
Hi, hab hier mal angefangen eine Procedure zu schreiben, die ein Memo Buchstabe für Buchstabe durchgeht und jeden einzelnen vorliest. Jedoch tut sie das nicht :)
Wäre nett, wenn mir mal wer sagen könnte, woran das liegt.
Code:
procedure TForm1.play;
var buco, lico:integer;
var zeile:string;
begin
for lico:=0 to memo1.Lines.Count-1 do begin
           zeile := memo1.Lines[lico];
    for buco:=0 to length(zeile) do begin
        case zeile[buco] of
             'a' : begin
                     MP1.FileName := '/a.wav';
                     MP1.Play;
                   end;
             'b' : begin
                     MP1.FileName := '/b.wav';
                     MP2.Play;
                   end;
             'c' : begin
                         if ((zeile[buco-1] = 'a') OR (zeile[buco-1] = 'o') OR (zeile[buco-1] = 'u')) AND (zeile[buco+1] = 'h') then
                         begin
                              mp1.FileName := '/chr.wav';
                              mp1.Play;
                         end;
                         if ((zeile[buco-1] = 'i') OR (zeile[buco-1] = 'e')) AND (zeile[buco+1] = 'h') then
                         begin
                              mp1.FileName := '/ch.wav';
                              mp1.Play;
                         end;
                         if zeile[buco+1] = 'k' then
                         begin
                              mp1.FileName := '/ck.wav';
                              mp1.Play;
                         end;
                     if ((zeile[buco+1] <> 'h') AND (zeile[buco+1] <> 'k')) then
                     begin
                        MP1.FileName := '/c.wav';
                        MP1.Play;
                   end;
                   end;
             'd' : begin
                     MP1.FileName := '/d.wav';
                     MP1.Play;
                   end;
             'e' : begin
                     if zeile[buco+1] = 'i' then begin
                               MP1.FileName := '/ei.wav';
                               MP1.Play;
                               end
                     else begin
                     MP1.FileName := '/e.wav';
                     MP1.Play;
                     end;
                   end;
             'q' : begin
                     if zeile[buco+1] = 'u' then begin
                              MP1.FileName := '/qu.wav';
                              MP1.Play;
                              end
                              else begin
                     MP1.FileName := '/q.wav';
                     MP1.Play;
                     end;
                   end;
             'r' : begin
                     MP1.FileName := '/r.wav';
                     MP1.Play;
                   end;
             's' : begin
                     if ((zeile[buco+1] = 'c') AND (zeile[buco+2] = 'h')) then begin
                              MP1.FileName := '/sch.wav';
                              MP1.Play;
                              end
                              else
                     if (zeile[buco+1] = 's') then begin
                              MP1.FileName := '/ss.wav';
                              MP1.Play;
                              end
                              else begin
                     MP1.FileName := '/s.wav';
                     MP1.Play;
                     end;
                   end;

     end;
end;
end;
memo1.Enabled := true;
end;
Ich hab einige Buchstaben rausgenommen, da es sonst zu viel Text ist...

Buco ist ein Counter für die Buchstaben und Lico einer für die Zeilen des Memos.

sakura 29. Jan 2004 11:47

Re: Vorleseprogramm liest nicht vor :)
 
Das liegt an den Dateinamen - wo sind die zugehörigen Dateien gespeichert? Nimm mal den Slash (/) weg.

...:cat:...

MisterNiceGuy 29. Jan 2004 11:50

Re: Vorleseprogramm liest nicht vor :)
 
Die Dateien befinden sich im selben Verzeichnis wie das Programm. Er liest immer nur den ersten Buchstaben vor. Wenn ich 2 Mediaplayer einbaue, dann liest er auch das b, aber halt nur, wenn es an erster Stelle steht. Da muss irgendwo ein Fehler in den For-Schleifen sein... :wall:

Treffnix 29. Jan 2004 11:54

Re: Vorleseprogramm liest nicht vor :)
 
Hab noch nie mit Mediaplayer gearbeitet, aber kann es sein, dass man den wieder freigeben muss, bevor man ein neues Soundfile laden kann?

btw: Warum schreibste dir nicht ne Play-Function, der du in der Case-Struktur nur den Dateinamen übergibst. Das würde ne Menge Zeilen sparen und das ganze etwas übersichtlicher machen.

Edit: Noch ne Idee: Wartet das Programm, bis der Mediaplayer zu Ende gespielt hat oder kann es auch sein, dass der die Schleife schon komplett abgearbeitet hat, bevor der erste Buchstabensound zu Ende gespielt ist?

MisterNiceGuy 29. Jan 2004 12:02

Re: Vorleseprogramm liest nicht vor :)
 
Guter Tip! Danke, das ist mir garnicht eingefallen :) Werde mal ein paar sleeps reinsetzen.
Vielleicht optimier ich dann noch ein bischen, aber erstmal gucken ob es geht :)

danke!

Luckie 29. Jan 2004 12:30

Re: Vorleseprogramm liest nicht vor :)
 
Und nimm mal absolute Pafde anstatt relative. Dass er dei dateien findet ist reine Glückssache. :roll:

Schubi 29. Jan 2004 12:42

Re: Vorleseprogramm liest nicht vor :)
 
Delphi-Quellcode:
mediaplayer1.Wait := True
Dann Play, dein Programm wartet automatisch bis die Datei abgespielt ist. Gleicher Fall beim öffnen, auch hier wartet er!

Praktisch, oder?! :mrgreen:

Phoenix 29. Jan 2004 12:43

Re: Vorleseprogramm liest nicht vor :)
 
Zitat:

Zitat von MisterNiceGuy
Code:
        case zeile[buco] of
             'a' : begin
                     MP1.FileName := '/a.wav';
                     MP1.Play;
                   end;
             'b' : begin
                     MP1.FileName := '/b.wav';
                     MP2.Play;
                   end;
             'd' : begin
                     MP1.FileName := '/d.wav';
                     MP1.Play;
                   end;
Ich hab einige Buchstaben rausgenommen, da es sonst zu viel Text ist...

Okay, den case bei c wegen z.B. ch ist okay, aber warum machst Du nicht folgendes:

Delphi-Quellcode:
  case zeile[buco] of
      c: begin
         ...
         end;
      // alle weiteren spezialverhalten
  else
    begin
      MP1.FileName := zeile[buco] + '.wav';
      MP1.Play;
    end;
  end;
... ich meine, wenn der Buchstabe eh schon Teil vom Dateinamen ist, warum dann so viel tippen und nicht einfach dynamisch zusammenbauen? ;-)

trifid 29. Jan 2004 12:59

Re: Vorleseprogramm liest nicht vor :)
 
@MisterNiceGuy
aber warum verwendest Du nicht eine TTS-Engine (Text-To-Speech) die das für dich macht ?

MisterNiceGuy 29. Jan 2004 15:16

Re: Vorleseprogramm liest nicht vor :)
 
@Phoenix: Vielen Dank für den Tip, ich werd das Programm dann am Ende noch ein bisschen pressen. Hätte nie gedacht, dass das so klein wird! Sind insgesamt nicht mal 500KB inc. Soundfiles!

@trifid: Das tolle an Delphi ist ja, dass man seine eigenen Programme schreiben kann :lol:
Wollte nurmal versuchen, ob ich das hinkriege, die Idee gefällt mir total gut :)

Allerdings ist es sehr schwer, die einzelnen Laute so aufzunehmen, dass sie sich echt anhören, man müsste sie zur Laufzeit noch etwas verändern können. (Z.B. Tonhöhnen bei Satzenden etc.)
Kennt da einer ne Seite, wo es so ein Tutorial gibt??


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz