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
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 00:15 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