Frage an die FMod-Profis ;)...
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
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?
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?
- Kai
- Beiträge: 264
- Registriert: 29.09.2005 20:58
- Computerausstattung: iMac 2019
- Wohnort: Hannover
- Kontaktdaten:
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.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?
http://uploaded.to/?id=p3dr0q
- Deluxe0321
- Beiträge: 336
- Registriert: 19.05.2006 00:31
- Kontaktdaten:
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Hey das sieht beides sehr vielversprechend aus... 
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
@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?

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

@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?
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
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?
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?

- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
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:
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
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02