![]() |
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:
Ich hab einige Buchstaben rausgenommen, da es sonst zu viel Text ist...
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; Buco ist ein Counter für die Buchstaben und Lico einer für die Zeilen des Memos. |
Re: Vorleseprogramm liest nicht vor :)
Das liegt an den Dateinamen - wo sind die zugehörigen Dateien gespeichert? Nimm mal den Slash (/) weg.
...:cat:... |
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:
|
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? |
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! |
Re: Vorleseprogramm liest nicht vor :)
Und nimm mal absolute Pafde anstatt relative. Dass er dei dateien findet ist reine Glückssache. :roll:
|
Re: Vorleseprogramm liest nicht vor :)
Delphi-Quellcode:
Dann Play, dein Programm wartet automatisch bis die Datei abgespielt ist. Gleicher Fall beim öffnen, auch hier wartet er!
mediaplayer1.Wait := True
Praktisch, oder?! :mrgreen: |
Re: Vorleseprogramm liest nicht vor :)
Zitat:
Delphi-Quellcode:
... ich meine, wenn der Buchstabe eh schon Teil vom Dateinamen ist, warum dann so viel tippen und nicht einfach dynamisch zusammenbauen? ;-)
case zeile[buco] of
c: begin ... end; // alle weiteren spezialverhalten else begin MP1.FileName := zeile[buco] + '.wav'; MP1.Play; end; end; |
Re: Vorleseprogramm liest nicht vor :)
@MisterNiceGuy
aber warum verwendest Du nicht eine TTS-Engine (Text-To-Speech) die das für dich macht ? |
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 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz