Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Peak herausfinden (https://www.delphipraxis.net/76833-peak-herausfinden.html)

Kranich 10. Sep 2006 20:27


Peak herausfinden
 
Hallo Leute,

ich habe inzwischen schon echt lange gesucht und ich fand leider nichts passendes.

Was ich vorhabe:
Ich habe 2 Progressbars und möchte die in Echtzeit dem Peak für den jeweiligen Channel anpassen.

Wichtig ist, dass ich nichts über die Anwendung wiedergebe, sondern wirklich nur das letztendliche Signal, welches aus der Soundkarte austritt ermitteln möchte und grafisch darstellen möchte - Ihr kennt das, jedes kleine Audiotool hat diese Balken die von grün (unten) nach rot (oben) verlaufen und je nach Peak mehr oder weniger hoch ausschlagen.

Bei meiner Suche stieß ich über die bass.dll, jedoch habe ich keine Ahnung, wie ich diese verwenden soll, wenn das Audiosignal nicht aus der Anwendung selber kommt.

Für Codebeispiele, als auch nützliche Links wäre ich dankbar.

Vielen Dank,
Kranich

omata 10. Sep 2006 20:35

Re: Peak herausfinden
 
Hallo Kranich,

schau dir doch mal mein Beispiel an.
Der Recordbereich dürfte das sein, was du suchst.

Gruss
Thorsten

Kranich 10. Sep 2006 20:45

Re: Peak herausfinden
 
Hey,

magst du mir vllt. auch die passende Stelle geben?

Ich kann mich unheimlich schlecht in fremdem Quelltext reinlesen :oops:

Liebe Grüße,
Kranich

omata 10. Sep 2006 20:49

Re: Peak herausfinden
 
Hast du das Beispiel gestartet? Ist es das was du brauchst?

Der Recording-Code ist in der BassRecordingU.pas zufinden.

Gruss
Thorsten

Kranich 10. Sep 2006 21:01

Re: Peak herausfinden
 
Hey,

vom Prinzip ist es das - genau.
Aber ich finde die wichtigen Stellen nicht, so lange bin ich noch nicht bei Delphi *rotwerd*

Mein Projekt sieht so aus:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, QProgBar, ExtCtrls, bass;

type
    TForm1 = class(TForm)
    QProgressBar1: TQProgressBar;
    QProgressBar2: TQProgressBar;
    QProgressBar3: TQProgressBar;
    QProgressBar4: TQProgressBar;
    Timer1: TTimer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


end.
Qprogressbar1.position und Qprogressbar2.position sollen dem linken Peak annehmen, 3 und 4 den rechten.

Wie ist das genau machbar?

Vielen Dank , ich hoffe, dass ihr nicht so vorm Rechner sitzt, wenn ihr das lest: :wall:

Danke,

Kranich

omata 10. Sep 2006 21:46

Re: Peak herausfinden
 
Mein Beispiel oben enthält nicht einfach die Lösung für dein konkretes Problem. Allerdings wenn man alles miteinander kombiniert, dann geht das was du haben möchtest.

Und jetzt mal etwas konkreter...

Ein minimales Beispiel...
Delphi-Quellcode:
uses ... Bass ...;

const
  MaxPeak = 32768;

type
  TFMain = class(TForm)
    PbLeft: TProgressBar;
    PbRight: TProgressBar;
  :
implementation
:
var _RecordChannel: HRECORD;

procedure TFMain.FormCreate(Sender: TObject);
begin
  if not BASS_RecordInit(0) then
    raise Exception.Create('Aufnahme kann nicht initialisiert werden');

  BASS_RecordSetInput(1, BASS_INPUT_ON);
end;

procedure TFMain.FormDestroy(Sender: TObject);
begin
  BASS_RecordFree;
end;

function RecordingCallback(Handle: HRECORD; buffer: Pointer; length,
                           user: DWord): boolean; stdcall;
var Left, Right:Cardinal;
    Level:DWORD;
begin
  Level:=BASS_ChannelGetLevel(_RecordChannel);
  Left:=trunc((100 / MaxPeak) * LOWORD(Level));
  Right:=trunc((100 / MaxPeak) * HIWORD(Level));
  FMain.PbLeft.Position:=Left;
  FMain.PbRight.Position:=Right;
  Result:=true;
end;

procedure TFMain.Start;
begin
  _RecordChannel := BASS_RecordStart(44100, 1, 0, @RecordingCallback, 0);
  if _RecordChannel = 0 then
    raise Exception.Create('Aufnahme kann nicht gestartet werden');
end;

procedure TFMain.Stop;
begin
  BASS_ChannelStop(_RecordChannel);
end;
Gruss
Thorsten

Kranich 10. Sep 2006 21:57

Re: Peak herausfinden
 
Hey, vielen Dank - ich werde mich da morgen mal durchkämpfen, liebe Grüße:
Kranich


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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