Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mathe Porblem (https://www.delphipraxis.net/47752-mathe-porblem.html)

Alf 15. Jun 2005 19:19


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:

procedure 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;
dieses (Fade in) funct aber nur in dieser Testfase mit Volumen von 0-1000
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

nailor 15. Jun 2005 19:31

Re: Mathe Porblem
 
[persönliche meinung]ich versteh nicht was ich machen soll[/persönliche meinung]

Alf 15. Jun 2005 19:43

Re: Mathe Porblem
 
Hi

Zitat:


ich versteh nicht was ich machen soll
sorry, aber vielleicht das Problem lesen?

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

Khabarakh 15. Jun 2005 20:01

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;

Alf 15. Jun 2005 20:23

Re: Mathe Porblem
 
hi

der Anfang ist gut, aber wo bleibt der pegel entwert

der ist auch vorgegeben.

oder hab ich das falsch gelesen?

Alf 15. Jun 2005 20:31

Re: Mathe Porblem
 
hi

Sorry hab das gerade ausprobiert funct leider nicht

hoffe auf weitere Hilfe.

Gruss Alf

Khabarakh 15. Jun 2005 20:36

Re: Mathe Porblem
 
Ich hatte eigentlich gedacht, dass du dir den Endwert selbst herleitest :wink: .
Delphi-Quellcode:
if Time < sIn then
  Volume := e / sIn * Time
else
  if Time > (Length - sOut) then
    Volume := e - e / sOut * (Time - (Length - sOut))
  else
    Volume := e;
[edit]Tolle Fehlerbeschreibung :zwinker: . Zeig mal deine Code-Umsetzung.

Jelly 15. Jun 2005 20:51

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:
y = k*x + y0
Dabei ist k die Steigung, die du noch zu ermitteln hast. Du hast aber noch einen Fixpunkt, den du dir vorgibst, nämlich

Code:
y1 = k*x1 + y0
Daraus läßt sich die Steigung k bestimmen
Code:
=> k = (y1-y0) / x1
Und somit wird deine Funktion:

Code:
y = [(y1-y0)/x1] * x + y0
Um dies jetzt in Delphi umzusetzen, lässt du x über den Bereich x0 bis x1 in beliebig kleinen Schritten variieren. Etwa so:

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 ;

Alf 15. Jun 2005 20:52

Re: Mathe Porblem
 
hi


Delphi-Quellcode:
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;

.........
irgendwo ist da noch der haken oder?

hi jelly
Zitat:


Alternativ kannst du das Ganze auch mit einem Timer lösen

das ganze muss über einen Timer Laufen!


gruss Alf

Jelly 15. Jun 2005 21:00

Re: Mathe Porblem
 
Zitat:

Zitat von Alf
Delphi-Quellcode:
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;

.........

Was bitte schön ist denn bei dir "Time"? Bei Benutzung gibt Delhi dir die aktuelle Zeit wieder. Ich glaub nicht dass es das ist was du barauchst!

Alf 15. Jun 2005 21:08

Re: Mathe Porblem
 
hi

ich habe nur deine Formel übernommen!
hab mich schon gewundert was du mit (Time) meinst

Time müsste jetzt ein Zähler werden der aufwärts zählt bis (tin)
und da liegt der haken!!!!!

Gruss Alf

Jelly 15. Jun 2005 21:13

Re: Mathe Porblem
 
Zitat:

Zitat von Alf
ich habe nur deine Formel übernommen!

Wo bitte schön habe ich Time verwendet ?

Nenn deine Variable einfach mal T.

Alf 15. Jun 2005 21:21

Re: Mathe Porblem
 
Hi Jelly

Mit der Time meine ich Khabarakh.

Die Formel von ihm sah so einfach aus, ohne das ich genau geschaut habe.
hab sie einfach übernommen einschliesslich der (Time Func)
Missverständnis. Sorry-

aber bin trotzdem noch nicht weiter.


Gruss Alf

dizzy 16. Jun 2005 00:19

Re: Mathe Porblem
 
Zitat:

Zitat von Alf
aber bin trotzdem noch nicht weiter.

Was zweifelsohne daran liegt, dass du hier eine fix und fertige copy'n'paste-Lösung erwartest :roll:

Dabei hat sich Jelly schon die Mühe gemacht das alles mit Hintergrundinfos zu erklären. Du musst es einfach nur in dein Programm umsetzen - und zwar mit Hirn anstelle von [Crtl]+[c] [Crtl]+[v]...

Luckie 16. Jun 2005 00:48

Re: Mathe Porblem
 
Ich kenne mich in Akkustik nicht so aus, aber ichmeine mal gelernt zu haben, dass zweimal so viele Motrorräder nicht dopplet so laut sind für das menschliche Ohr. Deswegen kann man das auch eventuell nicht linear machen? Ich weiß es nicht, nur so eine Vermutung. :gruebel:

dizzy 16. Jun 2005 01:40

Re: Mathe Porblem
 
Das (menschliche) Ohr hört logarithmisch, da liegst du mit deiner Vermutung schon richtig. Somit müsste man, um den Eindruck einer linearen Änderung zu erzeugen, eine logarithmische Skala zu Grunde legen. Für einen einfachen Fade tut's Liearität aber auch schon.

Für ein schönes nicht zu "abrupt" aufhörendes Fadeout ist log schon schöner, aber alles der Reihe nach ;). Wenn lineare Interpolation (Achtung! Guter Suchberiff! (Jelly hat aber eigentlich schon alles geschrieben)) schon zu viel ist, wird logarithmisch erstmal schwierig. (Eigentlich ist hier dann exponentiell nötig, als Umkehrfunktion des Logarithmus. Die beiden kompensieren sich dann zu einem linearen Höreindruck.)

Jelly 16. Jun 2005 08:46

Re: Mathe Porblem
 
Zitat:

Zitat von dizzy
Eigentlich ist hier dann exponentiell nötig, als Umkehrfunktion des Logarithmus. Die beiden kompensieren sich dann zu einem linearen Höreindruck.

Vorsicht wenn du morgens früh schon solche Schocker bringst. Bleiben wir erst mal beim linearen Zusammenhang. :stupid:

ibp 16. Jun 2005 09:25

Re: Mathe Porblem
 
...um noch eins draufzusetzen: "Lautstärke" hängt noch von der Frequenz ab!

nailor 16. Jun 2005 12:12

Re: Mathe Porblem
 
btw: oftmals wird das logarithmieren und so aber auch von "weiter unten liegenden komponenten" erledigt. ich muss an meinem verstärker zum beispiel nicht logarithmisch drehen. das kann der von alleine. von daher kann ich mir gut vorstellen, dass der MediaPlayer (oder wo auch immer du deine ermittelte Lautstärke verwendest) auch "normale, lineare Angaben" erwartet und das dann eigenständig "exponentiert".

alcaeus 16. Jun 2005 12:29

Re: Mathe Porblem
 
Hallo Alf,

koenntest du bitte den Titel des Themas anpassen? "Mathe Problem" erzeugt ja nicht wirklich den Eindruck, dass es sich um ein Multimedia-Problem handelt. Danke

Greetz
alcaeus

dizzy 16. Jun 2005 16:58

Re: Mathe Porblem
 
Zitat:

Zitat von Jelly
Vorsicht wenn du morgens früh schon solche Schocker bringst. Bleiben wir erst mal beim linearen Zusammenhang. :stupid:

:gruebel: Also ich habe um 2:40 Uhr immer mein Leistungshoch ;)

On Topic:
Das Problem mit der Frequenzabhängigkeit der Lautstärke dürfte hier doch eher weniger bedeutsam sein -> So genau sch****t kein Hund :D. Zumal ja letztlich alle Frequenzen bei null ankommen.
Der Einwand, dass evtl. die Hardware (bzw. Treiber) für die entsprechende Umsetzung sorgen ist auch nicht ohne! Das müsste man dann wohl mal testen... Bei meiner Soundkarte (SB Audigy Player) habe ich allerdings nicht den Eindruck dass dem so wäre.
(Ich meine auch mal gelesen zu haben, dass selbst die Daten in Wave-Files log. interpretiert werden, damit die "leisen" Daten höher aufgelöst dargestellt werden können. Es mag aber auch sein, dass dies ein spezielles Wave-Format oder gar mp3 war :gruebel:)

Alf 16. Jun 2005 21:04

Re: Mathe Porblem
 
Hi Leute

nix für ungut habe aber das problem gelöst.
die Vorlage kamm von Jelly

Delphi-Quellcode:
var
   Vout: Real;
   Tfest: Real;
   Tout: Real;

begin
   Vout:=800;         //ist der Anfangwert von Volumen
   Tfest:=60;         //ist der Anfangszeitwert, in msec Beispiel(59.500 o. 0,500)
   Tout:=Tfest*64.3;  //in in sec (*4.3 scheint irgentwie was mit den TTimer zu tun
                                 //ansonsten gibt es eine Zeitdifferenz)


  ............


end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  pTime : LongInt;
  tt: real;
  Tin: real;
begin
    if CheckBox1.Checked then
       ptime:=MediaPlayer1.Length-MediaPlayer1.Position
     else
       ptime:=MediaPlayer1.Position;

     Label2.Caption:='Time: '+zeit(ptime);

     if (Tout)>0 then
     begin
         tt:=(Vout/(Tfest))*(Tout/64.3);
         tin:=(sqr((tt))/1000);                    //hier wird der Wert in ein "Log" für
         SetMPVolume(MediaPlayer1,Round(tin));     //SetMPVolume, ergibt weiches Fade
         TrackBar1.SelStart:=(Round(1000-tt));     //der Balken wird mitbewegt
         Label7.Caption:=FloatToStr(Round((tt)));
         Tout:=(Tout-1);                           // Toutwert verkleinern
     end
     else
         Timer1.Enabled:=False;

end;
Anbei, sollte ein Forum auch für unwissende sein, so wie "Ich"
sonst breuchte man kein Forum oder?
Programiere ja nur in der Urlaubzeit!!


Dank an alle


Gruss Alf


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.

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