AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [BASS.DLL] Lauten Ton registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[BASS.DLL] Lauten Ton registrieren

Ein Thema von Clemens L. · begonnen am 27. Aug 2010 · letzter Beitrag vom 28. Aug 2010
Antwort Antwort
Clemens L.

Registriert seit: 27. Apr 2008
35 Beiträge
 
Delphi 2009 Architect
 
#1

[BASS.DLL] Lauten Ton registrieren

  Alt 27. Aug 2010, 16:01
Hallöchen,

ich versuche momentan mithilfe der BASS.DLL auf einen lauten Ton in einer Umgebung mit normaler Hintergrundlautstärke zu reagieren. Da ich zuvor noch nicht mit BASS gearbeitet habe, bin ich mir nicht sicher, was die beste Vorgehensweise wäre. Ich habe bereits einen Recording Channel, sowie das zugehörige Callback. Jetzt weiss ich jedoch nicht, wie ich die aufgenommenen Daten auswerten könnte, und welche Daten für die Erkennung überhaupt relevant wären.

Ich stelle mir das so vor, dass, wenn beispielsweise ein Buch herunterfällt oder jemand in die Hände klatscht, das Programm diesen Ton erkennt und ein Ereignis ausgeführt wird. Dieser Ton würde sich aufjedenfall von den sonstigen Lauten aus der Umgebung hervorheben, weshalb ich mir die Erkennung eigentlich recht simpel vorgestellt hatte.

Wie gesagt kenne ich mich mit der BASS-API noch nicht aus, weshalb mir momentan die Anhaltspunkte fehlen.

Mit freundlichen Grüßen
Clemens
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 27. Aug 2010, 16:19
Dafür müsste eigentlich die Funktion
BASS_ChannelGetLevel(channelHandle) ausreichen,
die du innerhalb deiner DSP-Callback funktion aufrufst.

Diese ermittelt ganz einfach das Level (Lautstärke) des Channels und gibt diesen als Word zurück, dabei ist das Lo-Word der linke Kanal und das Hi-Word der rechte Kanal. Somit liegt der Wertebereich zwischen 0-255 für jede Seite.

Zur Analyse brauchst du eigentlich nur einen Schwellwert, wenn ein gewisses Level überschritten wird, dann trigger eine Funktion.
Anders machen es selbst Studio-Geräte (z.B. Kompressoren mit den "Threshold"-Werten) auch nicht

Willst du einen Peak nur innerhalb eines bestimmten Frequenzbereichs erkennen, brauchst du dafür eine FFT-Analyse.
Ich denke mal, dafür gibts für Bass auch ein Addon / PlugIn.
Aber wenn du nur einen generellen Lautstärke-Peak erkennen willst, brauchst du keine FFT.


Zitat:
Wie gesagt kenne ich mich mit der BASS-API noch nicht aus, weshalb mir momentan die Anhaltspunkte fehlen
Im ZIP-Archiv des bass-Downloads ist auch eine bass.chm enthalten. Da steht eigentlich alles drin, was man an Doku dazu braucht, und übersichtlich ists auch noch

Geändert von blackfin (27. Aug 2010 um 16:43 Uhr)
  Mit Zitat antworten Zitat
Clemens L.

Registriert seit: 27. Apr 2008
35 Beiträge
 
Delphi 2009 Architect
 
#3

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 27. Aug 2010, 16:59
Hallo,

danke für die schnelle Antwort. Ich habe es jetzt mit der Funktion schon einigermaßen hingekriegt, indem ich am Anfang eine 5 sekündige Kalibration durchlaufen lasse, um die durchschnittliche Standardlautstärke zu ermitteln. Wenn diese (deutlich) überschritten wird, wird jetzt ein Ereignis ausgelöst.

Mit dem Begriff FFT-Analyse kann ich jetzt ehrlich gesagt nicht allzuviel anfangen , allerdings klingt das auch sehr interessant, da im Moment doch recht viele Fehlauslöser vorkommen. Vielleicht könnte ich in der Kalibrationsphase auch noch eine Erfassung der Frequenz des gesuchten Geräusches einbauen. Wenn du mir Tipps geben könntest, wie man das realisieren könnte oder wo ich mehr über solche Verfahren erfahren kann, wär das echt toll.

Zu den Demos: Die habe ich mir auch schon angeschaut, und so auch die grundlegende Aufnahme Funktionalität hingekriegt. Und in der Dokumentation finde ich nicht so recht das, was ich brauche, sondern nur alle Funktionen aufgelistet, und da ist es schwer den Überblick zu behalten.

Mit freundlichen Grüßen
Clemens
  Mit Zitat antworten Zitat
LargoD

Registriert seit: 8. Jun 2007
42 Beiträge
 
#4

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 27. Aug 2010, 17:28
... Ich habe es jetzt mit der Funktion schon einigermaßen hingekriegt, indem ich am Anfang eine 5 sekündige Kalibration durchlaufen lasse, um die durchschnittliche Standardlautstärke zu ermitteln. Wenn diese (deutlich) überschritten wird, wird jetzt ein Ereignis ausgelöst.
Besser ist es, statt vorheriger Kalibrierung einen gleitenden Mittelwert über einige Sekunden mitzuführen, dann passt sich das System an veränderliche Hintergrundpegel an.

Gruß
Erich
  Mit Zitat antworten Zitat
Clemens L.

Registriert seit: 27. Apr 2008
35 Beiträge
 
Delphi 2009 Architect
 
#5

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 27. Aug 2010, 21:00
Da bin ich wieder,

ich habe mir mittlerweile das mit FFT mal angeschaut, blicke jedoch noch nicht wirklich durch. Ich konnte mithilfe der Funktion BASS_ChannelGetData ein Array bekommen, weiss jedoch nicht wie ich mithilfe dieser Werte einen Ton mit vorher aufgenommenen Werten vergleichen kann.

Ich bekomme mein Array folgendermaßen:

Delphi-Quellcode:
var
  buf: array[0..4095] of Single;

  BASS_ChannelGetData(RecordingChannel, @buf, BASS_DATA_FFT8192 or BASS_DATA_FLOAT);
Ich habe ein solches Array zu dem Zeitpunkt wo ein Ton mit hoher Lautstärke registriert wurde, und möchte diesen Ton nun mit einem vorher aufgenommenen Vergleichen. Ich hoffe ihr könnt mir ein bisschen auf die Sprünge helfen, mit Audio-Programmierung kenne ich mich leider kaum aus.

Gruß
Clemens
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#6

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 28. Aug 2010, 12:09
Hast du den Hinweis von LargoD schon umgesetzt? Wäre imho einfacher als eine FFT.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Clemens L.

Registriert seit: 27. Apr 2008
35 Beiträge
 
Delphi 2009 Architect
 
#7

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 28. Aug 2010, 13:27
Hast du den Hinweis von LargoD schon umgesetzt? Wäre imho einfacher als eine FFT.
Das habe ich, jedoch wäre es sehr praktisch, den Ton grob von anderen Geräuschen isolieren zu können.

Dafür müsste eigentlich die Funktion
BASS_ChannelGetLevel(channelHandle) ausreichen,
die du innerhalb deiner DSP-Callback funktion aufrufst.
Mir fällt gerade auf, dass ich die Töne in einem Timer auswerte, statt es in dem Recording Callback (ich nehme an das gleiche wie DSP-Callback) zu tun. Macht das einen Unterschied?

Gruß
Clemens
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 28. Aug 2010, 17:45
Ein Timer löst immer dann aus, wenn das Intervall rum ist. Das Callback immer dann, wenn neue Daten da sind. Folglich wird das Callback häufiger auslösen. Wenn der Ton jetzt mehrere Sekunden lang ist und du nicht den exakten Anfang und das exakte Ende für eine genaue Zeitdauerberechnung brauchst, sollte der Timer reichen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Clemens L.

Registriert seit: 27. Apr 2008
35 Beiträge
 
Delphi 2009 Architect
 
#9

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 28. Aug 2010, 18:23
Ein Timer löst immer dann aus, wenn das Intervall rum ist. Das Callback immer dann, wenn neue Daten da sind. Folglich wird das Callback häufiger auslösen. Wenn der Ton jetzt mehrere Sekunden lang ist und du nicht den exakten Anfang und das exakte Ende für eine genaue Zeitdauerberechnung brauchst, sollte der Timer reichen.

Bernhard
Danke, dann werde ich wohl beim Timer bleiben. Allerdings wird mein Timer anscheinend öfters ausgelöst als das Callback, also öfter, als neue Daten da sind. Muss ich mich damit abfinden, oder kann ich die Aufnahmegeschwindigkeit / Buffergröße so verändern das ich genauer messen kann.
Clemens
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#10

AW: [BASS.DLL] Lauten Ton registrieren

  Alt 28. Aug 2010, 18:33
wenn das so ist, würde ich beim Timer bleiben (weil wohl doch genauer). Ich habe mich allerdings nicht so genau mit der Bass.DLL und den Fähigkeiten beschäftigt. Das liegt daran, dass ich alles über Hier im Forum suchenTBassPlayerEx kapsele.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
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