Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Amplitude und Frequenz durch BASS_ChannelGetData (https://www.delphipraxis.net/108604-amplitude-und-frequenz-durch-bass_channelgetdata.html)

Killerregenwurm 16. Feb 2008 11:07


Amplitude und Frequenz durch BASS_ChannelGetData
 
Hallo,

Ich versuche seit einer Woche eine Möglichkeit zu finden, bei der ich eine Amplitude und Frequenz des momentanen Audioausgang Channels zu bekommen.

Nach erstenversuchen direkt den iTunes Com-Port zu benutzen musste ich festellen, dass dies dort nicht geht.

Nach etwas weiterem suchen, bin ich auf die Bass.dll gestoßen.

Durch Google und diversen Foren bin ich dann auf 'BASS_ChannelGetData' gekommen.

Da ich Delphi in der Schule seit nem Monat ca. beigebracht bekomme und dies recht langwierig sich zieht, habe ich noch nicht genpügend Kenntnisse bei Feinheiten in Delphi :cry:

Ich habe durhc Suchen in Foren rausbekommen, dass die Funktion 'BASS_ChannelGetData' genau meine Bedürfnisse dekcen sollte. Doch leider habe ich nirgends gefunden, wie genau ich diese in meine procedure einzubinden habe, und wie ich die Daten dann vernünftig auslesen kann.
Ich glaube es liegt an meinen Mangelnden Kenntnissen von Arrays und Pointern, die diese Funktion anscheinend braucht.

Deswegen hier meine Frage:

wie habe ich BASS_ChannelGetData richtig einzubinden, damit ich auslesen kann, wie hoch der aktuele Pegel einer bestimmt Frequenz ist :?:

Meine bisherigen Versuche sind leider alle kläglich gescheiter.
Delphi-Quellcode:
data := BASS_ChannelGetData(ch,@fft,BASS_DATA_FFT1024);
Dies ist glaue ich mehr falsch als richtig, deswegen würde ich euch bitten, mir einmal zu erklären wie das funktioniert und wie ich das einzubinden habe etc.

Falls noch fragen sind beantworte ich diese gerne.

Grüße
Killerregenwurm

Killerregenwurm 20. Feb 2008 12:59

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
*Push*

Kann mir da echt keiner weiterhelfen?

Killerregenwurm 23. Feb 2008 13:31

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
nahc langem tüfteln und rumprobieren bin ich endlich ein Stpck weiter:
Delphi-Quellcode:
procedure TmfMovinhead.btItunesClick(Sender: TObject);
var
  ch:HMusic;
  fft : array[1..256] of single;
  n,i : integer;
  begin
  self.laItunetrackOut.caption := getCurrentTitle(iTunesApp);
  BASS_ChannelGetData(ch,@fft,BASS_DATA_FFT512);

  PaintBox1.Canvas.FillRect(rect(0, 0, paintbox1.width, paintbox1.height));
  PaintBox1.Canvas.Pen.Color := clBlack;
  for i := 1 to 256 do begin
    n := round(fft[i]);
    PaintBox1.Canvas.PenPos := point(i, 100);
    PaintBox1.Canvas.LineTo(i, 100 - n);
    self.Label3.Caption := self.Label3.Caption+ IntToStr(i) + ':' + intToStr(n) + ' ,';
  end;
end;
dies habe ich auf grundlagen von dieser Quelle erreicht.

der fft wird richtig belegt, nur kommt nach dem runden 0 als n raus und und nach dem zweiten Schleifendurchgang bricht das Programm ab und gibt an 'ungültige Gleitkommaoperation'

Kann es sein, dass ich den Channel falsch belegt habe? ich möchte den normalen ausgang überprüfen, auf dem Musik und so die Soundkarte verlässt.

Ich freue mich sehr über jede Antwort die mir hilft.

Grüße

omata 23. Feb 2008 22:31

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Beispiel...

Vielleicht hilft dir das hier auch weiter.

Gruss
Thorsten

Killerregenwurm 23. Feb 2008 22:42

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
vielen dank.

Das ist mal nen Beispiel das direkt funktioniert.

Allerdings bräuchte ich dies für den Output Kanal, nicht wie dort für Input (also mikro).

Was muss ich dennd ann ändern?

Grüße

Killerregenwurm

omata 23. Feb 2008 22:52

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Du kannst den Eingang selber wählen.
Ob du an den Masterausgang kommst, liegt an deiner Soundkarte und deinem Treiber.
Über den "Stereo Mix" oder ähnliche Bezeichnung kannst du an deine Masterspur kommen.

Siehe dazu auch hier.

Gruss
Thorsten

Killerregenwurm 24. Feb 2008 09:38

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
der Link ist zwar ganz nett, aber so wirklich weitergebracht hat er mich nicht.

Ich suche wirklich nur noch die möglichkeit den Soundmix in

Delphi-Quellcode:
 BASS_ChannelGetData(channel,@fft,BASS_DATA_FFT512);

in den Handle Channelden Soundmix reinzubekommen....

Habe jetzt versucht durch die BassTest oben den richtigen device und kanalauszuwählen aber kein erfolg :(

Das geht doch bestimmt, aber irgendwie stehen ich hier gerade voll auf dem Schlauch....

omata 24. Feb 2008 15:36

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Schade das du das nicht verstanden hast.

Der Link sollte nur die Problematik verdeutlichen. Das was du willst muss deine Soundkarte unterstützen. Dies geht über den Aufnahmeeingang "Stereo Mix", dieser wird aber bei neueren Soundkarten von den Herstellern unterdrückt. Falls du also so einen Eingang nicht hast, dann hast du leider Pech gehabt. Da kannst du dann auch nichts machen.

Ich weiss nicht was daran jetzt so unverständlich ist. Endweder hat deine Soundkarte eine Möglichkeit den Gesamtausgang aufnehmen zu können und über diesen Aufnahmeeingang an alles was du in deinen Lautsprechern hörst ranzukommen, dann kannst du das über mein Programm auswählen oder eben nicht. Wenn nicht, dann geht das nicht.
Dies ist kein Softwareproblem sondern ein Hardwareproblem.
Sorry, aber wie oft soll ich es noch wiederholen?

Gruss
Thorsten

Killerregenwurm 24. Feb 2008 16:20

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
den Aufnahme Kanal StereoMix habe ich.

Doch auch wenn ich diesen, über die Windows Soundcontrol auswähle aus Aufnahme Kanal ändert dies nichts im Programm BassTest.

Dies hatte ich schon vorher ausprobiert.

Fakt ist, da ich StereoMix habe, dass ich als channel in Bass_channelGetData diesen Stereomix angeben kann. Doch dies bekomme ich nicht gebacken...

Muss ich also, wenn ich StereoMix als Aufnahme Kanal ausgweählt habe, den Channel den typ HRecord zuweisen? und muss dem Channel dann noch der Kanal oder ähnliches genannt werden?

omata 24. Feb 2008 16:33

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Ok, du hast also so einen Aufnahmeeingang. Das ist doch schonmal eine Aussage.

Wieso wählst du das im Windows Controlcenter aus? In meinem Beispiel hast du doch zwei Auswahlboxen über die Erste wählt du die zuverwendende Soundkarte (wenn mehr als eine vorhanden ist) und über die zweite Auswahlbox wählst du den Aufnahmeeingang.
Wenn du Start aktiviert hast und eine Soundausgabe vorliegt, wird dir das Spektrum angezeigt.

Hast du damit Probleme oder wie du das jetzt in Delphi selber machst?

Ich werde aus deinem Text leider nicht schlau, kannst du nicht etwas konkreter sein?

Gruss
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Seite 1 von 3  1 23      

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