Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi zwei Sounds vergleichen (https://www.delphipraxis.net/23985-zwei-sounds-vergleichen.html)

vlees91 13. Jun 2004 15:18


zwei Sounds vergleichen
 
Hallo,

wie kann man zwei sounds vergleichen, die ähnlich sind, also nicht exakt (für alle, die am freitag geniale erfinder geguckt haben:ich meine das mit der "intelligentesten Tür der Welt")

Die Muhkuh 13. Jun 2004 15:28

Re: zwei Sounds vergleichen
 
Vielleicht lädts du die in zwei Streams und vergleichst die miteinader.

Ich hab noch irgendwo Source. Ich schau mal und Poste dann.

Die Muhkuh 13. Jun 2004 15:29

Re: zwei Sounds vergleichen
 
Hier:

Delphi-Quellcode:
function CompareFiles(const sFileName1, sFileName2: String): Boolean;
var
  ms1, ms2: TMemoryStream;
begin
  Result := False;
  ms1 := TMemoryStream.Create;
  try
    ms1.LoadFromFile(sFileName1);
    ms2 := TMemoryStream.Create;
    try
      ms2.LoadFromFile(sFileName2);
      If ms1.size = ms2.size Then
        Result := CompareMem(ms1.Memory, ms2.memory, ms1.size);
    finally
      FreeAndNil(ms2);
    end;
  finally
    FreeAndNil(ms1);
  end
end;

dizzy 13. Jun 2004 15:29

Re: zwei Sounds vergleichen
 
Zitat:

Zitat von vlees91
die ähnlich sind, also nicht exakt

;)

Die Muhkuh 13. Jun 2004 15:31

Re: zwei Sounds vergleichen
 
:oops: Wer lesen kann ist klar im Vorteil :oops:

Böse Spinne <- *pfui*

CalganX 13. Jun 2004 15:39

Re: zwei Sounds vergleichen
 
Hi,
wobei man gucken kann, wie groß die Differenz ist. ;) Ich weiß nicht, wie deine Sounddateien aufgebaut sind, aber wenn in jedem Byte ein Wert steht, kannst du dir ja einen Gültigkeitsrahmen bauen. Und dann guckst, du wie groß die Differenz ist und ob sie noch in dem Rahmen sind.

Chris

Bernhard Geyer 13. Jun 2004 15:39

Re: zwei Sounds vergleichen
 
Das Theme ist ein sehr komplexes Thema und beinhaltet ein gehörige Portion an Verständnis bezüglich Mathematik und Physik.
Als Schlagworte die dir bei einer Einarbeitung helfen könnten wären z.B. FFT (Fast Fourier Transformation), Hüllkurve, Frequenzspekturm und ähnliches.

Ich denke für eine halbwegs leistungsfähige Lösung mußt Du vermutlich entweder einiges an Geld locker machen (für entsprechende FFT,...-Komponenten) oder sehr viel Wissen in diesem Bereich um alles selbst zu realisieren.

CalganX 13. Jun 2004 15:41

Re: zwei Sounds vergleichen
 
Hi Bernhard,
sofern es eine richtige Spracherkennungssoftware geht, hast du Recht, allerdings sollte was ganz einfaches so möglich sein, wie Spider es gepostet hat. Nur müsste man das Datenformat kennen und somit die Werte vergleichen zu können.

Chris

Luckie 13. Jun 2004 15:47

Re: zwei Sounds vergleichen
 
Man könnte beide Dateien binaär laden und kucken wie viele Bytes identisch sind.

dizzy 13. Jun 2004 15:48

Re: zwei Sounds vergleichen
 
Ganz gemein wird das mit Sounds die in irgend einer Art komprimiert sind, und/oder nicht die selben Randbedingungen (Samplingrate, Mono/Stereo, Bittiefe) haben. Ein Byteweiser Vergleich ist dann nahezu nicht mehr möglich! Ein und der selbe Sound, ein mal als original Wave und ein mal als mp3 hören sich zwar verdammt ähnlich an, aber die Wellenform dürfte zuweilen erheblich anders aussehen.
Man arbeitet also mit einer tierischen Toleranz, oder man nimmt sich eine Transformation (FFT, Karhunen-Loewe, etc.) zur Hand und vergleicht quatisierte Spektren. Das wäre eher der Weg der zum Erfolg führen würde. (Eine Hüllenkurve würde auch weiter helfen, ist aber nicht unbedingt erforderlich hierbei.)

Fazit: Einfach nach dem Schema "if a=b then..." wird das nix.

Bernhard Geyer 13. Jun 2004 15:51

Re: zwei Sounds vergleichen
 
Hi Chris,

ich denke nicht das deine (auch noch relative einfache) Lösung mittels Gültigkeitsrahmen zu einem Ziel führt.
Wann ist ein Sound ähnlich? Er muß ähnliche Klangfolgen in ähnlichen Zeitabständen haben. Es ist z.B. immer noch sehr ähnlich wenn er z.B. 2 % schneller gespielt wird oder um ein paar Takte tiefer. Eine gepfiffene Melodie ist (wenn der Pfeiffer nicht so schlecht pfeift wie ich) auch noch dem "Orginal" ähnlich, als wenn das Stück mit einem Orchester gespielt wird.

Ich glaube im letzten Jahre wurden zu diesem Themenbereich in Funk und Fernsehen einige Lösungen präsentiert, welche z.B. einen Popsong aufgrund einer Übertragung per Handy erkennen konnte (Wenn Mobiltelefone die Melodie erkennen). Auch das Erkennen mittels Pfeifen wurde auch schon demonstriert.

CalganX 13. Jun 2004 15:56

Re: zwei Sounds vergleichen
 
Hi Bernhard,
natürlich hast du Recht: für eine komplexe Spracherkennung wird es nötig solche Dinge zu berücksichtigen. Ich habe am Freitag die Sendung nicht gesehen, allerdings denke ich, dass die Tür den Namen des Sprechers erkannt hat und damit entschieden hat, ob man eintreten darf oder nicht. Und sofern es darum geht, wird ein Name nur ähnlich ausgesprochen, wenn der jenige das spricht. Hier kommt es dann nur noch auf Geschwindigkeit an.
Wenn ich jetzt darüber nachdenke, hast du wohl auch hier Recht. :wall:

Wenn es jedoch wirklich nur um etwas einfaches gehen soll, sollte für den Anfang Spiders/Meine Lösung oder Luckies helfen.

Chris

d3g 13. Jun 2004 16:08

Re: zwei Sounds vergleichen
 
Ein akustisches Signal ist aus so vielen einzelnen Parametern zusammengesetzt: den Amplituden der einzelnen Frequenzen, von denen man eine größere Anzahl betrachten muss, damit eine Stimmerkennung (und darum geht's doch? -- hab die Sendung nicht gesehen) einigermaßen zuverlässig funktioniert. Auch wenn die Amplituden der Frequenzen nur leicht abweichen, ändert sich das Ergebnis, das man als Bytes dargestellt bekommt, völlig (bei genügend hoher Samplingrate, die für eine auch nur einigermaßen zuverlässige Erkennung notwendig ist). Ein byteweiser Vergleich bringt genau gar nichts.

dizzy und Bernhard haben Recht, ein Vergleich der Resultate der DFT/FFTs sollte die am einfachsten zu machende Lösung sein.

vlees91 13. Jun 2004 17:23

Re: zwei Sounds vergleichen
 
hallo, ich glaube ihr denkt viel zu kompliziert, denn es soll keine Spracherkennung sein(dafür hab ich Microsoft Speech SDK).
"Die intelligenteste Tür der Welt" ging so: Mikro am boden und zuerst der sound (der Gang der Person) von (z.B.)Tom aufgenommen.
Anschließend noch der von Tom2.
Dann noch der von Katharina1 und SabineX.
Dann ging einer der 4 zur Tür(also am Mikro vorbei, dass die geräusche aufnam) und die Tür erkannte nach ca. eine halbe Sekunde, wer es war.
Man könnte natürlich die DIfferenz und die LAutstärke der "aufprall-geräusche" messen/kontrollieren, aber: WIE?

[edit]PS:Die Sounds sind also vom Prog selber aufgenommen und sind nicht komprimiert(und wenn doch, weiß man welche komprimierung)[/edit]

Bernhard Geyer 14. Jun 2004 08:18

Re: zwei Sounds vergleichen
 
Zitat:

Zitat von vlees91
Man könnte natürlich die DIfferenz und die LAutstärke der "aufprall-geräusche" messen/kontrollieren, aber: WIE?

Dazu benötist Du ja ein FFT-Transformation (wenn das Studiumwissen noch halbwegs aktuell ist). Mit solcher einer Umwandlung wird dein Geräuch in eine Frequenzdarstellung transformiert. Aus dieser kannst Du für z.B. die 10 lautesten Frequenzen merken (evtl. noch Gewichtet nach den Verhältnissen der Amplituten) und dann dies mit einer gespeicherten Aufnahmen (passen Frequenzen halbwegs sowie die Verhältnisse der Amplituten).

Gandalfus 14. Jun 2004 13:16

Re: zwei Sounds vergleichen
 
mit der bass.dll könntest du einfach FFT nutzen.

Sebastian Nintemann 14. Jun 2004 13:48

Re: zwei Sounds vergleichen
 
Zitat:

Zitat von Bernhard Geyer
...einige Lösungen präsentiert, welche z.B. einen Popsong aufgrund einer Übertragung per Handy erkennen konnte

Für die, die das interessiert: In der c't vom 22.3. 2004 (Nr 7/2004) steht dazu ein Artikel.
Viele Grüße, Sebastian

vlees91 14. Jun 2004 14:33

Re: zwei Sounds vergleichen
 
Zitat:

Zitat von Grotesquery
Zitat:

Zitat von Bernhard Geyer
...einige Lösungen präsentiert, welche z.B. einen Popsong aufgrund einer Übertragung per Handy erkennen konnte

Für die, die das interessiert: In der c't vom 22.3. 2004 (Nr 7/2004) steht dazu ein Artikel.
Viele Grüße, Sebastian

Hab ich schon gelesen(Oh, wie peinlich:mein hundertster Beitrag ist OT)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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 by Thomas Breitkreuz