Hallo,
ich hab mal wieder ein Problem und zwar habe in ein simples Arcade-Spiel programmiert welches selbstverständlich auch Soundeffekte in Form von .wav-Dateien benutzt.
Diese Spiele ich mir der API MCISendString bzw. "mciSendStringA" ab. Ich habe mich bewusst gegen die "sndPlaySoundA" API entschieden, da diese (meines wissens anch) nicht in der Lage ist mehrere Soundeffekte gleichzeitig abzuspielen.
Mit MCI setze ich einen Alias, damit ich eben mehrere Sounds gleichzeitig abspielen kann, was soweit auch gut klappt.
Jetzt zum Problem:
Wenn ich mein Spiel eien weile Spiele und viele Soundeffekte erzeugt werden, setzt irgendwann (nach ca 1800 Effekten) der Sound aus. Die Hintergrundmusik die ich als MP3 mit der gleichen API abspiele bleibt jedoch.
Der Code:
Die Funktion
Public Declare Function MCISendString Lib "winmm.dll" Alias "mciSendStringA"
(ByVal lpszCommand As String, ByVal lpszReturnString As String, ByVal _
cchReturnLength As Long, ByVal hwndCallback As Long) As Long
Public Declare Function GetShortPathName Lib "kernel32" Alias _
"GetShortPathNameA"
(ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer _
As Long) As Long
Public Sub Sound(ByVal File As String, ByVal Alias As String)
Dim Buffer As String
Dim Result As Long
If Sounds = True Then
Buffer = Space$(255)
If DebugMode = True Then
File = "..\Sounds\" & File
Else
File = App.Path & "\Data\Sounds\" & File
End If
Result = GetShortPathName(File, Buffer, Len(Buffer))
If Result <> 0 Then
File = Left$(Buffer, InStr(Buffer, vbNullChar) - 1)
If DebugMode = True Then
If MCISendString("open " & File & " type WaveAudio alias " & _
Alias, 0, 0, 0) = 0 Then
MCISendString "play " & Alias & " from 0", 0, 0, 0
End If
Else
If MCISendString("open " & File & " type WaveAudio alias " & _
Alias, 0, 0, 0) = 0 Then
MCISendString "play " & Alias & " from 0", 0, 0, 0
End If
End If
End If
SoundAliasID = SoundAliasID + 1
frmMain.Caption = SoundAliasID
End If
End SubDer Aufruf:
Call Sound("damage2.wav", "Damage2" & SoundAliasID)Wenn ich das Spiel in der ENtwicklungsumgebung teste kann ich, nachdem der Sound ausgesetzt hat auch keine EXE mehr kompilieren. Es erscheint stattdessen folgende Meldung:
http://thief.ts-tk.de/_images/fehlermeldung.png
Wenn ich VB6 neu starte, geht jedoch alles wieder.
Weiß jemand worans liegt? |