Avatar billede Slettet bruger
19. oktober 2003 - 21:37 Der er 10 kommentarer og
1 løsning

Put en fil i mit program.

Hey hallo...

Jeg ska til at lave et lille joke program og mangle noget kode som gør at jeg kan putte en midi fil ind i mit program og afspille den når programmet starter?

Kan nogle hjælpe med det??

Bruger VB 6.0 Ent.

Hilsen
911help
Avatar billede peter_jensen Nybegynder
19. oktober 2003 - 23:31 #1
Du kan gøre det ved hjælp af DirectX...
Her har jeg lavet en simpel form med 2 CommandButtons..."Afspil" & "Stop"
Du kan sikkert selv regne ud hvad du skal bruge til dit projekt og hvor... =;o)
Ellers spørger du bare.

! HUSK ! Du skal lave en reference til DirectX i dit projekt under menuen
"Project\References", hvor du afkrydser ""DirectX 7 for Visual Basic Type Library"

************HER KOMMER KODEN****************

Option Explicit
Public DX As New DirectX7 'Husk at refererer dette i menuen "References"
Public Loader As DirectMusicLoader 'Dette indlæser midi-filen
Public Preformance As DirectMusicPerformance 'Denne kontrol indeholder musikken
Public Segment As DirectMusicSegment 'Dette indlæser midi-filen i hukommelsen

'Initialisering af alle DirectX objekterne
Sub InitProg()
    Set Loader = DX.DirectMusicLoaderCreate
    Set Preformance = DX.DirectMusicPerformanceCreate
    Preformance.Init Nothing, hWnd
    Preformance.SetPort -1, 1
    Preformance.SetMasterAutoDownload True
End Sub

Private Sub Form_Load()
Dim midifil As String

    Call InitProg 'Initialiser DirectX
    midifil = "c:\Temp\DinMidiFil.mid"
    LoadMIDI midifil 'Indlæs midi
   
    PlayMIDI 'Afspiller din midifil
   
End Sub

Private Sub Afspil_Click()
    PlayMIDI
End Sub

Private Sub Stop_Click()
    StopMIDI
End Sub

Sub LoadMIDI(FileName As String)
    Set Segment = Loader.LoadSegment(FileName) 'Load midi
    If Err.Number <> DD_OK Then MsgBox "Fejl: Kunne ikke loade MIDI fil!", vbExclamation, "FEJL!" 'Fejlmeddelelse til bruger.
End Sub

Sub PlayMIDI()
    Preformance.PlaySegment Segment, 0, 0 'Afspil segment
End Sub

Sub StopMIDI()
    Preformance.Stop Segment, Nothing, 0, 0 'Stop afspilning af midi
End Sub
Avatar billede Slettet bruger
20. oktober 2003 - 14:39 #2
Jeg vil gerne have puttet midi filen ind i mit program... sådan at jeg ikk ska have den læggne låst ved siden af mit program...
Avatar billede Slettet bruger
20. oktober 2003 - 22:43 #3
Har afprøvet dit eksempel...
Avatar billede peter_jensen Nybegynder
20. oktober 2003 - 23:13 #4
Jeg tror godt jeg ved hvad du tænker på nu...
Du skal lave en Ressource-fil i C++, som du så skal refererer til i dit projekt. Når du så compiler dit program, bliver midi-filen embedded i din .exe-fil.
Jeg ved godt hvordan man gør, men jeg kan ikke rigtig få det til at fungere med en midi-fil...desværre kun .wav.
Avatar billede Slettet bruger
21. oktober 2003 - 19:20 #5
Har du noget kode???
Har fundet Resource Editor i VB 6...
Avatar billede peter_jensen Nybegynder
21. oktober 2003 - 20:36 #6
Jepper...her kommer det.

'Denne kode er nogle globale deklariationer som du putter ind i et modul (.bas)

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Public Const SND_SYNC = &H0    ' Afspil synkront (default)
Public Const SND_ASYNC = &H1  ' Afspil asynkront
Public Const SND_MEMORY = &H4  ' Afspil fra Hukommelse (fra en String)
Public Const SND_LOOP = &H8    ' loop afspilning indtil næste sndPlaySound kommando
Public Const SND_NOSTOP = &H10 ' Stop ikke nuværende afspilning

'Herefter sætter du dette ind i en form med 2 Commandbuttons

Option Explicit

Dim Adresse As String
Dim Flag As Long

Private Sub PlayResSound(Res_Id As String, File_Type As String)
    On Error GoTo ErrHand
    Adresse = StrConv(LoadResData(Res_Id, File_Type), vbUnicode)
    sndPlaySound Adresse, Flag
    Exit Sub
ErrHand:
    MsgBox "Kan ikke afspille lyden"
End Sub

Private Sub Command1_Click()
    Flag = SND_ASYNC Or SND_MEMORY
    Call PlayResSound("LYD1", "WAVE")
End Sub

Private Sub Command2_Click()
    Flag = SND_ASYNC Or SND_MEMORY
    Call PlayResSound("LYD2", "WAVE")
End Sub

Private Sub Form_Load()
    Flag = SND_ASYNC Or SND_MEMORY
    Call PlayResSound("LYD1", "WAVE") 'her afspilles lyd 1 ved start af program
End Sub

'HUSK at indsætte din ressource-fil (.res) som et relateret dokument under "project/Add file..."
'Har du problemer med at oprette din ressource-fil med tilhørende .wav, så sig til...god fornøjelse
Avatar billede Slettet bruger
22. oktober 2003 - 17:37 #7
Hra prøvet det, og det virker tak.. :-)
Avatar billede Slettet bruger
22. oktober 2003 - 17:43 #8
Efter følger til det her spm: http://www.eksperten.dk/spm/417402
Avatar billede peter_jensen Nybegynder
22. oktober 2003 - 22:27 #9
Tak for point. Jeg kan ikke svare på dit følgespørgsmål, men det er en ret interessant problemstilling...tror jeg vil følge lidt med hvad der sker =:o)
Avatar billede Slettet bruger
23. oktober 2003 - 13:04 #10
Det er bare iorden... :-)
Avatar billede discotk Nybegynder
24. oktober 2005 - 12:55 #11
kan man også godt bruge denne kode til midi
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