Seite 1 von 2

Lautstärke von WAV File rausfinden?

Verfasst: 22.07.2009 16:00
von johann.boehme
Hi!
Ich würd gern ne WAV Datei abspielen und zeitmäßig die lautstärke in einer Textdatei mitloggen.
Gibt ja keine Funktion in der stdlib, kennt jemand ne Möglichkeit?

Verfasst: 22.07.2009 18:19
von jojo1541
Setz das ganze in eine Variable und verändere diese. Dann schreibst du die Werte dieser Variable in deine Log-Datei.

Code: Alles auswählen

InitSound()

volume.l = 100

LoadSound(0,"musik\anarchist.wav")

SoundVolume(0,volume)

Debug volume


Verfasst: 22.07.2009 18:37
von johann.boehme
hmm thx, aber das ist nicht ganz was ich meinte ;)
Es geht quasi um ne equalizer Animation ^^ Sound besteht ja eigentlich nur aus Frequenz- und Lautstärkeinformationen. Ich möchte jetzt einfach die lautstärke abfragen können um sagen zu können, wo die Sounddatei wie laut ist. ^^
Zum Beispiel um in einem Gespräch Sprechpausen identifizieren zu können.

Verfasst: 22.07.2009 18:55
von Vermilion
@volti: Er wollte die Lautstärke ermitteln, nicht festlegen.

@johann.boehme: Es gibt keinen PureBasic internen Befehl um die aktuelle Soundlautstärke zu ermitteln.

Verfasst: 22.07.2009 19:04
von johann.boehme
Gibt ja keine Funktion in der stdlib, kennt jemand ne Möglichkeit?
;) i Know ^^
Deshalb wollt ich ja wissen ob jemand ne idee hat, ne library kennt, oder nen WinAPI Befehl?
irgendwas?

Verfasst: 22.07.2009 19:07
von bobobo
es gibt die bass.dll (www.un4seen.com) (dort gibts auch nen pb-wrapper)

und die Fmod.dll (www.fmod.org) (zum wrappen such mal hier im forum und oder purearea.net bei den userlibs)

ist beides nicht all zu komplex.

me preferred immer die bass, weiss aber auch nicht recht warum. ich glaub die issn hauch kleiner

Verfasst: 22.07.2009 21:27
von inc.
Du musst die Amplitude auslesen:
http://forums.purebasic.com/english/vie ... wav+ffmpeg

Dort hatte ich mal geposted wie man die Lautstärke herausfindet (sie zus. maximiert und z.B. neu via Std.out und ffmpeg recodiert).

Verfasst: 22.07.2009 23:19
von ZeHa
Bei einer Equalizer-Animation reicht die Amplitude nicht, Du mußt das WAV-File stückchenweise per FFT konvertieren und dann hast Du erst das Frequenzspektrum inkl. der Lautstärke der einzelnen Frequenzbänder. Wenn Du das nicht machst, kannst Du nur eine "Oszillator"-Animation erzeugen, aber eben kein Spektrum.

Verfasst: 23.07.2009 09:13
von johann.boehme
Würde mir auch reichen ;)

Der Code ist wirklich nützlich ^^
auch wenn ich noch net wirklich check, wo im File was steht.
Hab mir jetzt mal den ersten Teil angeguckt, in dem er in einer Schleife die Amplitude ausliest, guckt ob sie höher als der bisherige maxwert ist und diesen angleicht ^^

hab jetzt einfach mal mit

Code: Alles auswählen

PrintN(Str(*mem\w))
versucht das ganze auszugeben..
da gibts aber ne ganze menge negative Zahlen!? Was hab ich falsch gemacht?

Und nochmals vielen Dank für die schnellen Tipps!

Verfasst: 23.07.2009 10:09
von Vermilion
Das ist nicht falsch. Solch eine Audiodatei besteht halt nur aus einer Sinuskurve, so musst du dir das vorstellen, die nicht ganz "kurvig" ist, sondern in ihrer Genauigkeit Form halt nur durch ihre Abtastrate (Frequenz, Hz, 44100KHz heißt 44100 Abtastungen in einer Sekunde) definiert ist.

Bild

Diese Sinuskurve repräsentiert gleichzeit auch in gewisser Weise die Schwingung der Lautsprechermembran, um den Klang zu erzeugen. Es ist eigentlich recht simpel.

Die Amplituden (Höchst- und Tiefstpunkte) sind übrigens für die Lautstärker verantwortlich.