AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bass.dll - Visualisierung
Thema durchsuchen
Ansicht
Themen-Optionen

Bass.dll - Visualisierung

Ein Thema von smepal · begonnen am 7. Aug 2006 · letzter Beitrag vom 13. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von smepal
smepal

Registriert seit: 25. Okt 2005
Ort: Bechen
58 Beiträge
 
Delphi 2005 Personal
 
#1

Bass.dll - Visualisierung

  Alt 7. Aug 2006, 17:06
also ich habe schon die suche hier im Forum zu rate gezogen komme aber nicht weiter!
Ich möchte einfach eine anzeige haben wie man sie vom Nero Waveeditor her kennt!
Dazu muss ich bass_channelgetdata nutzen oder?

Nur wie soll ich den damit erzeugten Array auswerten?
Martin Krämer
Be water my friend!!!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Bass.dll - Visualisierung

  Alt 7. Aug 2006, 17:18
Also beim Waveeditor die große Anzeige ist afaik die Lautstärke, das kleine unten ist das Spektrum. Ersteres sollte unkompliziert sein (Bass_GetVolume oder so ähnlich), bei zweiterem solltest du mit FFTs arbeiten, glaube ich.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Bass.dll - Visualisierung

  Alt 7. Aug 2006, 17:31
Forensuche benutzt?

http://www.delphipraxis.net/internal...highlight=bass
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: Bass.dll - Visualisierung

  Alt 7. Aug 2006, 17:34
Bei einer der Bass Demo passiert genau das ...


Edit Demo heist "custloop"
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von smepal
smepal

Registriert seit: 25. Okt 2005
Ort: Bechen
58 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Bass.dll - Visualisierung

  Alt 8. Aug 2006, 10:42
Die Demo custloop habe ich mir schon mal angeschaut!
Allerdings werde ich aus dem Code nicht schlau und kann die entsprechende Stelle nicht finden!
Vielleicht könnt ihr mir da weiterhelfen?
Martin Krämer
Be water my friend!!!
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#6

Re: Bass.dll - Visualisierung

  Alt 8. Aug 2006, 10:49
Delphi-Quellcode:
//draw peaks
  ht := ClientHeight div 2;
  for i:=0 to length(wavebufL)-1 do
  begin

// i = index (zeit index von anfang zum ende der wave datei)
// ht = 1 Punkt eine vertikalen line
// ht-trunc((wavebufL[i]/32768)*ht) = 2 Punkt eine vertikalen line
    Buffer.Canvas.MoveTo(i,ht);
    Buffer.Canvas.Pen.Color := clLime;
    Buffer.Canvas.LineTo(i,ht-trunc((wavebufL[i]/32768)*ht));

    Buffer.Canvas.Pen.Color := clLime;
    Buffer.Canvas.MoveTo(i,ht+2);
    Buffer.Canvas.LineTo(i,ht+2+trunc((wavebufR[i]/32768)*ht));

  end;
Das sollte eigentlich der bedeut same abschnitt sein...
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von smepal
smepal

Registriert seit: 25. Okt 2005
Ort: Bechen
58 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Bass.dll - Visualisierung

  Alt 8. Aug 2006, 10:56
was muss ich denn wavebufl zuordnen?
Martin Krämer
Be water my friend!!!
  Mit Zitat antworten Zitat
Benutzerbild von smepal
smepal

Registriert seit: 25. Okt 2005
Ort: Bechen
58 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Bass.dll - Visualisierung

  Alt 8. Aug 2006, 15:34
ich hab mir jetzt vereinzelt code schnipsel aus dem Beispiel kopiert vor allem aber die Play procedur und die drawspectrum und draw timeline proceduren!

Und siehe da es funktioniert!
Ich weiß zwar nicht wie aber es funzt!
Martin Krämer
Be water my friend!!!
  Mit Zitat antworten Zitat
Benutzerbild von smepal
smepal

Registriert seit: 25. Okt 2005
Ort: Bechen
58 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Bass.dll - Visualisierung

  Alt 10. Aug 2006, 16:00
Hmm versuche gerade mit den Demo units von bass.dll zu arbeiten:

Es gibt da die Unit spectrum_vis.pas
Delphi-Quellcode:
unit spectrum_vis;
{ Spectrum Visualyzation by Alessandro Cappellozza
  version 0.8 05/2002
  [url]http://digilander.iol.it/Kappe/audioobject[/url]
}


interface
  uses Windows, Dialogs, Graphics, SysUtils, CommonTypes, Classes;

 type TSpectrum = Class(TObject)
    private
      VisBuff : TBitmap;
      BackBmp : TBitmap;

      BkgColor : TColor;
      SpecHeight : Integer;
      PenColor : TColor;
      PeakColor: TColor;
      DrawType : Integer;
      DrawRes : Integer;
      FrmClear : Boolean;
      UseBkg : Boolean;
      PeakFall : Integer;
      LineFall : Integer;
      ColWidth : Integer;
      ShowPeak : Boolean;

       FFTPeacks : array [0..128] of Integer;
       FFTFallOff : array [0..128] of Integer;

    public
     Constructor Create (Width, Height : Integer);
     procedure Draw(HWND : THandle; FFTData : TFFTData; X, Y : Integer);
     procedure SetBackGround (Active : Boolean; BkgCanvas : TGraphic);

     property BackColor : TColor read BkgColor write BkgColor;
     property Height : Integer read SpecHeight write SpecHeight;
     property Width : Integer read ColWidth write ColWidth;
     property Pen : TColor read PenColor write PenColor;
     property Peak : TColor read PeakColor write PeakColor;
     property Mode : Integer read DrawType write DrawType;
     property Res : Integer read DrawRes write DrawRes;
     property FrameClear : Boolean read FrmClear write FrmClear;
     property PeakFallOff: Integer read PeakFall write PeakFall;
     property LineFallOff: Integer read LineFall write LineFall;
     property DrawPeak : Boolean read ShowPeak write ShowPeak;
  end;

 var Spectrum : TSpectrum;

implementation

     Constructor TSpectrum.Create(Width, Height : Integer);
      begin
        VisBuff := TBitmap.Create;
        BackBmp := TBitmap.Create;

          VisBuff.Width := Width;
          VisBuff.Height := Height;
          BackBmp.Width := Width;
          BackBmp.Height := Height;

          BkgColor := clBlack;
          SpecHeight := 100;
          PenColor := clWhite;
          PeakColor := clYellow;
          DrawType := 0;
          DrawRes := 1;
          FrmClear := True;
          UseBkg := False;
          PeakFall := 1;
          LineFall := 3;
          ColWidth := 5;
          ShowPeak := True;
      end;

     procedure TSpectrum.SetBackGround (Active : Boolean; BkgCanvas : TGraphic);
      begin
        UseBkg := Active;
        BackBmp.Canvas.Draw(0, 0, BkgCanvas);
      end;

     procedure TSpectrum.Draw(HWND : THandle; FFTData : TFFTData; X, Y : Integer);
        var i, YPos : LongInt; YVal : Single;
       begin

       if FrmClear then begin
          VisBuff.Canvas.Pen.Color := BkgColor;
          VisBuff.Canvas.Brush.Color := BkgColor;
          VisBuff.Canvas.Rectangle(0, 0, VisBuff.Width, VisBuff.Height);
           if UseBkg then VisBuff.Canvas.CopyRect(Rect(0, 0, BackBmp.Width, BackBmp.Height), BackBmp.Canvas, Rect(0, 0, BackBmp.Width, BackBmp.Height));
       end;

        VisBuff.Canvas.Pen.Color := PenColor;
         for i := 0 to 128 do begin
           YVal := Abs(FFTData[(i * DrawRes) + 5]);
           YPos := Trunc((YVal) * 500);
           if YPos > Height then YPos := SpecHeight;

           if YPos >= FFTPeacks[i] then FFTPeacks[i] := YPos
              else FFTPeacks[i] := FFTPeacks[i] - PeakFall;

           if YPos >= FFTFallOff[i] then FFTFallOff[i] := YPos
              else FFTFallOff[i] := FFTFallOff[i] - LineFall;

              if (VisBuff.Height - FFTPeacks[i]) > VisBuff.Height then FFTPeacks[i] := 0;
              if (VisBuff.Height - FFTFallOff[i]) > VisBuff.Height then FFTFallOff[i] := 0;

              case DrawType of
                0 : begin
                       VisBuff.Canvas.MoveTo(X + i, Y + VisBuff.Height);
                       VisBuff.Canvas.LineTo(X + i, Y + VisBuff.Height - FFTFallOff[i]);
                       if ShowPeak then VisBuff.Canvas.Pixels[X + i, Y + VisBuff.Height - FFTPeacks[i]] := Pen;
                    end;

                1 : begin
                     if ShowPeak then VisBuff.Canvas.Pen.Color := PeakColor;
                     if ShowPeak then VisBuff.Canvas.MoveTo(X + i * (ColWidth + 1), Y + VisBuff.Height - FFTPeacks[i]);
                     if ShowPeak then VisBuff.Canvas.LineTo(X + i * (ColWidth + 1) + ColWidth, Y + VisBuff.Height - FFTPeacks[i]);

                     VisBuff.Canvas.Pen.Color := PenColor;
                     VisBuff.Canvas.Brush.Color := PenColor;
                     VisBuff.Canvas.Rectangle(X + i * (ColWidth + 1), Y + VisBuff.Height - FFTFallOff[i], X + i * (ColWidth + 1) + ColWidth, Y + VisBuff.Height);
                    end;
              end;
         end;

          BitBlt(HWND, 0, 0, VisBuff.Width, VisBuff.Height, VisBuff.Canvas.Handle, 0, 0, srccopy)
       end;
end.
In meinem Programm verfahre ich so damit:

Delphi-Quellcode:
procedure Tvis.FormCreate(Sender: TObject);
begin
BASS_Init(-1, 44100, 0, Application.Handle, nil);

Spectrum := TSpectrum.Create(vis.Width, vis.Height);
end;
Und rufe sie so auf:

(so wirds auch in der Demo gemacht)
Delphi-Quellcode:
procedure Tvis.TimerRenderTimer(Sender: TObject);
 var FFTFata : TFFTData; WaveData : TWaveData;
begin

BASS_ChannelGetData(p, @FFTFata, BASS_DATA_FFT1024);
Spectrum.Draw (pb.Canvas.Handle, FFTFata, 50 - 40, 50 - 60);

end;
Aus einem mir völlig unerklärlichen Grund bekomme ich folgende Fehlermeldung:
Zitat:
[Fehler] visu.pas(224): E2010 Inkompatible Typen: 'spectrum_vis.TFFTData' und 'visu.TFFTData'

Kann mir irgendwer Weiterhelfen?
Spectrum.Draw (pb.Canvas.Handle, FFTFata, 50 - 40, 50 - 60);
Martin Krämer
Be water my friend!!!
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Bass.dll - Visualisierung

  Alt 10. Aug 2006, 16:06
Hast du mal mein Beispiel und dort die Plugins angesehen?

Gruss
Thorsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:50 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