![]() |
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? |
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 |
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. |
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:
wird die Aufnahme gestartet. Dabei enthält _Channel den Aufnahmehandle, dies ist hier aber nur für das Stoppen wichtig.
_Channel:=BASS_RecordStart(44100, 2, 0, @RecordingCallback, 0);
Delphi-Quellcode:
Beim Start wird nämlich eine Callback-Routine installiert, die von der Bass.dll automatisch aufgerufen wird.
BASS_ChannelStop(_Channel);
Delphi-Quellcode:
und dieser Routine übergibt die Bass.dll den Kanalhandle, wenn sie die Routine aufruft.
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length,
user: DWord): boolean; stdcall; 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 ![]() Gruss Thorsten |
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: |
Re: Amplitude und Frequenz durch BASS_ChannelGetData
Schön das du weiterkommst.
Zitat:
Gruss Thorsten |
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 ;) |
Re: Amplitude und Frequenz durch BASS_ChannelGetData
Liste der Anhänge anzeigen (Anzahl: 1)
Hier nochmal ein neuer Versuch...
|
Re: Amplitude und Frequenz durch BASS_ChannelGetData
:dancer: nice klappt jetzt
|
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 14:40 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