Bass.dll Tutorial

Übersicht BlitzBasic FAQ und Tutorials

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

BlitzBasic303

Betreff: Bass.dll Tutorial

BeitragMo, Jul 23, 2007 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Da es anscheind ne große Nachfrage gibt hab ich mir mal die Mühe gemacht und ein kleines Tutorial über die Bass.dll geschrieben

Behandelt wird:

1. Initialisieren der Bass.dll
2. Abspielen von mp3's , ogg's und wav's
3. Ändern von Lautstärke und Standartbefehle wie Stop,Pause,Resume
4. Auslesen von Channeldaten (z.b. für Visuelle Effekte)
5. Spezielle Effekte wie Reverb,Echo oder Flanger


Aber bevor wir anfangen will ich nochmal auf Vertex verweisen der einmal ein super Archiv mit Beispielen für die Bass.Dll erstellt hat auf das ich hier auch nochmal für die Ewigkeit hinweisen will:
https://www.blitzforum.de/upload/file.php?id=1843
Das brauchen wir sowieso weil sich in dem Archiv die Bass.dll befindet.

Also fangen wir mal an:
1. Initialisieren der Bass.dll

Das ist ganz einfach, erstmal kopieren wir die Bass.decls in das Userlib Verzeichnis von BlitzBasic (das ist meistens C:\Programme\Blitz(2d\Plus\3D)\Userlibs), dann brauchen wir noch die Bass.bb und natürlich die Bass.dll

Dann fangen wir an, erstmal die Bass.bb inkludieren Grafikmodus setzen usw.:
Code: [AUSKLAPPEN]

Include "bass.bb"
Graphics 640,480,16,1
SetBuffer BackBuffer()

das sollte noch klar sein.

Dann kommt der eigentliche Teil, das initialisieren der Bass.dll:
Code: [AUSKLAPPEN]

hWnd = GetActiveWindow()
If Not BASS_Init(-1,44100,0,hWnd) Then
   RuntimeError "Konnte Bass.dll nicht initialisieren"
EndIf
If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Bass.dll konnte nicht gestartet werden"
EndIf

So, BASS_Init initialisiert die Bass.dll, BASS_Start "startet" sie daraufhin,
Wenn das bei euch nicht klappt habt ihr entweder die Bass.decls nicht im Userlib Verzeichnis oder ihr habt die falsche Bass.Dll, also nicht die, die in dem Archiv von oben ist.

Dann gehts auch schon weiter, der erste Song wird abgespielt:
2. Abspielen von mp3's , ogg's und wav's
Dass ist auch noch ziemlich einfach
Code: [AUSKLAPPEN]

Channel=BASS_StreamCreateFile(0,Dateipfad$,0,0,BASS_SAMPLE_LOOP)
If Not Channel Then
   BASS_Free()
   RuntimeError "Konnte die Datei nicht laden, möglicherweiße existiert die Datei nicht!"
EndIf
If Not BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP) Then
   BASS_MusicFree(Channel)
   BASS_Free()
   RuntimeError "Konnte Datei nicht abspielen!"
EndIf

So, dann mal los, BASS_StreamCreateFile lädt eine Datei in einen Channel, die erste 0 lasst ihr am besten gleich so stehen, vllt. kann ja jemand das ganze erklären, das hat soweit ich weiß was mit dem Arbeitsspeicher zu tun, aber fragt mich nicht was..., ist ja auch egal. Der Dateipfad gibt natürlich, wie in den Blitz Befehlen auch, den Pfad zur Datei an, entweder MP3, MP2, MP1, OGG oder WAV.
Die Beiden nächsten Nullen können wir auch so stehen lassen.
Dann wird angegeben dass der Stream geloopt wird, in Blitz wäre das LoopSound. Der Wert von BASS_SAMPLE_LOOP Konstante wird in der bass.bb angegeben. Es gibt außerdem:

BASS_SAMPLE_MONO - Spiele den Stream in Mono (Geht nur bei MP1/2/3)
BASS_SAMPLE_FX - FX wird aktiviert, geht nur mit DirectX8 aber das behandeln wir später
BASS_STREAM_AUTOFREE - Der Stream wird automatisch aus dem Speicher gelöscht wenn der Stream zu Ende ist, ganz praktisch wenn man ein Lied bzw. Sound nur einmal spielen will.

Es gibt auch noch ein paar mehr auf die ich jetzt aber nicht eingehen will, weil sie für uns unwichtig sind, auf die kann ja vllt. später noch wer eingehen.

Also weiter in unserem Code, BASS_StreamPlay spielt den geladenen Stream jetzt ab. Wie in BB PlaySound. Hier kann nur BASS_STREAM_LOOP oder 0 gesetzt werden.

Wenn das Laden oder Abspielen nicht klappt wird eine entsprechende Fehlermeldung ausgegeben.

3. Ändern von Lautstärke und Standartbefehle wie Stop,Pause,Resume

So, jetzt können wir schon Streams abspielen, aber stoppen wollen wir sie auch, und wenn wir die Lautstärke ändern könnten wär das auch nicht schlecht. Aber erstmal bauen wir das Ganze was wir bereits haben zu einem funktionierenden Programm um, indem wir mal eine Hauptschleife mit einbauen:

Code: [AUSKLAPPEN]

Include "bass.bb"
Graphics 640,480,16,1
SetBuffer BackBuffer()

hWnd = GetActiveWindow()
If Not BASS_Init(-1,44100,0,hWnd) Then
   RuntimeError "Konnte Bass.dll nicht initialisieren"
EndIf
If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Bass.dll konnte nicht gestartet werden"
EndIf

Channel=BASS_StreamCreateFile(0,Dateipfad$,0,0,BASS_SAMPLE_LOOP)

If Not Channel Then
   BASS_Free()
   RuntimeError "Konnte die Datei nicht laden, möglicherweiße existiert die Datei nicht!"
EndIf
If Not BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP) Then
   BASS_MusicFree(Channel)
   BASS_Free()
   RuntimeError "Konnte Datei nicht abspielen!"
EndIf

While Not KeyHit(1)




Flip 0
Cls
Wend
BASS_Stop()
BASS_MusicFree(Channel)
BASS_Free()
End


Jetzt sind 3 weitere Befehle dazugekommen (BASS_Stop(), BASS_MusicFree() und BASS_Free()) die aber klar sein sollten, jetzt kommen wir zu den wichtigen Sachen:

Code: [AUSKLAPPEN]

Include "bass.bb"
Graphics 640,480,16,1
SetBuffer BackBuffer()

hWnd = GetActiveWindow()
If Not BASS_Init(-1,44100,0,hWnd) Then
   RuntimeError "Konnte Bass.dll nicht initialisieren"
EndIf
If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Bass.dll konnte nicht gestartet werden"
EndIf

Channel=BASS_StreamCreateFile(0,Dateipfad$,0,0,BASS_SAMPLE_LOOP)

If Not Channel Then
   BASS_Free()
   RuntimeError "Konnte die Datei nicht laden, möglicherweiße existiert die Datei nicht!"
EndIf
If Not BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP) Then
   BASS_MusicFree(Channel)
   BASS_Free()
   RuntimeError "Konnte Datei nicht abspielen!"
EndIf


While Not KeyHit(1)

   If KeyHit(25) Then   ;Wenn Taste P betätigt, zwischen Pause und Resume umschalten
      Pause=1-Pause
      If Pause=1 Then
         BASS_ChannelPause(Channel)
      Else If Pause=0 Then
         BASS_ChannelResume(Channel)
      End If
   End If
   If KeyHit(31) Then   ;Wenn Taste S betätigt, zwischen Stop und Play umschalten
      Stop1=1-Stop1
      If Stop1=1 Then
         BASS_ChannelStop(Channel)
      Else If Stop1=0 Then
         BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP)
      End If
   End If
   If KeyHit(203) Then BASS_SetVolume(BASS_GetVolume()-10)
   If KeyHit(205) Then BASS_SetVolume(BASS_GetVolume()+10)


   Text 10,10,BASS_GetVolume()
   Flip 0
   Cls
Wend
BASS_Stop()
BASS_MusicFree(Channel)
BASS_Free()
End



Sooo, Eigentlich ganz einfach oder nicht? Mit P schaltet man zwischen Pause und wieder aufnehmen um, und mit S kann man Stoppen und dann wieder von vorne anfangen (Ich habe als Variablenname "Stop1" statt nur "Stop" da es auch einen BlitzBefehl "Stop" gibt. Wir sehen, für BASS_ChannelPause gibt es BASS_ChannelResume, aber wenn man BASS_ChannelStop ausführt müssen wir den Stream wieder von vorne abspielen, wie wir es in Abschnitt 2 gelernt haben. Weiterhin gibt es die beiden Befehle BASS_SetVolume und BASS_GetVolume, die ja eigentlich klar sein sollten, der Lautstärkebereich geht von 0 bis 100. Bei der Lautstärkeregelung mit den Pfeiltasten Links und Rechts hab ich ein wenig geschlampt, wenn man bei 0 noch weiter runtergeht fängt es wieder bei 100 an, aber es soll ja nur die Funktion der Befehle beschreiben, also in euren späteren Anwedungen macht das mit der Lautstärkeregelung nicht so wie ich Rolling Eyes

4. Auslesen von Channeldaten (z.b. für Visuelle Effekte)
Einer der spannendsten Teile, und hier möchte ich mich herzlichst bei D2006 bedanken, weil er hier einmal etwas gepostet hat, das wir auch gleich in unseren Code einfügen:
Code: [AUSKLAPPEN]


Buffer = CreateBank(512 * 4)
Result = BASS_ChannelGetData(Stream,Buffer,BASS_DATA_FFT512)

For I = 0 To 128
        Value# = PeekFloat#(Buffer,I * 4)
        Color 0,255,0 : Rect I * 5,480 - (Value# * 2000),4,Value# * 2000
        Color 0,150,255 : Rect I * 5,480 - Value# * 2000,4,2
Next

Das in unseren Code eingefügt sieht so aus:
Code: [AUSKLAPPEN]

Include "bass.bb"
Graphics 640,480,16,1
SetBuffer BackBuffer()

hWnd = GetActiveWindow()
If Not BASS_Init(-1,44100,0,hWnd) Then
   RuntimeError "Konnte Bass.dll nicht initialisieren"
EndIf
If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Bass.dll konnte nicht gestartet werden"
EndIf

Channel=BASS_StreamCreateFile(0,Dateipfad$,0,0,BASS_SAMPLE_LOOP)

If Not Channel Then
   BASS_Free()
   RuntimeError "Konnte die Datei nicht laden, möglicherweiße existiert die Datei nicht!"
EndIf
If Not BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP) Then
   BASS_MusicFree(Channel)
   BASS_Free()
   RuntimeError "Konnte Datei nicht abspielen!"
EndIf


Buffer = CreateBank(512 * 4);Die Bank "Buffer" wird erstellt


While Not KeyHit(1)

   If KeyHit(25) Then   ;Wenn Taste P betätigt, zwischen Pause und Resume umschalten
      Pause=1-Pause
      If Pause=1 Then
         BASS_ChannelPause(Channel)
      Else If Pause=0 Then
         BASS_ChannelResume(Channel)
      End If
   End If
   If KeyHit(31) Then   ;Wenn Taste S betätigt, zwischen Stop und Play umschalten
      Stop1=1-Stop1
      If Stop1=1 Then
         BASS_ChannelStop(Channel)
      Else If Stop1=0 Then
         BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP)
      End If
   End If
   If KeyHit(203) Then BASS_SetVolume(BASS_GetVolume()-10)
   If KeyHit(205) Then BASS_SetVolume(BASS_GetVolume()+10)



   Result = BASS_ChannelGetData(Channel,Buffer,BASS_DATA_FFT512);Schreibt die Daten in die Bank "Buffer"
   For I = 0 To 128
        Value# = PeekFloat#(Buffer,I * 4);Liest die Daten einzeln aus und schreibt sie in "Value#"
        Color 0,255,0 : Rect I * 5,480 - (Value# * 2000),4,Value# * 2000;Grüne Balken
        Color 0,150,255 : Rect I * 5,480 - Value# * 2000,4,2;Blaue Striche oben auf den Balken
   Next


   Text 10,10,BASS_GetVolume()
   Flip 0
   Cls
Wend
BASS_Stop()
BASS_MusicFree(Channel)
BASS_Free()
End


Nicht viel neues, aber sieht doch gleich viel lebendiger aus oder? Ist doch auch eigentlich alles ganz einfach, nur die vielen Werte bei den beiden Rect Befehlen können irritieren, aber wenn man sich es richtig anschaut versteht man auch das. Ich fang mal mit erklären an, CreateBank ist ja noch ein Blitz Befehl, hier sag ich nur Onlinehilfe oder Tuts lesen, ich persönlich mag Banks nicht so gerne, aber das kann jeder anders sehen. Egal, das BASS_ChannelGetData schreibt die Daten alle sorgfältig in die Bank "Buffer", bei BASS_DATA_FFT512 könnt auch statt der 512 einmal 1024 oder 2048 einfügen, sieht anders aus, hat glaub ich was mit der Bytezahl zu tun. PeekFloat gibt dann einzeln die Werte der Bank an die Variable Value# aus, ist auch ein BB Befehl. Joa, und der Rest... Sieht bisschen komisch aus, isset aber nich Wink Erstmal: Die Variable Value# hält immer sehr kleine Werte, deshalb das Value#*2000. In den Rest müsst ihr euch reindenken, ist nich so schwer.


5. Spezielle Effekte wie Reverb,Echo oder Flanger

Ist auch nicht schwer, alles ganz einfach.
Code: [AUSKLAPPEN]

BASS_ChannelSetFX(Channel,BASS_FX_REVERB)
BASS_ChannelSetFX(Channel,BASS_FX_ECHO)
BASS_ChannelSetFX(Channel,BASS_FX_FLANGER)
BASS_ChannelSetFX(Channel,BASS_FX_DISTORTION)
BASS_ChannelSetFX(Channel,BASS_FX_GARGLE)

Mit diesen Befehlen könnt ihr den entsprechenden Effekt anschalten, ich hab mal den Reverbeffekt in unser Programm eingebaut:
Code: [AUSKLAPPEN]

Include "bass.bb"
Graphics 640,480,16,1
SetBuffer BackBuffer()

hWnd = GetActiveWindow()
If Not BASS_Init(-1,44100,0,hWnd) Then
   RuntimeError "Konnte Bass.dll nicht initialisieren"
EndIf
If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Bass.dll konnte nicht gestartet werden"
EndIf

Channel=BASS_StreamCreateFile(0,DateiPfad$,0,0,BASS_SAMPLE_LOOP)

If Not Channel Then
   BASS_Free()
   RuntimeError "Konnte die Datei nicht laden, möglicherweiße existiert die Datei nicht!"
EndIf
If Not BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP) Then
   BASS_MusicFree(Channel)
   BASS_Free()
   RuntimeError "Konnte Datei nicht abspielen!"
EndIf


Buffer = CreateBank(512 * 4);Die Bank "Buffer" wird erstellt

BASS_ChannelSetFX(Channel,BASS_FX_REVERB);REVERB Effekt einschalten

While Not KeyHit(1)

   If KeyHit(25) Then   ;Wenn Taste P betätigt, zwischen Pause und Resume umschalten
      Pause=1-Pause
      If Pause=1 Then
         BASS_ChannelPause(Channel)
      Else If Pause=0 Then
         BASS_ChannelResume(Channel)
      End If
   End If
   If KeyHit(31) Then   ;Wenn Taste S betätigt, zwischen Stop und Play umschalten
      Stop1=1-Stop1
      If Stop1=1 Then
         BASS_ChannelStop(Channel)
      Else If Stop1=0 Then
         BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP)
      End If
   End If
   If KeyHit(203) Then BASS_SetVolume(BASS_GetVolume()-10)
   If KeyHit(205) Then BASS_SetVolume(BASS_GetVolume()+10)



   Result = BASS_ChannelGetData(Channel,Buffer,BASS_DATA_FFT1024);Schreibt die Daten in die Bank "Buffer"
   For I = 0 To 128
        Value# = PeekFloat#(Buffer,I * 4);Liest die Daten einzeln aus und schreibt sie in "Value#"
        Color 0,255,0 : Rect I * 5,480 - (Value# * 2000),4,Value# * 2000;Grüne Balken
        Color 0,150,255 : Rect I * 5,480 - Value# * 2000,4,2;Blaue Striche oben auf den Balken
   Next


   Text 10,10,BASS_GetVolume()
   Flip 0
   Cls
Wend
BASS_Stop()
BASS_MusicFree(Channel)
BASS_Free()
End




Soo, das wars auch (schon). Wir können jetzt Lieder und Sounds abspielen, ihre Daten auslesen und Effekte auf sie anwenden, das ist schon ne Menge, aber die Bass.dll kann auch noch ne Menge mehr, ihr könnt euch ja in dem Archiv von oben nochmal die Examples oder die Hilfe (English) angucken.

ich hoffe euch hats gefallen und ihr habt was lernen können,

Mfg

BlitzBasic303

Abrexxes

BeitragMo, Jul 23, 2007 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weise darauf hin das dieses Tut NICHT mit Blitz_Bass_Studio funktioniert. Alle aktuellen libs nutzen Object Handels und Channelgroups. In den neuen Versionen existieren Befehle wie StreamPlay und Musikplay nicht mehr.

Für dieses Tut ist daher zwingend eine alte Bass.dll nötig. Bei BBS sind alle Beispiele der aktuellen libs dabei.
https://www.blitzforum.de/foru...hp?t=23802

cu

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jul 23, 2007 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist die Version von Vertex nicht die Version 2.0 oder so? Abrexxes hat im übrigen auch sowas schon ins DLLs -Fach gelegt. Hier https://www.blitzforum.de/foru...hp?t=23802 zu finden. Die DLL-Version wo Abrexxes die Userlibs geschrieben hat, ist die Version 2.3

Falls ich richtig mit meiner Vermutung liege, so würde ich dir empfehlen dein Tutorial auf die neue Version umzustellen. Weil sich eben doch sehr vieles grundlegend geändert hat, und man auch wesentlich mehr Möglichkeiten hat, mit der neuen Version. Der alte Code funktioniert überhauot nicht mehr mit der neuen Version.

edit1: Hehe, zu spät...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Abrexxes

BeitragMo, Jul 23, 2007 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr viele änderungen. Die wichitgsten:

- Init hat neuen parameter
- wie fmodEX nur noch Channelobjekte
- plugins (WMA/Flac/etc etc)
- unabhängige DSP Effekte (schneller und besser als DX8 insbesondere auf Vista)
- und und und.
- Um schreiben sollte in einem Nachmittag gehen, und wie gesagt statt der alten DX8 würde ich sofort DSP Plugin laden.

Anfangen sollte man mit der Vertex Version nicht mehr da sie zu keinen Updates mehr kompatibel sein wird. Vertex stand übrigens bei BBS mit Rat und Tat im Hintergrund. Sein Werk lebt also weiter. Very Happy
 

BlitzBasic303

Betreff: RE:

BeitragDi, Jul 24, 2007 7:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann werd ich mich aber erstmal in die neue einarbeiten müssen, dann folgt das nächste Tut für BBS

tft

BeitragDi, Jul 24, 2007 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ..

ich fände es gut, wenn das Alte Tut stehen bleibt. Die Bass DLL macht alles was mann braucht. Und die Neue ist zwar besser .. Smile Aber schon wider diese Object geschichte. Wenn das jemand auch für nen Doofen erklären kann. Solls mir recht sein.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

BlitzBasic303

Betreff: RE:

BeitragDi, Jul 24, 2007 8:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn ich mir den Ordner mit den vielen Beispielen angucke glaube ich es braucht kein Tut mehr dazu, die Examples erklären alles.

Abrexxes

BeitragDi, Jul 24, 2007 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
tft hat Folgendes geschrieben:
Aber schon wider diese Object geschichte.


Als Anwender hast du mit den Objekten selbst ja nichts zu tun. Aber statt 6 verschiedener Playbefehle gibts nur noch ein Channelplay Kommando. Ist das etwa kompliziert? Dafür gibts schnellere libs bessere Organisation, und zb Schluss mit den gefährlichen DX8 Effekt Kommandos. Bei externen DSPs kann man nichts falsch machen.

Zu erklären gibts da nichts, statt 6 Befehle nur noch 4.

Also ist für den Nutzer das Gegenteil der Fall, du lädst was du willst und nutzt für alles nur noch Channelcommandos anstatt rumzusuchen ob Musik26b jetzt ein langes Samples (Playsample) oder ein Musikstream (Playmusik)war. Ausserdm gibts keinen Support mehr der jetzt für Vista nicht unwichtig ist. Oder um es klarer zusagen. Bass und fmodEx könnten in nächster Zeit wohl auf openAL für die Ausgabe umsteigen um dem Schrott aus dem Weg zu gehen den Microsoft (Aus Sicherheitsgründen!?) angerichtet hat. Desweiteren wird die Bass 100% unterstützt mit den neuen userlibs und noch mehr (MakeBeep/Modinfo..etc etc)

cu

pirahni

BeitragMo, Apr 07, 2008 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß, ich komme spät aber ich habe ein Problem. Wenn ich nur erstmal initaliesiren will,
Code: [AUSKLAPPEN]

Include "bass.bb" 
Graphics 640,480,16,1 
SetBuffer BackBuffer() 

hWnd = GetActiveWindow() 
If Not BASS_Init(-1,44100,0,hWnd) Then 
RuntimeError "Konnte Bass.dll nicht initialisieren" 
EndIf 
If Not BASS_Start() Then 
BASS_Free() 
RuntimeError "Bass.dll konnte nicht gestartet werden" 
EndIf


Kommt für die zeile Code: [AUSKLAPPEN]

hWnd = GetActiveWindow() 


der Fehler Zitat:

Runtime error
Function not found!


Wer mir hilft kriegt virtuellen Keks Very Happy [/b]
Leicht verständliche Informatiktutorials:
http://www.youtube.com/VascoLange
 

ChristianK

BeitragMo, Apr 07, 2008 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
GetActiveWindows ist eine Funktion aus der user32.dll, die du als Userlib hinzufügen musst.

Code: [AUSKLAPPEN]
.lib "user32.dll"
GetActiveWindow%( )

So, den Keks bitte ...
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

pirahni

BeitragDi, Apr 08, 2008 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
:Keks gebe:
Guten Appetit Very Happy

-EDIT-
Hmmm... habe ich gerade mal ausprobiert. an der stelle Code: [AUSKLAPPEN]
.lib "user32.dll"
sagt er mir Zitat:
Expecting end of file.

Funktioniert das nur unter Blitz max oder so? Arbeite mit Blitz 3D (und habe komischer weise kein Userlib verzeichnis im B3D ordner).
Leicht verständliche Informatiktutorials:
http://www.youtube.com/VascoLange

The_Nici

BeitragDi, Apr 08, 2008 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst eine .decls Datei erstellen, die in den userlib-Ordner von Blitzbasic packen und dann kannst du es benutzen.

Silver_Knee

BeitragDi, Apr 08, 2008 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du evtl die demo.. bei dere ist der Userlib ordner noch nicht erstellt... erstelle einfach einen namens userlib und kuk obs läuft...
 

Phlox

BeitragMi, Apr 09, 2008 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, mann kann es aber auch so ersetzen, falls man die Demo hat:

Code: [AUSKLAPPEN]
hWnd = SystemProperty("AppHWND")

pirahni

BeitragMi, Apr 09, 2008 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antworten. Nein, ich habe die Vollversion. Ich werde es mal gleich probieren.

-EDIT-
Funzt immer noch net. Immer noch dat gleiche. Mein Pfad wo ich die .decls und die .dll hingepackt habe lautet C:\Programme\Blitz3D\Userlib\User32.dll bzw .decls. Was mache ich falsch?
Leicht verständliche Informatiktutorials:
http://www.youtube.com/VascoLange

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 09, 2008 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
In der .decls müsste u.a., wenn überhaupt...

Zitat:
.lib "user32.dll"

GetActiveWindow% () : "GetActiveWindow"


...drin stehen. Ich glaube zumindest, dass es ohne den erweiterten Anhang nicht geht. Aber wenn es dir nur um das Fensterhandle geht, so mache es doch wie Phlox es beschrieben hat.

Auch muss die .dll in dem selben Ortner, wo sich später auch die .exe bzw. bereits jetzt die .bb befindet. Da aber die user32.dll eine Systemdatei ist, wird diese auch von überall gefunden. Diese sollte also garnicht wo anders hinkopiert oder gar wo anders hin verschoben werden.

Wenn du eine andere als die Standard-IDE benutzt, so musst du die .decls neu einlesen lassen. Bei IDEal geht es über die Menüleiste Compile / Edit Userlib / Button [Refrehs Definitions].
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

pirahni

BeitragMi, Apr 09, 2008 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, mir geht es nicht um den Fensterinhalt sondern darum den Code da oben möglichst original zu halten.
Leicht verständliche Informatiktutorials:
http://www.youtube.com/VascoLange

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 09, 2008 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also gut. Richte dir erstmal die BBS von Abrexxes ein. Diese findest du hier. Damit hast du schonmal eine recht neue Version 2.3.x der bass.dll, falls nicht schon geschehen. In dieser Zusammenstellung hast du auch gleich alle nötigen .decls und .dll und brauchbare und funktionierende Beispielcodes. Abrexxes hat sich die große Mühe gegeben, all die Beispielcodes zu schreiben und vor allem die Userlibs.

Erst wenn das geschehen, kann man dir weiter helfen, denn das hier als Tutorial beschriebene Vorgehen für die bass.dll ist erstmal vollkommen veraltet und funktioniert nicht mit den neuen Blitz-Code. Die alte Version - auch ich habe zähliche Code damals damit erstellt - funktioniert anders und vor allem viel komplizierter als die neue Version.

-

Was mich auch etwas stuzig macht ist, was du mit dem FensterHandle überhaupt machen willst. In keinem meiner Codes habe ich dieses Vorgehen durchführen müssen. Man kann also einfach eine 0 an der Stelle schreiben und gut ist. Damit du nicht auf den Gadanken kommst, ich hätte sowieso Null Ahnung, hier mal ein Link zu einem meiner Projekte mit der bass.dll

Und wenn du dir den Link von Abrexxes genauer anschaust, dann wirst du auch den kompletten Source zu der etwas älteren Version vom Dreamplayer kommen. Da Abrexxes sowas wie ''Exklusivrechte'' zum verteilen des Codes vom Dreamplayer von mir bekommen hat. Als kleines Dankeschön für seine Userlibs und Codes. Wink

edit1: Meine Initialisierung vom Dreamplayer 2.61 welcher wirklich mit wirklich sehr vielen Tricks sein Aussehen, Startvorhaben und anderen Dingen startet, initialisiert die bass.dll lediglich mit folgender Zeile:

Code: [AUSKLAPPEN]
If BASS_Init(-1,44100,0,0,BASS_NULL)<>1 Then RuntimeError "Sound not ready":End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Abrexxes

BeitragMi, Apr 09, 2008 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Von all dem abgesehen hat meine Version bereits alles was benötigt wird an Board und muss nicht mehr zusätzlich hinzugefügt werden. Siehe bass.decls

Zitat:

.lib "User32.dll"
BASS_HWND%() : "GetActiveWindow"

.lib "Kernel32.dll"
BASS_RtlMoveMemory1%(Destination*,Source,Length) : "RtlMoveMemory"
BASS_RtlMoveMemory2%(Destination,Source*,Length) : "RtlMoveMemory"


Das wird auch in einigen der Demos angewandt ist aber nicht zwingend nötig da sich Windows die Tasks merkt die aufgerufen werden und angehängte Tasks "abwürgt" wenn die Hauptanwendung geschlossen wird. Wichtig (und sicherer) ist es aber wenn diverse Programme gleichzeitig laufen und die Engine nur einmal geladen werden soll. Bei 99% eines normalen B3D (B+) Programms/Spiel ist es also unnötig.

cu

Abrexxes

BeitragMi, Apr 09, 2008 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
*Sorry Bladerunner wegen dem Doppelpost*

Ich will das Problem genauer erklären.

Angenommen, man startet ein Programm und dieses eine DLL, dann merkt sich Windows welches Programm welche DLL startet. Wird nun das Programm geschlossen, schliest Windows auch alle anderen Tasks die durch dieses Programm gestartet wurden (in diesem Fall die bass.dll)

Am besten merkt man das wenn die Audioausgabe "stottert" wenn man das Programm über das Fenster schliest. Der letzte Befehl (BASS_Free()) wird dann nicht ausgeführt. Da aber das Programm schon beendet wurde (und der Soundbuffer nicht mehr gefüllt wird) stottert die Ausgabe noch rum bevor Windows das ganze entgültig abwürgt. Das kann man mit jeder Demo testen (ESC statt Fenster schließen).

Nun ist die bass.dll die ich benutze recht modern, was bedeutet das sie den Arbeitsspeicher schonen will, dh... es ist (anders als zb bei Win98 und alten bass Versionen ) möglich das 3 Programme gleichzeitig laufen, die bass.dll aber nur einmal im Speicher geladen wurde. Sie arbeitet dann alle Programme gleichzeitig ab.

Das Problem ist dann natürlich klar. Wird eine Anwendung geschlossen könnten alle anderen abstürzen da die bass.dll plötzlich nicht mehr im Speicher ist und alle Befehle ins Nirvana schießen. Aus diesem Grund sollte man HWND nutzen, denn obwohl alle aktuellen Windows Versionen da korrekt arbeiten (also noch erkennen welches Programm was sendet,oder besser gesagt die dll mehrmals laden) ist es durchaus möglich das künftige Windows Versionen da wesentlich brutaler sind. Das bedeutet, sendet ein Prog keine Zugehörigkeit geht gar nichts. Da es sich nur um EINE ZEILE handelt sollte man also denn korrekten Weg gehen, sonst wäre es möglich das unter zukünftigen Windows Versionen der Sound versagt. Wink

cu

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group