Delphi-PRAXiS
Seite 2 von 3     12 3      

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 24. Feb 2008 16:41

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
zum einen: Ja ich habe damit Probleme wie Delphi das macht^^

zum anderen, ich kann bei deinem Test Programm nach wählen des Sounddevices also meiner Soundkarte nur ein Mirko auswählen :(

Aber bei delphi muss ich dann erstmal über

BASS_RecordSetDevice(i);

die Karte Auswählen und danach über

BASS_RecordSetInput(i, BASS_INPUT_ON)

den richtigen Kanal, oder?

omata 24. Feb 2008 16:50

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Ok, ich glaube ich verstehe jetzt langsam dein Problem.

Du möchtest ein Programm schreiben das immer den Masterausgang anzeigt. Dein Problem dabei ist welcher Eingang ist das? Aber das ist doch die ganze Zeit auch schon das Thema hier. Da du nicht weißt was auf anderen Rechnern für Soundkarten eingebaut sind kannst du das eigentlich nie genau automatisch rausfinden.
Es kann Soundkarten geben, die solch einen Ausgang gar nicht haben oder er heisst dort anders oder er ist an einem anderen Indexplatz. Du könntest nach dem Namen suchen und einen Auswahlvorschlag machen. Trotzdem würde ich aber immer auch die Auswahlmöglichkeit lassen.
Was ist wenn es den Mastereingang nicht gibt und der Benutzer aber gerne den WAVE-Eingang ansehen möchte?

Vielleicht verstehe ich dich aber auch nicht richtig, sorry.

Meine Frage ist eigentlich erstmal nur eine funktioniert das Beispielprogramm bei dir? Kannst du da ein Spektrum sehen.
Das ist doch nur ein minimal Beispiel, das du erstmal verstehen musst und dann kannst du anfangen alles umzubauen oder zu erweitern.

Edit: und ja deine Frage: ja das ist richtig.

Gruss
Thorsten

Killerregenwurm 24. Feb 2008 17:05

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
ok,

das Programm muss auch gar nicht auf anderen Rechnern erstmal laufen, da es im eh bestimme Externe Hardware braucht, die nur an diesem Rechner existiert.

Bei deinem Programm sehe ich ein Spektrum des Mikro einganges. Bei Sounddevice kann ich zwischen meiner webcam(oben) und meiner Soundkarte(unten) wählen.

Also ist die Webcam sounddevice 0 und die Soundkarte 1, oder?

bei Input kann ich beidemale nur ein Mikrofon wählen. leider hier nicht Stereomix oder den line Eingang, den ich auch habe.

Ob das Programm Master oder Wave abgreift, ist eher egal, da ich als Hauptziel das Spektrum der Musik haben möchte wäre Wave komfortabler.
Dies halte ich aber erstmal für nebensächlich, da es ja erstmal überhaupt gehen sollte *grins*


Was ich bei deinem Programm nicht ganz durschaue ist, bei RecordingCallback den Handle belegts.

Achja kannst du mir mal sagen wofür eigentlich das @ genau macht, ich hab das jetzt einfach so benutzt weiß aber ehrlich nicht genau was das bewirkt.

omata 24. Feb 2008 17:27

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ups, da war noch ein Fehler. Beim wechseln des Devices wurden die Eingänge nicht neu geladen. Ich vermute mal dein Webcam-Device ist das erste Device und hat nur das Mikrofon. Versuch es mal mit der neuen Version.

Über
Delphi-Quellcode:
  _Channel:=BASS_RecordStart(44100, 2, 0, @RecordingCallback, 0);
wird die Aufnahme gestartet. Dabei enthält _Channel den Aufnahmehandle, dies ist hier aber nur für das Stoppen wichtig.
Delphi-Quellcode:
  BASS_ChannelStop(_Channel);
Beim Start wird nämlich eine Callback-Routine installiert, die von der Bass.dll automatisch aufgerufen wird.
Delphi-Quellcode:
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length,
                           user: DWord): boolean; stdcall;
und dieser Routine übergibt die Bass.dll den Kanalhandle, wenn sie die Routine aufruft.

Das @-Zeichen weisst den Delphicompiler an die Adresse der Routine zu übergeben, damit die Dll von "außen" deine Routine findet und aufrufen kann.

In dem Bass-Archiv findest du auch eine bass.chm Datei, die die einzelnen Befehle der bass.dll erklärt.

Gruss
Thorsten

Killerregenwurm 24. Feb 2008 22:14

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
vielen dank langsam raff ich es :coder2: :D

Delphi-Quellcode:
procedure TmfMovinhead.btItunesClick(Sender: TObject);
var
  _Channel:HStream;
  fft : array[1..512] of single;
  n,i : integer;
  dName: PChar;
  begin
  BASS_RecordInit(-1);
  self.laDevice.caption := BASS_RecordGetDeviceDescription(0);
  BASS_RecordSetDevice(0);
  self.laInput.Caption := BASS_RecordGetInputName(3);
  BASS_RecordSetInput(3, BASS_INPUT_ON);
  _Channel:=BASS_RecordStart(44100, 2, 0, nil , 0);
  self.laItunetrackOut.caption := getCurrentTitle(iTunesApp);
  BASS_ChannelGetData(_Channel,@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]*100);
    PaintBox1.Canvas.PenPos := point(i, 100);
    PaintBox1.Canvas.LineTo(i, 100 - n);
    self.Label3.Caption := self.Label3.Caption+ IntToStr(i) + ':' + intToStr(n) + ' ,';
  end;
  BASS_ChannelStop(_Channel);
  bass_free;
end;

endlich klappt es so wie es soll :bounce1: :)

danke echt, ich war schon kurz vorm verzweifeln.


Hab einfach bei mir die Webcam gezogen, dann konnte ich die verschieden Inputs auhc wählen, aber ich glaub das refreshen beim wechseln des Inputs hat nun auch noch nicht ganz so geklappt wie es sollte bei dir. Müsste ich nochmal genau beobachten wennd ie Webcam wieder angeschlossen ist.

Falls ich nochmal probleme habe komm ich einfach auf dich zurück :cheers:

omata 24. Feb 2008 22:17

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Schön das du weiterkommst.

Zitat:

Zitat von Killerregenwurm
Hab einfach bei mir die Webcam gezogen, dann konnte ich die verschieden Inputs auhc wählen, aber ich glaub das refreshen beim wechseln des Inputs hat nun auch noch nicht ganz so geklappt wie es sollte bei dir. Müsste ich nochmal genau beobachten wennd ie Webcam wieder angeschlossen ist.

Ich habe hier leider nur eine Soundkarte und kann das deshalb nicht wirklich testen. Wäre toll wenn du das nochmal ausprobieren könntest.

Gruss
Thorsten

Killerregenwurm 24. Feb 2008 22:40

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
also das updaten der InputListe funktioniert noch nicht bei device change.

wenn du willst kann ich das dann noch für dich testen bis das klappt ;)

omata 24. Feb 2008 22:53

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

Killerregenwurm 24. Feb 2008 22:57

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
:dancer: nice klappt jetzt

WS1976 25. Feb 2008 05:51

Re: Amplitude und Frequenz durch BASS_ChannelGetData
 
Hallo,
bei mir klappt das überhaupt nicht habe Probleme mit der bass.dll.
Es wäre nett wenn du die mal posten könntest.

Prozedureinstiegspunkt Bass_recordsetdevice wurde in der bass.dll nicht gefunden.

Grüsse
Rainer


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.
Seite 2 von 3     12 3      

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