Avatar billede canzer Nybegynder
11. januar 2005 - 21:55 Der er 16 kommentarer

Lydafspilning i VB program - Virker ikke

Hey allesammen

Jeg er MEGET ny til VB og har ikke lige tid til at læse mig 300 siders bog igennem da jeg har en opgave jeg skal aflever imorgen :S så here it goes!

Jeg har et program hvor jeg skal afspille en lydfil der hedder cash.wav

Min decleration på det hedder:

Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
  Const SND_SYNC = &H0
  Const SND_ASYNC = &H1
  Const SND_NODEFAULT = &H2
  Const SND_LOOP = &H8
  Const SND_NOSTOP = &H10

(fundet på msdn)

selve funktion tingen hedder:

Private Sub Timer1_Timer()
SoundName$ = "\cash.wav"
  wFlags% = SND_ASYNC Or SND_NODEFAULT
  x% = sndPlaySound(SoundName$, wFlags%)
  MsgBox "Så Drikker Vi!"
End Sub


Men når jeg trykker start siger den at SoundName$ er invalid variabel... har prøvet uden $ men virker heller ik :s nogen der kan hjælpe mig!?
11. januar 2005 - 21:58 #1
Jeg bruger selv følgende funktion, som tager forbehold for forskellige operativsystemer:

#If Win32 Then      'Kontroller operativsystem, således at det rigtige API kaldes
    Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _
        (ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long
#Else
    Declare Function sndPlaySound Lib "MMSYSTEM.DLL" _
        (ByVal lpszSoundName As Any, ByVal wFlags As Integer) As Integer
#End If

Enum sndConst
    sndSYNC = 0      ' Vent indtil lyden er færdigafspillet
    sndASYNC = 1    ' Vent IKKE på afslutning
    sndNODEFAULT = 2 ' Spil ingen standardlyd, hvis lyden ikke findes
    sndMEMORY = 4
    sndLOOP = 8      ' Spil lyden igen og igen indtil ny sndPlaySound-kald
    sndNOSTOP = 16  ' Afbryd ikke en spillende lyd
End Enum

Global SoundBuffer As String


Eks:
Public Sub PlaySound(FileName As String, sndConstant As sndConst)
    Call sndPlaySound(FileName, sndConstant)
End Sub
11. januar 2005 - 22:03 #2
Skal du ikke angive den fulde sti til filen?

Husk også at erklære SoundName$ og wFlags%
Avatar billede canzer Nybegynder
11. januar 2005 - 22:05 #3
Ved det ikke :S det er lidt det jeg forsøger/håber at få hjælp til at finde ud af :)

Evt hvis i ku skrive hvad der skal skrives :S sidder og er temlig presset pt nemlig..
11. januar 2005 - 22:12 #4
har lige checket...du SKAL angive den fulde sti til lydfilen.

Prøv denne (ret stien):

Private Sub Timer1_Timer()
Dim SoundName$ as String
Dim wFlags% as Long
SoundName$ = "C:\DitProgram\cash.wav"
  wFlags% = SND_ASYNC Or SND_NODEFAULT
  x% = sndPlaySound(SoundName$, wFlags%)
  MsgBox "Så Drikker Vi!"
End Sub
Avatar billede canzer Nybegynder
11. januar 2005 - 22:26 #5
hmm... nu siger den at der er fejl i

Dim SoundName$ as String
Dim wFlags% as Long

... ? :S
11. januar 2005 - 22:28 #6
fjern $ og % alle steder (de er heller ikke nødvendige, når du erklærer dem explicit)

Private Sub Timer1_Timer()
Dim SoundName as String
Dim wFlags as Long
SoundName = "C:\DitProgram\cash.wav"
  wFlags = SND_ASYNC Or SND_NODEFAULT
  call sndPlaySound(SoundName$, wFlags)
  MsgBox "Så Drikker Vi!"
End Sub
Avatar billede canzer Nybegynder
11. januar 2005 - 22:31 #7
oki, det ser ud til at virke, men nu er der en anden fejl :S den siger "Cant find DLL entry point sndPlaySound in winmm.dll :S?
11. januar 2005 - 22:34 #8
hmm...jeg kan se, at jeg manglede at fjerne et $ i SoundName$ i 3. sidste linie. Har du selv husket at fjerne den?

Jeg ved ikke om det har noget betydning?
Avatar billede canzer Nybegynder
11. januar 2005 - 22:35 #9
nej :( desværre! - kan ikke forstå det med dll entry point...
11. januar 2005 - 22:37 #10
bruger du min eller din egen declaration? Måske er det netop det med operativsystemet?
Avatar billede canzer Nybegynder
11. januar 2005 - 22:38 #11
min egen - har win xp ..
11. januar 2005 - 22:40 #12
hmm, ja så burde din egen også virke.

Kan du paste hele din kode her?
Avatar billede canzer Nybegynder
11. januar 2005 - 22:43 #13
Option Explicit
Dim Drik As Long
' Denne "declaration" er det der afspiller lydfilen, det er den der sætter den igang når timeren har kørt en omgang.
Private Declare Function sndPlaySound Lib "winmm.dll" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
  Const SND_SYNC = &H0
  Const SND_ASYNC = &H1
  Const SND_NODEFAULT = &H2
  Const SND_LOOP = &H8
  Const SND_NOSTOP = &H10


Private Sub Command1_Click()
If Command1.Caption = "Start" Then
Command1.Caption = "Stop"
    Do While Command1.Caption = "Stop"
'Her har jeg så deffineret hvor meget tid der skal være hvis man vælger de forskellige sværhedsgrader, fx får man 150 sekunder mere mellem hvert "Dong" hvis man vælger første sværhedsgrad
Drik = 0
    If lvl1.Value = True Then Drik = Drik + 15000
    If lvl2.Value = True Then Drik = Drik + 10000
    If lvl3.Value = True Then Drik = Drik + 5000
    If lvl4.Value = True Then Drik = Drik + 1000
   
    If lvl5.Value = True Then Drik = Drik + 100
    If lvl6.Value = True Then Drik = Drik + 15000
    If lvl7.Value = True Then Drik = Drik + 10000
   
'Her er så min timer funktion, den bliver aktiveret når jeg drikker på knappen start og "Drik" starter
Timer1.Interval = Drik
    Timer1.Enabled = True
DoEvents
Loop
Else
    Command1.Caption = "Start"
Timer1.Enabled = False

End If
End Sub


Private Sub Timer1_Timer()
Dim SoundName As String
Dim wFlags As Long
SoundName = "C:\Programmering\cash.wav"
  wFlags = SND_ASYNC Or SND_NODEFAULT
  Call sndPlaySound(SoundName, wFlags)
  MsgBox "Så Drikker Vi!"
End Sub


Se venligst bort fra at det er lidt underligt men :) sådan er Programmering C i Gymnasiet :D
11. januar 2005 - 22:51 #14
Det lyder ellers som et muntert program :o)

Måske er din dll beskadiget. Prøv at erstat den med denne:
http://www.makeiteasy.dk/eksempler/Eksperten/winmm.dll

NB: Husk at tage backup af din egen!
Avatar billede canzer Nybegynder
11. januar 2005 - 22:56 #15
Oki, prøvet nu - samme problem :(

Kan du få det til at virke hvis du sætter koden ind? - har lagt det her http://www.canz.dk/Programmering.rar
11. januar 2005 - 23:17 #16
kan ikke umiddelbart få det til at virke.
Jeg er desværre nødt til at løbe nu, da min datter pludselig har kastet op i sin seng.
Jeg vender tilbage i morgen tidlig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester