![]() |
RGB Lampe Sound 2 Light Steuerung
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich habe diesen thread jetzt erstellt, um da der alte thread: "Winamp Peaks auslesen" ( ![]() 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:
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.
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; 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 |
Re: RGB Lampe Sound 2 Light Steuerung
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; |
Re: RGB Lampe Sound 2 Light Steuerung
Hi,
Danke für den Tipp.
Delphi-Quellcode:
so tut sich leider garnichts mehr, oder habe ich da einen Denkfehler drin ?
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; |
Re: RGB Lampe Sound 2 Light Steuerung
Color_G_old und Co. mußt du natürlich extern haben, da diese ja die Funktion, bis zum nächsten Aufruf, überleben sollen :zwinker:
Also am Besten wohl im Private-Abschnitt deiner Form.
Delphi-Quellcode:
Aber mal 'ne Frage, kann es sein, daß die Berechnungen für R, G und B gleich sind?
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; 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 |
Re: RGB Lampe Sound 2 Light Steuerung
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:
Sowas könnte funktionieren (im Browser getippt, keine Garantie ;))
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; |
Re: RGB Lampe Sound 2 Light Steuerung
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Danke für die guten Lösungsansätze. Ich habe aus den 2 Vorschlägen jetzt mal einen gemacht.
Delphi-Quellcode:
Funktioniert soweit auch schonmal garnicht so schlecht, denke aber mal noch verbesserungsfähig.
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; 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 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