![]() |
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 |
Re: Peak herausfinden
Hallo Kranich,
schau dir doch mal mein ![]() Der Recordbereich dürfte das sein, was du suchst. Gruss Thorsten |
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 |
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 |
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:
Qprogressbar1.position und Qprogressbar2.position sollen dem linken Peak annehmen, 3 und 4 den rechten.
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. Wie ist das genau machbar? Vielen Dank , ich hoffe, dass ihr nicht so vorm Rechner sitzt, wenn ihr das lest: :wall: Danke, Kranich |
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:
Gruss
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; Thorsten |
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