Gewusst wie: Wiedergeben von Sounds
Aktualisiert: November 2007
In diesem Beispiel wird die Verwendung eines Plattformaufrufs zum Wiedergeben von zwei WAV-Dateien veranschaulicht. Dabei wird eine der Dateien als eingebettete Ressource und die andere als Inhalt wiedergegeben.
Um eine WAV-Datei als eingebettete Ressource in Visual Studio zu implementieren, legen Sie im Bereich Eigenschaften die zugehörige Buildvorgang-Eigenschaft auf "Eingebettete Ressource" fest. Wenn Sie in der Befehlszeile kompilieren, finden Sie unter Gewusst wie: Kompilieren über die Eingabeaufforderung Informationen zum Kompilieren eingebetteter Ressourcen.
![]() |
---|
.NET Compact Framework, Version 3.5, unterstützt SoundPlayer, um Sounds wiederzugeben. Weitere Informationen finden Sie unter SoundPlayer in .NET Compact Framework. |
In diesem Beispiel wird die Sound-Klasse definiert, die mithilfe der CoreDll.dll in Windows CE die folgende systemeigene Codefunktionalität bereitstellt:
Deklarationen für eine Plattformaufrufmethode zum Wiedergeben eines Sounds mithilfe eines Dateinamens oder Dateistreams.
Enumeration von Bitwerten zum Übergeben von Argumenten an den Methodenaufruf zum Plattformaufruf.
Eine Play-Methode, die die korrekte Plattformaufrufmethode zum Wiedergeben einer separaten Datei oder eingebetteten Ressource aufruft.
In diesem Beispiel wird eine Sounddatei mit dem Namen Chimes.wav verwendet. Wenn Sie die Sounddatei als eingebettete Ressource einschließen, müssen Sie den Ressourcenstream für die Datei zurückgeben, indem Sie den Assemblynamespace beim Aufruf von GetManifestResourceStream dem Originaldateinamen voranstellen.
So geben Sie Sounds mithilfe eines Plattformaufrufs wieder
Fügen Sie den Projekten die Sound-Klasse hinzu.
Public Class Sound Private m_soundBytes() As Byte Private m_fileName As String Public Declare Function WCE_PlaySound Lib "CoreDll.dll" Alias "PlaySound" (ByVal szSound As String, ByVal hMod As IntPtr, ByVal flags As Integer) As Integer Public Declare Function WCE_PlaySoundBytes Lib "CoreDll.dll" Alias "PlaySound" (ByVal szSound() As Byte, ByVal hMod As IntPtr, ByVal flags As Integer) As Integer Private Enum Flags SND_SYNC = &H0 ' play synchronously (default) SND_ASYNC = &H1 ' play asynchronously SND_NODEFAULT = &H2 ' silence (!default) if sound not found SND_MEMORY = &H4 ' pszSound points to a memory file SND_LOOP = &H8 ' loop the sound until next sndPlaySound SND_NOSTOP = &H10 ' don't stop any currently playing sound SND_NOWAIT = &H2000 ' don't wait if the driver is busy SND_ALIAS = &H10000 ' name is a registry alias SND_ALIAS_ID = &H110000 ' alias is a predefined ID SND_FILENAME = &H20000 ' name is file name SND_RESOURCE = &H40004 ' name is resource name or atom End Enum ' Construct the Sound object to play sound data from the specified file. Public Sub New(ByVal fileName As String) m_fileName = fileName End Sub ' Construct the Sound object to play sound data from the specified stream. Public Sub New(ByVal stream As Stream) ' read the data from the stream m_soundBytes = New Byte(stream.Length) {} stream.Read(m_soundBytes, 0, Fix(stream.Length)) End Sub 'New ' Play the sound Public Sub Play() ' If a file name has been registered, call WCE_PlaySound, ' otherwise call WCE_PlaySoundBytes. If Not (m_fileName Is Nothing) Then WCE_PlaySound(m_fileName, IntPtr.Zero, Fix(Flags.SND_ASYNC Or Flags.SND_FILENAME)) Else WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, Fix(Flags.SND_ASYNC Or Flags.SND_MEMORY)) End If End Sub End Class
public class Sound { private byte[] m_soundBytes; private string m_fileName; private enum Flags { SND_SYNC = 0x0000, /* play synchronously (default) */ SND_ASYNC = 0x0001, /* play asynchronously */ SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */ SND_MEMORY = 0x0004, /* pszSound points to a memory file */ SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */ SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */ SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */ SND_ALIAS = 0x00010000, /* name is a registry alias */ SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */ SND_FILENAME = 0x00020000, /* name is file name */ SND_RESOURCE = 0x00040004 /* name is resource name or atom */ } [DllImport("CoreDll.DLL", EntryPoint="PlaySound", SetLastError=true)] private extern static int WCE_PlaySound(string szSound, IntPtr hMod, int flags); [DllImport("CoreDll.DLL", EntryPoint="PlaySound", SetLastError=true)] private extern static int WCE_PlaySoundBytes (byte[] szSound, IntPtr hMod, int flags); /// <summary> /// Construct the Sound object to play sound data from the specified file. /// </summary> public Sound (string fileName) { m_fileName = fileName; } /// <summary> /// Construct the Sound object to play sound data from the specified stream. /// </summary> public Sound(Stream stream) { // read the data from the stream m_soundBytes = new byte [stream.Length]; stream.Read(m_soundBytes, 0,(int)stream.Length); } /// <summary> /// Play the sound /// </summary> public void Play () { // if a file name has been registered, call WCE_PlaySound, // otherwise call WCE_PlaySoundBytes if (m_fileName != null) WCE_PlaySound(m_fileName, IntPtr.Zero, (int) (Flags.SND_ASYNC | Flags.SND_FILENAME)); else WCE_PlaySoundBytes (m_soundBytes, IntPtr.Zero, (int) (Flags.SND_ASYNC | Flags.SND_MEMORY)); } }
Fügen Sie Methoden zum Erstellen einer Instanz der Sound-Klasse und zum Wiedergeben einer Datei hinzu, z. B. in einem Click-Ereignis für eine Schaltfläche.
' To return a Stream object associated with an embedded ' resource, you must prepend the namespace to the original ' name of the file in the project. Private Sub btnEmbedded_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEmbedded.Click Dim sound As New Sound([Assembly].GetExecutingAssembly().GetManifestResourceStream("SoundSample.chimes.wav")) sound.Play() End Sub Private Sub btnFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFile.Click Dim sound As New Sound("Program Files\SoundSample\chord.wav") sound.Play() End Sub
// To return a Stream object associated with an embedded // resource, you must prepend the namespace to the original // name of the file in the project. private void btnEmbedded_Click(object sender, System.EventArgs e) { Sound sound = new Sound (Assembly.GetExecutingAssembly().GetManifestResourceStream("SoundSample.chimes.wav")); sound.Play(); } private void btnFile_Click(object sender, System.EventArgs e) { Sound sound = new Sound ("Program Files\\SoundSample\\chord.wav"); sound.Play(); }
Kompilieren des Codes
Für dieses Beispiel sind Verweise auf die folgenden Namespaces erforderlich:
Siehe auch
Konzepte
Gewusst-wie-Themen für .NET Compact Framework