Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0017: WAV-Datei mittels API abspielen

 von 

Beschreibung 

Um einen Sound in Form von einer Audio-Datei abspielen zu können, ist dies eine der elegantesten und speicherschonensten Versionen.

Ergänzung am 15. Oktober 2002:
Jetzt funktioniert der Tipp auch, wenn im Ordnernamen Leerzeichen enthalten sind.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

GetShortPathNameA (GetShortPathName), PlaySoundA (PlaySound)

Download:

Download des Beispielprojektes [9,53 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1"

Option Explicit

'Deklaration: Globale Form API-Konstanten
Private Const SND_ASYNC As Long = &H1&
Private Const SND_FILENAME As Long = &H20000
Private Const SND_NODEFAULT As Long = &H2&

Private Const MAX_PATH As Long = 260&

'Deklaration: Globale Form API-Funktionen
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" ( _
    ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _
    ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

Private Sub Command1_Click()
    'Deklaration: Lokale Prozedur-Variablen
    Dim lngPuffer As Long
    Dim lngResult As Long

    Dim strSound As String

    strSound = Space$(MAX_PATH)

    GetShortPathName "Sound.wav", strSound, Len(strSound)

    If Len(strSound) > 0 Then
        lngResult = PlaySound(strSound, 0&, SND_ASYNC Or SND_NODEFAULT Or SND_FILENAME)

        If lngResult <> 0 Then
            Me.Caption = "Sound wird abgespielt"
        Else
            Me.Caption = "Sound konnte nicht gespielt werden"
        End If
    End If
End Sub

Private Sub Form_Load()
    'Control-Eigenschaften initialisieren
    Command1.Caption = "Play Sound"
End Sub


'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 13 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Chris am 07.10.2008 um 20:14

Die Funktion hat bei mir nicht funktioniert, aus einem simplen Grund. Warum auch immer wurde im GetShortPathName der String voll geschrieben. Auch wenn das Verzeichnis zu ende war,kam danach ein (nicht anzeigbares) Sonderzeichen und danach Leerstellen. Das abschließende Zeichen hat wohl nicht geklappt *achselzuck* keine Ahnung.

Habe es mit folgendem Code abgefangen:

Dim i As Integer
Dim j As String
Do
i = i + 1
j = Mid(strSound, i, 1)
Loop j <> ""
'i ist jetzt die Stelle, an der das fehlerhafte Abschlusszeichen steht

strSound = Left(strSound,i)


Falls diese Umgehung mit Sicherheit unnötig war, bitte ich um kurze Rückmeldung, warum es nicht geklappt hat. Ich arbeite mit WinXP-VP6Prof, habe das Beispiel 1:1 kopiert, alles so adaptiert und wollte eine im app.path/unterverzeichnis gelegene Datei abspielen, es ging nicht.

Oh ich habe jetzt keinen Abfang gemacht,falls die Abfrage funktioniert hat... :)

MfG

Chris

Kommentar von Bernd Ristau am 10.10.2007 um 12:41

Der Tipp funktioniert im Prinzip auf meinem System, aber es erscheint nur ein Fenster mit der Mitteilung in der Kopfzeile "Sound konnte nicht gespielt werden".
Da ich Anfänger in VB6 bin weiß ich nicht, wie ich dem Programm sagen kann, wo es meine WAV-Datei findet.
Über Hilfe würde ich mich sehr freuen.
Mit freundlichen Grüßen
Bernd Ristau

Kommentar von Christoph Kaser am 29.10.2006 um 20:52

Is meeglich, wenn erst Internet-Download eingebaut wurde. Siehe dazu Tipp 0022 oder 0227.

Kommentar von Stefan Blum am 27.09.2006 um 08:04

Hallo Zusammen,

ist es auck Möglich statt den Sound von der Festplatte zu nehmen, einen von einer website zu verwenden?

GetShortPathName "http://wwwxyz.de/Sound.wav", strSound, Len(strSound)

Kommentar von jürgen schneiderat am 11.08.2004 um 22:41

Wenn ich in einem timer objekt sekündlich eine wave-Datei asyncron abspielen lasse, wird immer wiedermal eine ausgabe verschluckt. ca jede 3te und manchmal auch mehrere hintereinander.
Beim debuigen zeigt lngResult aber immer 1 (sound wird abgespielt)
Wavedatei ist kürzer timerinterval.
Warum?

Kommentar von Naruto am 22.07.2004 um 18:04

Wenn man nur das schreibt:

Option Explicit

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

Private Sub Command1_Click()

PlaySound "C:\beispiel.wav", 0, 1

End Sub


Die 1 am end is der flag. Auf 0 bleibt das programm beim abspielen stehe und bei 1 eben nicht^^

Kommentar von Florian am 01.12.2002 um 22:38

Wenn cih die wav abspiele mit diesem tipp, bleibt das ganze programm stehen, zählt auch keine timer weiter oder schleifen, wie kann ich das ändern??

Kommentar von Edwin am 17.03.2002 um 14:24

Hat jemand eine Ahnung, wieso in VB6.0 der Befehl MMControl1.Command="Back" nicht funktioniert ?

Kommentar von Neuroquila am 11.03.2002 um 15:42

[an Fabian]
hast du schon commondialog1.filename ausprobiert?im normalfall spuckt das control den ganzen pfad aus

Kommentar von Armin Batzelt am 01.09.2001 um 18:22

Hallo
Ich habe VB6 und NT.
Bei mir ist Result nach dem ersten Aufruf immer 259.
Bedeutet das wirklich die Datei ist nicht vorhanden ?
Gibts irgendne Doku über die möglichen Return-Codes von winmm.dll aufrufen ?
Danke für die Hilfe
Armin

Kommentar von Fabian Stern am 07.07.2001 um 19:43

Hallo, habe da mal ne einfache Frage:
Wie kann ich mit dem CommonDialog nur den Pfad herausbekommen.
Er ünterstützt ja sowas wie CommonDialog1.Pfad nicht...
Wäre nett wenn mir da jemand helfen könnte.
Fabian

Kommentar von Max am 02.07.2001 um 18:43

Hallo Frank.
Auf meiner Homepage habe ich da einen Tip dazu.
Dazu ist ab3er DirectX7 benötigt.
www.UBIMAL.de Rubrik Visual Basic und irgendwo unter DirectX muss es sein.
Ciao

Kommentar von Diehl Frank am 19.06.2001 um 14:25

wie kann ich zwei oder mehr sounds gleichzeitig (synchron) abspielen. wäre nett wenn mir da jemand einen tip geben könnte