Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks
Autor
Nachricht
Rausch_
Poster
Poster

Anmeldedatum: 03.11.2007
Beiträge: 164

[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
Code:

sndPlaySound Environ("temp") & "\test.wav", SND_ASYNC


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.

Code:

WMP.URL = Environ("temp") & "\test.mp3"
WMP.Controls.stop


so jetzt zu command3_click:

Code:

WMP.Controls.play


und noch bei form_unload

Code:

Kill Environ("temp") & "\test.mp3"



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!

beispielprojekt-download:
http://rapidshare.com/files/81282227/Musik_u.Sound.zip.html

mfg

€ by r4z3r - bewertet mit 9 Punkten

_________________


Zuletzt bearbeitet von Rausch_ am 04.01.2008, 21:52, insgesamt einmal bearbeitet
 
Blue!Sky!_
Coder
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 »<b><font color=green>« Moderator »</font



Anmeldedatum: 17.06.2007
Beiträge: 389


Verfasst am: 04.01.2008, 23:02

Sehr schönes _Tutorial Very Happy

Ganz schon umständlich in VB6, vielleicht zeige ich euch mal wie leicht das unter .NET geht Laughing

MfG
Marduk
 
ZiG_
Überflieger
Ü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
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
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
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 Wink 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
 
End If
Dim strOldFile As String

    strOldFile = Environ("TEMP") & "\song.mp3"

    Kill strOldFile






-zum Beenden des Songs :

Code:
mciSendString "stop MyMP3", 0, 0, 0
mciSendString "close MyMP3", 0, 0, 0

_________________
MFG RaG3
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks

Tags: sound, musik, sndplaysound, stoppen

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Problem mit always on top funktion 1038 30.10.2009, 11:26
Keine neuen Beiträge IntStr()funktion 1176 11.10.2007, 08:49
Keine neuen Beiträge TopMost Funktion unter DirectX 921 27.07.2007, 10:48
Keine neuen Beiträge Wie Funktion nutzen ? 1098 29.06.2007, 20:59
Keine neuen Beiträge update funktion einbauen 1341 28.01.2007, 23:11
 



[ Time: 0.4269s ][ Queries: 105 (0.1607s) ][ GZIP on - Debug on ]