/ / mciSendString / winmm.dll - Prehrávanie audio súboru - vb.net, visual-studio-2008, audio

mciSendString / winmm.dll - Prehrávanie zvukového súboru - vb.net, visual-studio-2008, audio

Pracujem na programe v jazyku Visual Basic 2008, som povinný mať rôzne typy zvukov s rôznymi objemami. Preto My.Computer.Audio.Play nie je platná voľba.

Rozhodol som sa namiesto toho použiť mciSendString a nájsť nasledujúci kód

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer

mciSendString("close myWAV", Nothing, 0, 0)
Dim fileName1 As String =
mciSendString("open " & fileName1 & " type mpegvideo alias myWAV", Nothing, 0, 0)
mciSendString("play myWAV", Nothing, 0, 0)

"min Volume is 1, max Volume is 1000
Dim Volume As Integer = (SFXVolume * 100)
mciSendString("setaudio myWAV volume to " & Volume, Nothing, 0, 0)

Tento kód som testoval a funguje perfektne, keď názov súboru1 = "C: //Correct.wav"

Avšak keď používam

filename1 = My.Application.Info.DirectoryPath & "Correct.wav"

Nemám žiadnu zvukovú hru.

Mohol by mi niekto pomôcť opraviť kód tak, aby to fungovalo. Vopred ďakujem.

odpovede:

1 pre odpoveď č. 1

Ak tvoj DirectoryPath potom má medzery mciSendString Nebudete schopní rozpoznať príkaz presne, musíte obklopiť cestu úvodzovkami:

mciSendString(
String.Format("open ""{0}"" type mpegvideo alias myWAV", fileName1), Nothing, 0, 0)

Nezabudnite skontrolovať aj vrátený stav, ako to navrhuje Hans.

Tiež, pretože neviete, či DirectoryPath má koncové spätné lomítko, alebo nie, presný spôsob vytvorenia úplnej cesty z adresára a mena je:

fileName1 = System.IO.Path.Combine(My.Application.Info.DirectoryPath, "Correct.wav")

1 pre odpoveď č. 2

použitie Private Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long potom SetCurrentDirectory filepath pred otvorením súboru na prehrávanie. To je pre mňa práca.


0 pre odpoveď č. 3

Musíte použiť DLL volania GetShortPathName vaby mohli prejsť cesty k súborom WINMM.DLL. lpszLongPath je váš úplný reťazec cesty a krátky názov cesty bude odovzdaný lpszShortPath. cchbuffer by mal byť naozaj nastavený na 200 alebo tak, hoci vo väčšine prípadov bude vrátený reťazec oveľa kratší. Mali by ste použiť vypchatý reťazec VB.

Funkcia privátneho deklarácie GetShortPathName Lib "kernel32" Alias ​​"GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer ako dlho)

Práve som použil volania mciSendString v dávkovom midi-file program na čítanie, otvorenie 3642 midi súborov a vrátenie autorských práv, titulov a hier s dĺžkou prehrávania skutočne celkom rýchlo!

S Pozdravom David R Leach