ProSpeed.dll
Wenn sie Fragen und Anregungen zu meiner ProSpeed DLL oder zu den Profan²-Sourcecodes und Demos haben, dann sind sie hier richtig. Auch neue Vorschläge sind jederzeit willkommen. Und bitte mit richtigem Namen und Email-Adresse einschreiben. Danke.
  Suchen
 Zurück zur Übersicht
 AutorThema: DSoundSetGlobalVolume(0) u.s.w
Rolf Koch
Datum:15.05.02 22:01 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hallöchen

soweit bin ich jetzt voll drin in der Prospeed WOW GENIAL-
jedoch
ich habe nach Deinem Beispielcode die Funktionen
DSoundSetGlobalVolume(0) oder DSoundSetVolume (B,V) eingesetzt (natürlich mit richtigen Werten)
...
Prospeed$=pfad$;"\Prospeed.dll",
$I C:\PROFAN\AKTUELLE PROJEKTE\LOS\INC\Prospeed_Funktionen.inc
prospeed&=usedll(prospeed$)
.....
sd&=DSoundInit(%hwnd)
text$="C:\Profan\Test.wav"
buffer1&=DSoundLoad(addr(text$))
DSoundSetGlobalVolume(0)

In Deinem Beispielcode klappt alles wunderbar, jedoch bei mir kommt eine Exeption EAcces...... bei DSoundSetGlobalVolume(0)
(wenn ich dieses auskommentiere klappts ohne Fehlermeldung)
auch wenn ich DSoundPlay(buffer1&,0) aufrufe kommt kein Ton.
Bei sd&=DSoundInit(%hwnd)
sd& ergibt komischerweise einen Wert von -2147024809 ist das normal?
Rolf





Frank Abbing
Datum:15.05.02 22:22 Antwortenals Email verschicken  


Hi,

hab' jetzt auf die Schnelle keine Idee, aber probier' anstatt...

text$="C:\Profan\Test.wav"

...mal...

text$="C:/Profan/Test.wav"

Könnte der berüchtigte Profan-Dateinamen-Fehler sein ;-))
/ zu benutzen anstatt \ ist immer sicherer und laut MS ebenfalls erlaubt.

Gruß, Frank



Rolf Koch
Datum:15.05.02 23:02 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Nee leider auch nicht Frank
Aber noch besser:
Wenn ich Playsound nehme
Beispiel:
if equ(Collision (sprites&,wache1&,5,5)
              CopyExtBmp(%HDC,250,521,343,85,status2&,0,0,0)
              statustext$="Hier darfst Du nicht durch, solange Du nicht"
              statustext2$="den goldenen Stein der Seele besitzt!"
              STATUS statustext$,statustext2$
              fire1&=InitSprite(fire&,%HDC,fensterkopie1&,fensterkopie2&,0,0,30,59,16,1,10,390,360,1,1)
              Playsound sound$,1 ' HIER PROBLEM DAUERT UND DAUERT
              sleep 1000	'DIES IST NICHT DAS PROBLEM
              DeleteSprite (fire1&)
              SetSpritePos (sprites&,400,390,390,380)
endif

dauert es ziemlich lange bis das Feuer (erscheint kurz und dann dort der Held) weg ist und dann wird erst der Sound gespielt.
Komischerweise wird BEEP oder eine Print "BLABLA" als Test direkt wiedergegeben.
Hier ne Ahnung? HOFFENTLICH
Rolf


Frank Abbing
Datum:16.05.02 06:22 Antwortenals Email verschicken  


Hi,

das ist bei Playsound normal, das dauert immer so lange. Einer der Gründe, warum ich nach Alternativen gesucht hatte.

Zu deinem ersten Problem.
Hast du mal versucht, ein anderes Wavefile zu probieren? Nimm' mal eins aus meinem Beispielordner. Eventuell ist dein Wavefile defekt oder besitzt ein Exoten-Format.

Gruß, Frank


Rolf Koch
Datum:16.05.02 13:54 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hmm Frank,
naja so Sachen wie andere Möglichkeiten auszuprobieren oder das mit dem Backslash kenne ich ja auch.
Nee ich hab mit Direktsound fast identisch mit Deiner Demo gearbeitet. Hab sogar zum Testen die Wav's aus Deiner Demo genommen. Deine Demo klappt sogar mit Gesamtlautstärke und bei mir (obwohl logische Reihenfolge der Anweisungen) eine Exeption ????
Schade - wird wirklich lustig mein Game (ala Zelda) - aber ohne Sound ???
Midi im Hintergrund klappt - aber halt die Geräusche wären doch wirklich wichtig.
Rolf


Rolf Koch
Datum:16.05.02 14:56 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi ich wieder
Hier mal ein Code zum anschauen oder Testen:
declare sd&,prospeed&,buffer1&,text$,sound&,prospeed$
declare pfad$,text$
Prospeed$=pfad$;"\Prospeed.dll"
$I C:\PROFAN\AKTUELLE PROJEKTE\LOS\INC\Prospeed_Funktionen.inc
prospeed&=usedll(prospeed$)

sd&=DSoundInit(%hwnd)
text$="C:\TEST.WAV"
buffer1&=DSoundLoad(addr(text$))
DSoundSetGlobalVolume(500) 'HIER BEI MIR EINE EXEPTION
print buffer1&
while 1
waitinput
sound&=DSoundPlay(buffer1&,0)
print sound&
wend
DSoundUnLoad(buffer1&)
Freedll buffer1&

DER NEUGIERIGE ROLF


Frank Abbing
Datum:16.05.02 16:47 Antwortenals Email verschicken  


Hi,

Du weißt ja, das Addr(text$) erst ab Profan 7.0 richtig funktioniert? Ansonsten mußt du mit Bereichsvariablen arbeiten.
Hab' jetzt leider keine Zeit, morgen schau ich mir das ganze genauer an.

Gruß, Frank


Rolf Koch
Datum:16.05.02 16:56 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi klar lass Dir Zeit, Du musst Dich doch nicht abhetzten, es ist doch schon was starkes, daß Du sowas entwickelt hast.
Ähm ich nutze logischerweise 7.5

Mach langsam und bleib uns gewogen
Rolf


Frank Abbing
Datum:17.05.02 10:24 Antwortenals Email verschicken (frankabbing@12move.de) 


Hi Rolf,

hab' den Fehler jetzt gefunden.

DSoundInit(%hwnd) benutzt als Parameter ein Fensterhandle, aber du hast kein Fenster geöffnet. Ohne Fenster gibt's bei mir auch einen Absturz, mit Fenster höre ich den Sample ;-))

Aber das ist wohl meine Schuld. In der Anleitung zu ProSpeed habe ich vergessen anzugeben, das DSoundInit() überhaupt einen Parameter benutzt (schäm), das werde ich schnell nachholen.

Also, ohne Fenster auch kein Sound, ok ?
Und DSoundSetGlobalVolume(500) paßt auch nicht, es sind Werte von -10000 bis 0 zulässig, aber keine Werte über Null.

Liebe Grüsse, Frank


Rolf Koch
Datum:17.05.02 11:07 Antwortenals Email verschicken (webmaster@rokosoft.de) 


JUCHHHHUUUU
Danke Frank das wars es klappt!!!!
Was heist hier schuld - Nix Schuld
Jetzt versuche ich noch irgendwie hinzubekommen, daß wenn
der Sprite in einem bestimmten Bereich ist (Viereck auf'm Fenster), daß dann was passiert - es reicht also nicht GetSpriteX (H) und GetSpriteY (H) - und dann bin ich vollstens Zufrieden.
Bin am Malen wie ein Weltmeister
Bis dann
Rolf


Frank Abbing
Datum:17.05.02 11:47 Antwortenals Email verschicken  


Hi,

prima!
Eventuell hilft dir da SetSpriteCage() oder SpriteMovingRect()...

Gruß, Frank


Rolf Koch
Datum:17.05.02 12:12 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Ja Danke Frank
Will nicht dieses Posting überlasten, jedoch
DSoundSetVolume (B,V) sowie DSoundSetGlobalVolume (V)
und auch DSoundStop (B) mit richtigen Werten! lassen eine Exeption hervorkommen. ?????
V= -10000 bis 0 und B = das Handle des Sprites wie üblich.
oder muss ich bei DSoundstop vorher DSoundGetNextBuffer (A)
setzen? (natürlich auch mit dem richtigen Wert)
Sorry, das ich soviel frage, aber Du siehst ich bin begeistert mit Deiner DLL
Rolf


Frank Abbing
Datum:17.05.02 13:35 Antwortenals Email verschicken  


Hi,

äh, bist du sicher, das du die Anleitung richtig durchgelesen hast...?
Was hat Parameter B mit Sprites zu tun ???
B steht für...

B : Long - Zeiger auf einen Buffer, der von DSoundPlay() übergeben wurde.

Also zuerst b&=DSoundPlay(...), jetzt bekommst du die Adresse eines Buffers zurück, die die Sounddaten enthält. Die anderen DSound-Funktionen benutzen diesen Buffer dann zum abspielen...

Du überlastest das Forum nicht, dafür ist es ja da !
Ich bin happy, das dir ProSpeed so gut gefällt ;-))

Gruß, Frank


Rolf Koch
Datum:17.05.02 13:38 Antwortenals Email verschicken (webmaster@rokosoft.de) 


OHHH Mist verschrieben -
natürlich meinte ich nicht Sprite
- Ich meinte natürlich B= Zeiger auf den Buffer.
Das kommt davon, wenn man seine Gedanken überall und nirgendwo hat
Rolf


Rolf Koch
Datum:17.05.02 13:53 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi OK hast recht - es ist immer besser ein Beispiel zu posten:
declare sd&,prospeed&,buffer1&,text$,sound&,prospeed$
declare pfad$,text$,b&
Prospeed$=pfad$;"\Prospeed.dll"
$I C:\PROFAN\AKTUELLE PROJEKTE\LOS\INC\Prospeed_Funktionen.inc
prospeed&=usedll(prospeed$)
CLS					'FENSTER damit es klappt  [img]http://img.webmart.de/w/f2/7.gif[/img] 
Windowtitle ".. hmm warum geht's so nicht?"
'DSoundSetGlobalVolume(-575)		'HIER EXCEPTION ????? WARUM ???
sd&=DSoundInit(%hwnd)
text$="C:\TEST.WAV"
buffer1&=DSoundLoad(addr(text$))
DSoundSetGlobalVolume(500) 'HIER BEI MIR EINE EXEPTION
print buffer1&
print "Enter Sound an | Escape Sound aus"
while 1
waitinput
if equ(%scankey,13)
b&=sound&=DSoundPlay(buffer1&,1)	'LOOP
print "SOUND!  [img]http://img.webmart.de/w/f2/1.gif[/img] "
elseif equ(%scankey,27)
'DSoundStop(b&)				'HIER EXCEPTION ????? WARUM ???
print "Nix Sound  [img]http://img.webmart.de/w/f2/2.gif[/img] "
endif
wend
DSoundUnLoad(buffer1&)
Freedll buffer1&

und noch was:
Mit den Koordinaten (Sprite innerhalb eines Rechtecks) geht nicht mit Deinen Anweisungen, da ich es so meine, als wenn die Maus (also hier das Sprite) innerhalb des Rechtecks ist.
Aber ich hab mir so geholfen:
1.) einfarbiges Dummysprite erstellt.
2.) Dort plaziert wo die Abfrage sein soll
3.) mit Collide(H,H) auf Berrührung abgefragt und
YEHA es funktioniert.
Bis dann
Rock'n'Rolf



Rolf Koch
Datum:17.05.02 14:03 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Ähh wie immer - Kopierfehler:
b&=sound&=DSoundPlay(buffer1&,1) 'LOOP
muss natürlich bedeuten:
b&=DSoundPlay(buffer1&,1) 'LOOP

... und vergiß nicht das auskommentierte " ' " wegzumachen.

So jetzt aber
Rolf



Rolf Koch
Datum:17.05.02 14:10 Antwortenals Email verschicken (webmaster@rokosoft.de) 


JAAAA - Brauchst nicht mehr zu kucken
Alles klar vielleicht war das der Fehler b&=sound&
(vielleicht sollte man nicht soviel kopieren )
Jetzt gehts
declare sd&,prospeed&,buffer1&,text$,sound&,prospeed$
declare pfad$,text$,b&
Prospeed$=pfad$;"\Prospeed.dll"
$I C:\PROFAN\AKTUELLE PROJEKTE\LOS\INC\Prospeed_Funktionen.inc
prospeed&=usedll(prospeed$)
CLS					
Windowtitle ".. hmm warum geht's so nicht?"
sd&=DSoundInit(%hwnd)
text$="C:\TEST.WAV"
buffer1&=DSoundLoad(addr(text$))
DSoundSetGlobalVolume(-1000) 
print buffer1&
print "Enter Sound an | Escape Sound aus"
while 1
waitinput
if equ(%scankey,13)
b&=DSoundPlay(buffer1&,1)	'LOOP
print "SOUND!  [img]http://img.webmart.de/w/f2/1.gif[/img] "
elseif equ(%scankey,27)
DSoundStop(b&)				
print "Nix Sound  [img]http://img.webmart.de/w/f2/2.gif[/img] "
endif
wend
DSoundUnLoad(buffer1&)
DSoundDeInit()
Freedll buffer1&

Aber vielleicht holst Du hier (evtl. bisschen erweitern) daß als Exemple in Deine Hilfe
Rolf


Frank Abbing
Datum:17.05.02 15:16 Antwortenals Email verschicken (frankabbing@12move.de) 


Hi Rolf,

hast du jetzt alles soweit hinbekommen?

Du hast recht, ein kleines Beispiel wäre nicht schlecht, ich bin auch sehr gerne bereit, Sourcecodes von euch aufzunehmen, nur her damit...

Eine Dll zu programmieren ist manchmal echt Horror. Die Dll hat ihren eigenen Code, klappt aber nicht, ohne das ganze in Profan dann zu testen. Also immer Sourcecodes gleichzeitig zu erweitern. Und noch Beispielprogramme und die Anleitungen, puh...
Aber Spaß macht's trotzdem.

Schon mal probiert, bei deinem Beispiel öfter die Entertaste zu drücken ;-))

Gruß, Frank


Rolf Koch
Datum: 17.05.02 18:03 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Jawohl Frank,
jetzt ist alles i.O
Das mit dem Enter ist stark!
Also, bis dann und weiterhin Hipp Hipp Prospeed!
Rolf


 Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
Shortwin - denn Glück ist kein Zufall!