Seite 1 von 1

dll und wav abspielen unter visual basic, directx=0 ???

Verfasst: 16.01.2007 09:46
von xverbatim
hallo,

ich versuche mich gerade darin, funktionen in eine dll zu packen und diese dann über visual basic 5 abzuspielen.
Eigentlich soll erstmal nichts weltbewegendes passieren, nur auswahl einer wav datei und abspielen und stoppen (siehe unteren purebasiccode)

jetzt ist es aber so, daß wenn ich 2 oder 3 mal den sound aus visual basic abspiele, er mir plötzlich anzeigt, das er directx nicht mehr öffnen kann. obwohl ich den sound über die procedure(stopwav) gestoppt habe. oder muß man direktx anders auf null setzen ?
wenn ich dann den sound trotzdem nochmal abspiele, stürzt visual basic ab ;-(((

ich würde mich über antwort sehr freuen...
danke xverbatim


mein visual basic code sieht so aus.

Code: Alles auswählen

Private Declare Function playwav Lib "c:\playwav.dll" () As Long
Private Declare Function stopwav Lib "c:\playwav.dll" () As Long

Private Sub Command1_Click()
Dim play As Long
play = playwav
End Sub

Private Sub Command2_Click()
Dim play As Long
play = stopwav

End Sub

Private Sub Form_Load()

End Sub

;'''''''''''''der purebasic code""""""""""""""

; ProcedureDLL.s playwav()
 ProcedureDLL.l  playwav()
   
If InitSound() = 0
  MessageRequester("Error", "Can't open DirectX 7 or no sound card is available",  0)

EndIf

SoundFileName$ = OpenFileRequester("Choose a .wav file", "", "Wave files|*.wav",0)
If SoundFileName$
  If LoadSound(0, SoundFileName$)
    PlaySound(0,1)
    MessageRequester("Sound", "Playing the sound (loop)..."+Chr(10)+"Click to quit..", 0)
  Else
    MessageRequester("Error", "Can't load the sound.", 0)
  EndIf
EndIf
  EndProcedure
  
; Global Rueckgabe.l

ProcedureDLL.l stopwav()

StopSound(-1)
EndProcedure

Verfasst: 16.01.2007 13:54
von dysti
Ich habe deinen Code ausprobiert. Bei mir funzt alles. Allerdings habe ich VB6.

Verfasst: 16.01.2007 18:17
von ts-soft
Du kannst doch nicht bei jedem Aufruf "InitSound()" machen :freak:
InitSound() mußte extra machen
Abgesehen davon, wofür die DLL, VB kanns auch ohne

hi und danke

Verfasst: 16.01.2007 18:39
von xverbatim
erstmal danke für die antwort, ups ja klar, init muß separat...

hmmm ???!

visual basic kann das auch so???

also zwei waves abspielen, wobei eine ständig geloopt wird....

bist du dir da sicher ? falls ja, hast du evtl. einen code?

das war ja genau mein problem, daß ich ein ständigen loop von einem wav-file wollte und waves für effekte meiner buttons....

von visual basic gibt es zwar den weg über die api funktion und mciSendString, aber wie gesagt, die loop funktion konnte ich nicht herausbekommen...


ist vielleicht umständlich mit der dll, aber solange ich kein code für vb habe, die lösung für mich




noch eine andere bescheidene Frage, wenn ich über ein dll, die ich über purebasic erstellt habe, ein fenster öffne, wie schaffe ich es, daß das auch wieder geschlossen werden kann? einfach mit end haut ja nicht hin, da meckert der compiler...vielleicht eine blöde anfänger frage, aber nur wer fragt gewinnt ;-)

gruß xverbatim

nee läuft nicht so ;-(

Verfasst: 16.01.2007 18:51
von xverbatim
hi nochmal, habe jetzt die init getrennt und nach beenden meines programms in visual basic 5 stürzt alles ab ;-(

woran könnte das noch liegen

VB5

Code: Alles auswählen

Private Declare Sub init_wav Lib "c:\playwav.dll" ()
Private Declare Sub play_wav Lib "c:\playwav.dll" (ByVal filename As String)
Private Declare Sub stop_wav Lib "c:\playwav.dll" ()

Private Declare Sub zeige Lib "c:\menue.dll" (ByVal eingabe As String)


Private Sub starte_sound()

play_wav "c:\wav.wav"
  
End Sub

Private Sub beende_sound()
stop_wav

End Sub

Private Sub Form_Load()
init_wav
End Sub


;PURECODE





 ProcedureDLL init_wav()
   
If InitSound() = 0
  MessageRequester("Error", "Can't open DirectX 7 or no sound card is available",  0)
EndIf

EndProcedure
 
ProcedureDLL.s play_wav(var.s)
LoadSound(0, var)
PlaySound(0,1)
EndProcedure

ProcedureDLL stop_wav()

StopSound(-1)
EndProcedure









irgendwie directx auf null setzen entladen

Verfasst: 16.01.2007 21:10
von xverbatim
irgendwie komme ich nicht weiter, weiß denn niemand etwas ?


ich denke das problem ist, das sich directx nicht richtig entlädt...

habe jetzt schon versucht, über freesound den sound aus dem speicher zu nehmen, hilft auch nichts...


ich kann den sound einmal richtig abspielen, beende ich das visualbasic programm und starte neu, stürzt alles ab, auch wenn ich nicht nochmal init_wav durchlaufen, sondern gleich den sound über play_wav abspiele.


help ..........

gruß+danke im vorfeld
xverbatim

Verfasst: 16.01.2007 21:16
von ts-soft
Mithilfe der PlaySound API:
http://msdn2.microsoft.com/en-us/library/ms712879.aspx
ist alles möglich, was Du benötigst, nur das es kein DirectX ist.
Umsetzung sollteste in VB-Foren finden.

Verfasst: 16.01.2007 21:39
von Kaeru Gaman
verschoben