Declare Function mciSendString Lib "winmm.dll" Alias _ "mciSendStringA" (ByVal lpstrCommand As String, ByVal _ lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _ hwndCallback As Long) As Long i = mciSendString("open" & App.Path & "Musiikit\Friend.wav type waveaudio alias Friend", 0&, 0, 0) i = mciSendString("play Friend", 0&, 0, 0)
Tuolla koodilla yritin saada soimaan musiikkia, mutten onnistunut. Ylin koodinpätkä on tietysti moduulissa, muut formissa. Kun ajan koodin, ei tapahdu mitään. Mikähän voisi olla ongelman syy? Käytössä on VB 6.
Ainakin open-sanan jälkeen täytyy tulla väli ja hakemistopolun jatketta ennen on oltava kenoviiva. Jos tarkoitus on vain soittaa WAV-tiedosto, käytä ennemmin sndPlaySound-funktiota (lisätietoa haulla).
i = mciSendString("open " & App.Path & "\Musiikit\Friend.wav type waveaudio alias Friend", 0&, 0, 0) i = mciSendString("play Friend", 0&, 0, 0)
Edelleenkään ei toimi, vaikka olen tarkistanut myös että hakemisto \Musiikit\Friend.wav todellakin löytyy.
Funktio on toisinaan nirso tiedostojen nimien suhteen. Muuta soitettavan tiedoston nimi lyhyeen muotoon WinAPIn GetShortPathName-funktion avulla (esimerkki löytyy haulla). Kokeile myös käynnistää kone uudestaan, koska avattuja tiedostoja on saattanut jäädä kummittelemaan muistiin.
Rupesin käyttämään sittenkin sndPlaySound-funktiota, ja sain heti toimimaan. Kinnostaisi vain tietää miten sndPlaySoundilla saa musiikin pysähtymään?
Tuo menetelmä sopii lähinnä lyhyiden ääniefektien soittamiseen, pelin taustamusiikki kannattaa toteuttaa muulla tavalla. Pelin koon pitämiseksi kohtuullisena voisit esimerkiksi tallentaa musiikin MP3-muotoon. Huono idea ei myöskään ole tutustua FMOD-kirjastoon, jonka edellyttämä DLL-tiedosto ei ole hirveän suuri ja jonka mukana tulee valmis esimerkki Visual Basicille.
Aihe on jo aika vanha, joten et voi enää vastata siihen.