AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi RGB Lampe Sound 2 Light Steuerung
Thema durchsuchen
Ansicht
Themen-Optionen

RGB Lampe Sound 2 Light Steuerung

Ein Thema von Blamaster · begonnen am 16. Mai 2009 · letzter Beitrag vom 16. Mai 2009
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

RGB Lampe Sound 2 Light Steuerung

  Alt 16. Mai 2009, 12:02
Hi,

ich habe diesen thread jetzt erstellt, um da der alte thread:

"Winamp Peaks auslesen" (http://www.delphipraxis.net/internal...t.php?t=157807)

nicht mehr so wirklich passt, bzw. es nun um etwas anderes geht.

Ich lese jetzt mithilfe der Bass.dll die Peaks der Soundkarten Ausgänge aus und habe somit nun die Peakwerte.

Mein Problem ist jetzt allerdings das meine Umsetzungsidee um anhand der Peaks die Farben zu erzeugen nicht so wirklich klappt.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Color_R, Color_G, Color_B, level: integer;
begin
  level := BASS_ChannelGetLevel(RecChannel);
  if CheckBox1.Checked = true then Color_R := (round(HIWORD(level) / 255) + TrackBar1.Position) else Color_R := 0;
  if CheckBox2.Checked = true then Color_G := (round(HIWORD(level) / 255) + TrackBar1.Position) else Color_G := 0;
  if CheckBox3.Checked = true then Color_B := (round(HIWORD(level) / 255) + TrackBar1.Position) else Color_B := 0;

  JvColorTrackBar4.Position := Color_R;
  JvColorTrackBar5.Position := Color_G;
  JvColorTrackBar6.Position := Color_B;
  JvPanel3.Color := RGB(Color_R, Color_G, Color_B);

  SendRGB(Color_R, Color_G, Color_B);
end;
Funktionieren tut das ansich auch. (Timer ist momentan auf 100ms eingestellt). Das Problem ist nur das die Übergänge der Farben viel zu ruppig sind. Somit hat man einfach nur ein nerviges flackern.

Um sich das ggf. besser vorstellen zu können habe ich das Programm mal angehängt. (Im Reiter Sound2Light auf aktivieren klicken)

Hat jemand eine Idee wie man das ganze abändern könnte um schön weiche Farbübergänge/Effekte zur Musik zur erzeugen ?

mfg Blamaster
Angehängte Dateien
Dateityp: rar ergb_100.rar (461,8 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.147 Beiträge
 
Delphi 12 Athens
 
#2

Re: RGB Lampe Sound 2 Light Steuerung

  Alt 16. Mai 2009, 12:23
Du könntes die RGB-Wert des vorherirgen Durchlaufs mit einrechnen und so die starken Sprünge verringern/abschwächen?

z.B. nur 10% (eventuell auch mehr oder weniger) des Sound-Wertes in den aktuellen Anzeige-Wert einfließen lassen
Delphi-Quellcode:
var Color_R_old, Color_G_old, Color_B_old: Integer;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Color_R, Color_G, Color_B, level: Integer;

begin
  ...
  if CheckBox3.Checked = true then Color_B := (round(HIWORD(level) / 255) + TrackBar1.Position) else Color_B := 0;

  Color_R := Color_R * 10 div 100 + Color_R_old * 90 div 100;
  Color_G := Color_G * 10 div 100 + Color_G_old * 90 div 100;
  Color_B := Color_B * 10 div 100 + Color_B_old * 90 div 100;
  Color_R_old := Color_R;
  Color_G_old := Color_G;
  Color_B_old := Color_B;

  JvColorTrackBar4.Position := Color_R;
  ...
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#3

Re: RGB Lampe Sound 2 Light Steuerung

  Alt 16. Mai 2009, 12:39
Hi,

Danke für den Tipp.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Color_R, Color_G, Color_B, Color_R_old, Color_G_old, Color_B_old, level: integer;
begin
  level := BASS_ChannelGetLevel(RecChannel);

  if CheckBox1.Checked = true then Color_R := (round(HIWORD(level) / 255) + TrackBar1.Position) else Color_R := 0;
  if CheckBox2.Checked = true then Color_G := (round(HIWORD(level) / 255) + TrackBar1.Position) else Color_G := 0;
  if CheckBox3.Checked = true then Color_B := (round(HIWORD(level) / 255) + TrackBar1.Position) else Color_B := 0;

  if CheckBox1.Checked = true then Color_R := Color_R * 10 div 100 + Color_R_old * 90 div 100;
  if CheckBox2.Checked = true then Color_G := Color_G * 10 div 100 + Color_G_old * 90 div 100;
  if CheckBox3.Checked = true then Color_B := Color_B * 10 div 100 + Color_B_old * 90 div 100;
  Color_R_old := Color_R;
  Color_G_old := Color_G;
  Color_B_old := Color_B;

  JvColorTrackBar4.Position := Color_R;
  JvColorTrackBar4.Position := Color_G;
  JvColorTrackBar4.Position := Color_B;
  JvPanel3.Color := RGB(Color_R, Color_G, Color_B);

  SendRGB(Color_R, Color_G, Color_B);
end;
so tut sich leider garnichts mehr, oder habe ich da einen Denkfehler drin ?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.147 Beiträge
 
Delphi 12 Athens
 
#4

Re: RGB Lampe Sound 2 Light Steuerung

  Alt 16. Mai 2009, 12:55
Color_G_old und Co. mußt du natürlich extern haben, da diese ja die Funktion, bis zum nächsten Aufruf, überleben sollen
Also am Besten wohl im Private-Abschnitt deiner Form.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    Color_R_old, Color_G_old, Color_B_old: Integer;
  public
    { Public-Deklarationen }
  end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Color_R, Color_G, Color_B, level: integer;
begin
  level := BASS_ChannelGetLevel(RecChannel);

  if CheckBox1.Checked then begin
    Color_R := (round(HIWORD(level) / 255) + TrackBar1.Position);
    Color_R := Color_R * 10 div 100 + Color_R_old * 90 div 100;
    Color_R_old := Color_R;
  end else Color_R := 0;

  if CheckBox1.Checked then begin
    Color_G := (round(HIWORD(level) / 255) + TrackBar1.Position);
    Color_G := Color_G * 10 div 100 + Color_G_old * 90 div 100;
    Color_G_old := Color_G;
  end else Color_G := 0;

  if CheckBox1.Checked then begin
    Color_B := (round(HIWORD(level) / 255) + TrackBar1.Position);
    Color_B := Color_B * 10 div 100 + Color_B_old * 90 div 100;
    Color_B_old := Color_B;
  end else Color_B := 0;

  JvColorTrackBar4.Position := Color_R;
  JvColorTrackBar5.Position := Color_G;
  JvColorTrackBar6.Position := Color_B;
  JvPanel3.Color := RGB(Color_R, Color_G, Color_B);

  SendRGB(Color_R, Color_G, Color_B);
end;
Aber mal 'ne Frage, kann es sein, daß die Berechnungen für R, G und B gleich sind?
Und wenn ja, warum dann 3-Mal berechnen und nicht nur einmal?


PS: prüfe niemals auf TRUE ... gibt aber schon genügend Threads, welche das WARUM erklären
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: RGB Lampe Sound 2 Light Steuerung

  Alt 16. Mai 2009, 14:39
Ganz nett schaut es meist aus, wenn man Lautstärkenänderung nach oben sofort anzeigt, und von da aus das Peakmeter langsam abfallen lässt. Also wenn man sich das als Balken vorstellt ist das ein von selbst ständig langsam kleiner werdender Balken, der von der Musik immer wieder mal hoch gedrückt wird. Das dürfte bei Helligkeiten ähnlich gut ausschauen.


Delphi-Quellcode:
TForm1 = class
..
private
  Color_R, Color_G, Color_B: integer;
end;

.
.
.


procedure TForm1.Timer1Timer(Sender: TObject);
var
  r, g, b, level: Integer;
begin
  level := BASS_ChannelGetLevel(RecChannel);
  if CheckBox1.Checked then r := (round(HIWORD(level) / 255) + TrackBar1.Position) else r := 0;
  if CheckBox2.Checked then g := (round(HIWORD(level) / 255) + TrackBar1.Position) else g := 0;
  if CheckBox3.Checked then b := (round(HIWORD(level) / 255) + TrackBar1.Position) else b := 0;

  if r>Color_R then Color_R := r else
    if Color_R>0 then dec(Color_R);
  if g>Color_G then Color_G := g else
    if Color_G>0 then dec(Color_G);
  if b>Color_B then Color_B := b else
    if Color_B>0 then dec(Color_B);

  JvColorTrackBar4.Position := Color_R;
  JvColorTrackBar5.Position := Color_G;
  JvColorTrackBar6.Position := Color_B;
  JvPanel3.Color := RGB(Color_R, Color_G, Color_B);

  SendRGB(Color_R, Color_G, Color_B);
end;
Sowas könnte funktionieren (im Browser getippt, keine Garantie )
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#6

Re: RGB Lampe Sound 2 Light Steuerung

  Alt 16. Mai 2009, 19:39
Hi,

Danke für die guten Lösungsansätze.

Ich habe aus den 2 Vorschlägen jetzt mal einen gemacht.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Color_R, Color_G, Color_B, level: integer;
begin

  level := BASS_ChannelGetLevel(RecChannel);

  if CheckBox1.Checked then begin
    Color_R := round((LOWORD(level) / (32768 / 255)) - TrackBar1.Position);
    Color_R := Color_R * 5 div 100 + Color_R_old * 95 div 100;
  end else Color_R := 0;

  if CheckBox2.Checked then begin
    Color_G := round((LOWORD(level) / (32768 / 255)) - TrackBar1.Position);
    Color_G := Color_G * 5 div 100 + Color_G_old * 95 div 100;
  end else Color_G := 0;

  if CheckBox3.Checked then begin
    Color_B := round((HIWORD(level) / (32768 / 255)) - TrackBar1.Position);
    Color_B := Color_B * 5 div 100 + Color_B_old * 95 div 100;
  end else Color_B := 0;

  if Color_R > Color_R_old then Color_R_old := Color_R else
    if Color_R_old > 0 then Color_R_old := (Color_R_old - 20);
  if Color_G > Color_G_old then Color_G_old := Color_G else
    if Color_G_old > 0 then Color_G_old := (Color_G_old - 20);
  if Color_B > Color_B_old then Color_B_old := Color_B else
    if Color_B_old > 0 then Color_B_old := (Color_B_old - 20);

  JvColorTrackBar4.Position := Color_R_old;
  JvColorTrackBar5.Position := Color_G_old;
  JvColorTrackBar6.Position := Color_B_old;
  JvPanel3.Color := RGB(Color_R_old, Color_G_old, Color_B_old);

  SendRGB(Color_R_old, Color_G_old, Color_B_old);

end;
Funktioniert soweit auch schonmal garnicht so schlecht, denke aber mal noch verbesserungsfähig.

Falls jemand noch einen Vorschlag zur verbesserung hat immer her damit

Ich habe damit sich auch besser probieren lässt im anhang nochmal das Programm inkl. Source.

mfg Blamaster
Angehängte Dateien
Dateityp: rar ergb_130.rar (544,6 KB, 39x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 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