![]() |
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?? |
Re: Vorleseprogramm liest nicht vor :)
|
Re: Vorleseprogramm liest nicht vor :)
Nein Mensch :-D Ich meine eine Seite, die sich mit dem "Manipulieren" von Soundfiles in Delphi auseinandersetzt!
Er überprüft jeden Buchstaben des Memos, aber er spilt immernur den letzten! :wall: Wahrscheinlich ist er zu schnell, aber mit Wait:=true; müsste er doch warten, bis jeder Buchstabe "gesprochen" wurde! Hat einer noch eine andere Idee, wie ich ihn dazu bringen kann, dass er erst wartet, bis die Datei komplett abgespielt wurde? Ich glaube nämlich, dass das Wait nur für die Mediaplayer-Komponente gilt... |
Re: Vorleseprogramm liest nicht vor :)
Zitat:
|
Re: Vorleseprogramm liest nicht vor :)
In der OH steht eindeutig, dass Wait das Programm stopp, so lang der Mediaplayer irgendwas macht
Mir fällt gerade ein, dass ich da auch mal so ein Problem hatte. Ich glaub es reicht nicht wenn du das File dem Mediaplayer nur zuweißt. Da gabs irgendwas wie loadfromfile, das musste nehmen wenn ich mich recht erinnere probierst doch aus mit dem wait. nimm dir ne wav, spiel sie ab und danach ein showmessage |
Re: Vorleseprogramm liest nicht vor :)
Okay, hab jetzt wieder was interessates rausbekommen. .wait wird jedesmal nach dem Abspielen einer Datei wieder auf FALSE gesetzt. Find ich persönlich total dämlich! :gruebel:
|
Re: Vorleseprogramm liest nicht vor :)
Blöd isses, stimmt :mrgreen:
Geht jetzt? |
Re: Vorleseprogramm liest nicht vor :)
Hilfe, ich bin echt am Verzweifeln! :wall: Wie schaff ich es, dass das Programm mal wartet, bis der Mediaplyer seine Datei abgespielt hat?
Das muss doch jemand wissen :cry: |
Re: Vorleseprogramm liest nicht vor :)
Funktioniert es denn nicht, wenn du wait jedesmal neu auf true setzt?
|
Re: Vorleseprogramm liest nicht vor :)
Nein, hab ich schon probiert, man hört immernur den letzten Buchstaben :?
|
Re: Vorleseprogramm liest nicht vor :)
Na gut, dann auf die altmodische Tour! :mrgreen:
Setz Wait auf True, mach play, und setz danach ne Schleife hin.
Delphi-Quellcode:
dann spielste den nächsten ab
repeat until not Mediaplayer1.Wait;
|
Re: Vorleseprogramm liest nicht vor :)
[OT]Klingen die Sätze nachher gut und deutlich?
Kann ich mir nicht so vorstellen. ;)[/OT] |
Re: Vorleseprogramm liest nicht vor :)
Zitat:
Es wird sich immer nur wie eine Abfolge von Buchstaben, nie wie ein Wort anhören. Dazu müssten schon ganze Silben aufgenommen werden. Und selbst da würde es sich immer noch abgehackt anhören. |
Re: Vorleseprogramm liest nicht vor :)
Hmm, wenn ihr z.B. WebSpeech kennt, wisst ihr ja, dass sich die Sätze einigermaßen gut anhören. Es liegt nur daran, wieviele Sonderformen von Buchstaben integriert werden. Ich liege jetzt so bei 32 Unterscheidungen aber e werde sicherlich noch dutzende hinzukommen!
Leiderfunktioniert das Prog immernochnicht, muss wohl mal meinen Inf Lehrer fragen :pale: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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