Einzelnen Beitrag anzeigen

padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: equalizer mit der bass.dll

  Alt 20. Sep 2005, 09:43
Oszilloskop hätte ich gern, Spectrum klappt ja bereits einwandfrei mit FFTData.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenDialog1.Filter := BassDLLPlayerFileFilter;

  bkBitmap := TBitmap.Create;
  bkBitmap.Width := 30;
  bkBitmap.Height := 30;
  bkBitmap.Canvas.Brush.Color := clBlack;
  bkBitmap.Canvas.FillRect(Rect(0, 0, 30, 30));
  BitmapRect := Rect(0, 0, bkBitmap.Width, bkBitmap.Height);

end;



procedure TForm1.Button1Click(Sender: TObject);
begin // Open File & Play
  if Opendialog1.Execute then
  begin
    if BassdllPlayer1.LoadFromFile(Opendialog1.FileName) then
    begin
      BassdllPlayer1.Play;
  end;
end;


(* um nur eine "Probe zu holen" *)
procedure TForm1.Button2Click(Sender: TObject);
var Data1: Twavedata;
    i: integer;
begin
    data1 := BassdllPlayer1.GetwaveData;

      Paintbox1.Canvas.CopyRect(Paintbox1.ClientRect, bkBitmap.Canvas, BitmapRect);

      Paintbox1.Canvas.MoveTo(0, Paintbox1.height div 2);
      for i := 0 to 2048 do begin
        Paintbox1.Canvas.pen.color := RGB(255 - i, i, 0);
        if i mod 2 = 0 then
          Paintbox1.Canvas.LineTo(i,Paintbox1.height div 2 - Data1[i] div trackbar3.position);

// test für rechten Kanal
// Paintbox1.Canvas.pen.color := clyellow;
// if i mod 2 = 1 then
// Paintbox1.Canvas.LineTo(i,Paintbox1.height div 2 - Data1[i] div trackbar3.position);
      end;

end;
Das war´s, erst mal auf´s wesentliche runtergebrochen.


hier das für´s Spectrum, was wiegesagt aber schon funzt...
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject); // Draw Vis.
var
  data: TFFTData;
  i: integer;
  tmpBitmap: TBitmap;
begin
    data := BassdllPlayer1.GetfftData;

    for i := 0 to 255 do
      Data[i] := Data[i] * ln(i + 1) * Trackbar1.Position * Paintbox1.ClientHeight;

    Paintbox1.Canvas.CopyRect(Paintbox1.ClientRect, bkBitmap.Canvas, BitmapRect);

    Paintbox1.Canvas.MoveTo(0, Paintbox1.height div 2);
    for i := 0 to 255 do begin
      Paintbox1.Canvas.pen.color := RGB(255 - i, i, 0);
      Paintbox1.Canvas.LineTo(i, Paintbox1.height div 2 - round(Data[i]));
    end;
end;
PS: Also um´s auf den Punkt zu bringen:
Die Frequenz des Lieder wird richtig dargestellt, nur die Spannungshöhe/ der Pegel ist irgendwie falsch,
da es wiegesagt mehr an eine Pulsweitenmodulation ausschaut, aber irgendwie gar nicht wie Musik eben.
  Mit Zitat antworten Zitat