Frage an die FMod-Profis ;)...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Hab mir jetzt die dll und Dein Beispiel runtergeladen.

Wenn ich das Beispiel mit dem Debugger starte, dann kommt zwar keine
Fehlermeldung, aber auch kein Sound und im Debugger steht immer

--------------------
isPlaying: 0
position: 0
spectrum: 0.0000 0.0000 0.0000 0.0000 ...

...gibt es da irgendwelche Versionsprobleme oder hab ich was falsch gemacht?
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Ghosty1967 hat geschrieben:Hab mir jetzt die dll und Dein Beispiel runtergeladen.

Wenn ich das Beispiel mit dem Debugger starte, dann kommt zwar keine
Fehlermeldung, aber auch kein Sound und im Debugger steht immer

--------------------
isPlaying: 0
position: 0
spectrum: 0.0000 0.0000 0.0000 0.0000 ...

...gibt es da irgendwelche Versionsprobleme oder hab ich was falsch gemacht?
Passt ja, probier mal ob das hier bei dir läuft, is aktuell für pb4.20 mit neuster dll ect. musst nur die eine Zeile auskommentieren.

http://uploaded.to/?id=p3dr0q
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Lösung mit der Bass.dll:
Hier

Mir ist klar das ich die Bass.dll aufzwinge :mrgreen:
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Hey das sieht beides sehr vielversprechend aus... :mrgreen:

Ich denke, ich werde die Lösung mit der bass.dll nehmen, da ich den Eindruck
habe, das ich besser mit dem Beispiel zurechtkomme. Sorry Kai :allright:

@Deluxe321... In dem Beispiel speicherst Du ja in das Array fft(0) die Frequenzdaten des Ausgangssignals. Wie bekomme ich denn die Daten für
ein VU-Meter aus diesen Daten - oder muß ich da einen anderen Aufruf an
die bass.dll machen?
Könntest Du mir auch hierfür ein Beispiel geben?
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

...habs schon gefunden, man benutze einfach BASS_ChannelGetLevel()
stimmts :lol:
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Ghosty1967 hat geschrieben:Sorry Kai :allright:
Gibt es nix zu entschuldigen, mehrere Wege führen zum Ziel. :D
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Also, ich komme ja weiter... aber ich habe doch noch eine Frage

Ich lese die Daten per BASS_ChannelGetData(chan,@fft.f(),#BASS_DATA_FFT256) aus.
Also habe ich in einem Array danach 128 Werte, welche dem Spectrum der
Frequenzen entsprechen.
Jetzt möchte ich dieses Spectrum auf 8 Schaltkanäle aufteilen, sodaß ich
bei einem bestimmten Wert den entsprechenden Kanal schalten kann.
Also z.B

Kanal 1 für 16KHz
Kanal 2 für 8KHz
Kanal 3 für 4KHz
Kanal 4 für 2KHz
Kanal 5 für 1KHz
Kanal 6 für 500Hz
Kanal 7 für 250Hz
Kanal 8 für 125Hz

eben wie bei einer "einfachen" Lichtorgel... aber ich komme da nicht wirklich
weiter. Wie muß ich die Daten in fft() weiter verarbeiten um zu meinem
gewünschten Ergebnis zu kommen? :cry:
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Die Daten sollten so zu verstehen sein:

fft(k) hält die Amplitude (als Wert zwischen 0.0 und 1.0) für die Frequenz (k+1)*Step Hz

wobei Step = Samplingrate/FFT-Size, also bspw. bei 44100 Hz Samplingrate und 1024-Punkt-FFT ist Step etwa 43,066 Hz.

In dem Bsp ist dann:
fft(0) hält Amplitude für 43,066 Hz,
fft(100) hält Amplitude für 4306,6 Hz,
fft(511) hält Amplitude für 22050 Hz,

(Es könnte aber auch bei 0 Hz (Gleichstromanteil) beginnen, bei fmod wird dieser aber verworfen)

Ggf. musst Du die Amplituden nachher noch exponentiell verzerren, um besser damit arbeiten zu können, also bspw per:

Code: Alles auswählen

a.f = fft(k)
a.f = (Pow(1000.0, a) - 1) / 999.0
!UD2
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

und wie finde ich die Samplingrate raus?
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Das ist die Wiedergabesamplingrate, die man beim Initialisieren einstellt (defaultmäßig sollte das 44100 Hz sein, ist es zumindest bei fmod)
!UD2
Antworten