[Text] Musik und Sound Verfasst am: 04.01.2008, 21:30
so jetzt zeige ich wie man musik in sein programm bringt:
inhalt:
- 1.ressourceneinbindung
- 2.abspielen von .wav dateien
- 3. .wav dateien direkt aus der ressource abspielen
- 4. andere musik-files abspielen
1.Ressourceneinbindung
als erstes muss ja mal mal die musik in unser programm, also binden wir sie als ressource ein:
klicke auf add-ins
klicke auf add-in-manager...
wähle vb 6 ressourcen-editor
klicke auf laden/entladen
klickt auf ok
klickt auf das icon des ress.-manager
nun klickt auf benuzerdefinierte ressource einbinde...
und fügt eine .wav eurer wahl hinzu.
wiederhohlt das mit einer .mp3
!!speichert die ressource unbedingt!!
2.Abspielen von .wav dateien
erstmal ordnen wir auf unserer form 3 buttons an und beschriften sie mit "Wave entpacken und Abspielen", "Wave direkt aus der Ressource abspielen" und "MP3 enpacken und abspielen"
so wie spielen wir das jetzt ab?
mit sndPlaySound!
wir klicken auf unsere form an und schreiben folgenden code hinnein.
Code:
Option Explicit
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
lpszSoundName = die datei die abgespielt werden soll
uFlags = abspielmodus, die verschiedenen modi schreiben wir jetzt in ein neues modul(da kommt später noch mehr rein):
Code:
Option Explixit
Public Const SND_ALIAS = &H10000 ' der angegebene Name muss ein Eintrag aus der Win.ini unter [Sounds] sein
Public Const SND_ALIAS_ID = &H110000 ' der angegebene Name muss ein Key aus der Win.ini unter [Sounds] sein
Public Const SND_APPLICATION = &H80 ' der angegebene Name ist ein Ereignissound
Public Const SND_ASYNC = &H1 ' Stoppt die Wiedergabe aller Sounddateien, um diese abzuspielen
Public Const SND_FILENAME = &H20000 ' der angegebene Name ist ein Pfad zu einer Wave-Datei
Public Const SND_LOOP = &H8 ' wiederholt unendlich oft die Wiedergabe
Public Const SND_MEMORY = &H4 ' der angegebene Name ist ein Byte Array mit den Wave-Datei-Daten
Public Const SND_NODEFAULT = &H2 ' spielt keinen Standardsound ab wenn die angegebene Datei nicht gefunden wird
Public Const SND_NOSTOP = &H10 ' stoppt keine momentan laufenden Sounds
Public Const SND_NOWAIT = &H2000 ' wartet nicht auf das Beenden des laufenden Sounds um dann den angegebenen Sound abzuspielen
Public Const SND_PURGE = &H40 ' stoppt die unendliche Wiedergabe der Sounds, die mit SND_LOOP eingeleitet wurde
Public Const SND_RESOURCE = &H40004
Public Const SND_SYNC = &H0 ' die Funktion kehrt erst nach Beenden der Wiedergabe des Sounds zurück
wir nehmen SND_ASYNC.
aber ereinmal müssen wir die ressource entpacken.
diesen code fügen wir in unser Form_Load ereignis ein:
Code:
Dim buffer() As Byte
buffer = LoadResData(101, "CUSTOM")
Open environ("temp") & "\test.wav" For Binary As #1
Put #1, , buffer
Close #1
der code entpackt die ressource nach environ("temp"), das ist temp-verzeichnis des computers.
jetzt spielen wir das ganze ab, der code kommt in command1_click
so jetzt probieren wir das aus, und siehe da es funkoniert!
jetzt wollen wir aber das das ganze auch wieder gelöscht wird.
Code:
Private Sub Form_Unload(Cancel As Integer)
Kill Environ("temp") & "\test.wav"
End Sub
wenn die form beendet wird löscht sie die datei wieder.
3. .wav dateien direkt aus der ressource abspielen
als erstes fügen wir in unser modul noch das ein:
Code:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias _
"sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Public mSoundArray() As Byte
Public Sub PlayWaveRes(ByVal Id As Long)
Dim Ret As Long
mSoundArray = LoadResData(Id, "CUSTOM")
Ret = sndPlaySound(mSoundArray(0), SND_ASYNC Or _
SND_NOWAIT Or SND_NODEFAULT Or SND_MEMORY)
End Sub
was ist das den? deklarieren wir schon wieder sndPlaySound?
nein es ist eine etwas andere deklaration, damit wir die datei aus der ress. abspielen können.
so und jetzt fügen wir bei command2_click noch ein:
Code:
PlayWaveRes (101)
das probieren wir jetzt auch mal: Hura es geht, ganz ohne entpacken!
4. andere musik-files abspielen
dazu benötigen wir den windows media player.
wir klicken mit rechts auf die werkzeugsammlung, und wählen komponenten.
mache einen haken vor windows media player und drücke übernehmen.
jetzt erscheint das media player dings in unserer werkzeugliste, und wir ziehen es auf unsere form,
und nenen es um in WMP.
wir sehen jetzt diese schltfläche von media player.
da wir aber nicht wollen, das der benuzer das auch sieht, stellen wir die visible eigenschaft auf false.
auch hier muss das lied erst entpackt werden, also kommt bei form_load noch hin:
Code:
buffer2 = LoadResData(102, "CUSTOM")
Open Environ("temp") & "\test.mp3" For Binary As #2
Put #2, , buffer2
Close #2
jetzt übergeben wir dem WMP das pfad zur musik-datei, und er dann gleich anfängt zu spielen
stoppen wir die wiedergabe gleich danach wieder.
HINWEIS:
die datei wird natürlich dann auch demendsprechend groß!
also nicht das ihr in irgendwelche mini 50kb projekte noch 5 mb musik draufpackt.
so das wars auch schon , ich hoffe ihr habt viel spaß damit!
mfg
€ by r4z3r - bewertet mit 9 Punkten _________________
Zuletzt bearbeitet von Rausch_ am 04.01.2008, 21:52, insgesamt einmal bearbeitet
Blue!Sky!_ Coder
Anmeldedatum: 06.10.2007 Beiträge: 227
Verfasst am: 04.01.2008, 21:44
wow danke das hab ich gesucht... vielen vielen dank sehr sehr schönes tutorial _________________
Marduk_ « Moderator »
Anmeldedatum: 17.06.2007 Beiträge: 389
Verfasst am: 04.01.2008, 23:02
Sehr schönes _Tutorial
Ganz schon umständlich in VB6, vielleicht zeige ich euch mal wie leicht das unter .NET geht
MfG
Marduk
ZiG_ Überflieger
Anmeldedatum: 07.03.2007 Beiträge: 1248
Verfasst am: 05.01.2008, 11:52
Sehr schön gemachtes tutorial.
Ich weiß wieviel Arbeit es ist ein größeres Tutorial zu schreiben und man sieht dass du dir viel Mphe gegeben hast.
Noch ein Tipp von mir an alle Leute die sich z.B. einen eigenen mp3 player basteln wollen.
Ein wirklich ganz tolles Projekt für sowas nennt sich "Bass".
Laden könnt ihr die dll auf www.un4seen.com .
mfg, ZiG _________________ Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
Devil234_ Tutorial Leser
Anmeldedatum: 14.03.2007 Beiträge: 26
Verfasst am: 06.01.2008, 10:31
Code:
3. .wav dateien direkt aus der ressource abspielen
als erstes fügen wir in unser modul noch das ein:
Code:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias _
"sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Public mSoundArray() As Byte
Public Sub PlayWaveRes(ByVal Id As Long)
Dim Ret As Long
mSoundArray = LoadResData(Id, "CUSTOM")
Ret = sndPlaySound(mSoundArray(0), SND_ASYNC Or _
SND_NOWAIT Or SND_NODEFAULT Or SND_MEMORY)
End Sub
was ist das den? deklarieren wir schon wieder sndPlaySound?
nein es ist eine etwas andere deklaration, damit wir die datei aus der ress. abspielen können.
so und jetzt fügen wir bei command2_click noch ein:
Code:
PlayWaveRes (101)
das probieren wir jetzt auch mal: Hura es geht, ganz ohne entpacken!
Wie kann ich die Musik bei dem Bsp. wieder stoppen ??? (z.B. mit einen Button?)
mfg
devil234
Rausch_ Poster
Anmeldedatum: 03.11.2007 Beiträge: 164
Verfasst am: 07.01.2008, 20:43
öhm weiß ich jetzt grad net, aber wenn du se net unbedingt aus der ressource abspielen willst, entpack den sound doch, und spiel ihn dann mit dem media player. _________________
RaG3!_ Poster
Anmeldedatum: 26.07.2007 Beiträge: 104
Verfasst am: 07.01.2008, 20:52
Hatte vor zwei Wochen auch mal Musik in mein Projekt eingefügt, hatte mit auch überlegt ein tutorial zu verfassen. Rausch war schneller Ist ein gutes Tutorial.
@Devil234
Ich hatte in meinem Programm eine mp3 - Datei in den Resourcen.
Da sah das ganze so aus.
Code:
Private 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
Code:
Dim buffer() As Byte
buffer = LoadResData(102, "CUSTOM")
Open Environ("TEMP") & "\song.mp3" For Binary As #1
Put #1, , buffer 'buffer() wird in die geöffnete datei geschrieben
Close #1
If mciSendString("open " & Environ("TEMP") & "\song.mp3" & _
" type MPEGVideo alias MyMP3", 0, 0, 0) = 0 Then
' MP3 abspielen
mciSendString "play MyMP3 from 0", 0, 0, 0