![]() |
Mathe Porblem
Hi Leute
möchte folgende Aufgabe lösen und komm nicht ans Ziel. ein automatisches Fadin oder Fadout. in Abhängigkeit von der vorgegeben Zeit ( Tin o. Tout ) und dem gesetzten Pegel ( din o. dout ) meine Versuche scheitern an der Mathelogik komm einfach nicht drauf. bis zu diesem Versuch bin ich nicht weiter gekommen.
Delphi-Quellcode:
dieses (Fade in) funct aber nur in dieser Testfase mit Volumen von 0-1000procedure TForm1.Timer1Timer(Sender: TObject); var s: TTime; pTime: LongInt; c: Real; tin:real; begin tin:=10; // Testwerte if CheckBox1.Checked then ptime:=MediaPlayer1.Length-MediaPlayer1.Position else ptime:=MediaPlayer1.Position; if fin >=1000 then exit else begin fin:=(fin+15.6/tin); //15.6 entspricht etwa 1sec c:=sqr(fin)/1000; //dies ergibt etwa ein log wert für Volumen //der untere Bereich bekommt dadurch ein weicheres Fade in SetMPVolume(MediaPlayer1,trunc(c)); trackbar1.selstart:=(100-trunc(c) div 10); //der Balken wird mit bewegt label5.caption:=inttostr(trackbar1.selstart); label7.Caption:=inttostr((trunc(c) div 10)); Label2.Caption:='Time :'+zeit(ptime); end; end; die Zeiteinstellung ( Tin ) funct auch, wie auch immer? in mein Orginalproject aber funct nichts mehr. ich hofe ihr könnt mir da Helfen. Gruss Alf |
Re: Mathe Porblem
[persönliche meinung]ich versteh nicht was ich machen soll[/persönliche meinung]
|
Re: Mathe Porblem
Hi
Zitat:
für diese ganze Umsetzung gibt es sicher die Möglichkeit eine Formel zu erstellen? nur komm ich nicht darauf. z.B. Tin ist die Fadein Zeit (z.B 0.5sec oder 10sec usw.) Din ist der Volumenentwert (z.B von 0- (800= Entwert) und nun starte ich den Player und die Musik wird weich eingefadet. Aber wie das ganze umsetzen? Gruss Alf |
Re: Mathe Porblem
Ich muss sagen, dass ich es auch nicht ganz verstanden habe.
Also, du willst ein FadeIn/Out beim Mediaplayer haben? Z.B.: Der Startwert der Lautsärke ist 0, diese soll in s Sekunden auf einen Endwert e ansteigen (Linear?)? Das wäre dann (hoffentlich :wink:):
Delphi-Quellcode:
if Time < s then
Volume := e / s * Time else Volume := e; |
Re: Mathe Porblem
hi
der Anfang ist gut, aber wo bleibt der pegel entwert der ist auch vorgegeben. oder hab ich das falsch gelesen? |
Re: Mathe Porblem
hi
Sorry hab das gerade ausprobiert funct leider nicht hoffe auf weitere Hilfe. Gruss Alf |
Re: Mathe Porblem
Ich hatte eigentlich gedacht, dass du dir den Endwert selbst herleitest :wink: .
Delphi-Quellcode:
[edit]Tolle Fehlerbeschreibung :zwinker: . Zeig mal deine Code-Umsetzung.
if Time < sIn then
Volume := e / sIn * Time else if Time > (Length - sOut) then Volume := e - e / sOut * (Time - (Length - sOut)) else Volume := e; |
Re: Mathe Porblem
Du willst, jetzt rein mathematisch gesehen, zwischen 2 y-Werten (y0=Anfangswert zu y1=Endwert) eine Funktion linear laufen lassen, und zwar über den Bereich x0 bis x1 (x entspricht in deinem Fall der Zeit, also x0=t0=0 bis x1=t1=5 sec.)
Deine Gleichung lautet, da du ja einen linearen Zusammenhang vorgibst,
Code:
Dabei ist k die Steigung, die du noch zu ermitteln hast. Du hast aber noch einen Fixpunkt, den du dir vorgibst, nämlich
y = k*x + y0
Code:
Daraus läßt sich die Steigung k bestimmen
y1 = k*x1 + y0
Code:
Und somit wird deine Funktion:
=> k = (y1-y0) / x1
Code:
Um dies jetzt in Delphi umzusetzen, lässt du x über den Bereich x0 bis x1 in beliebig kleinen Schritten variieren. Etwa so:
y = [(y1-y0)/x1] * x + y0
Delphi-Quellcode:
begin
x := x0 ; k := (y1-y0) / x1 ; Schrittweitex := 0.1 ; while x <= x1 do begin y := k*x + y0 ; // SetzeLautstärke // eventuell noch eine Pause einbauen, da die Schleife sonst zu schnell durchläuft. // Alternativ kannst du das Ganze auch mit einem Timer lösen x := x + Schrittweitex end ; end ; |
Re: Mathe Porblem
hi
Delphi-Quellcode:
irgendwo ist da noch der haken oder?
procedure TForm1.Timer1Timer(Sender: TObject);
var s: TTime; pTime,e : LongInt; c: Real; tin:real; begin e:=800; //Volumen endwert tin:=10; // Testwerte tin if CheckBox1.Checked then ptime:=MediaPlayer1.Length-MediaPlayer1.Position else ptime:=MediaPlayer1.Position; if Time < tin then label2.caption:=floattostr(e/tin*Time) //ergebnis 72,xxxxxxxxxxxxx zahlen //nix von 0-800 else timer1.Enabled:=false; ......... hi jelly Zitat:
das ganze muss über einen Timer Laufen! gruss Alf |
Re: Mathe Porblem
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 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 by Thomas Breitkreuz