Compartilhar via


Como: Tocar sons

Este exemplo demonstra sistema autônomo usar invocação de plataforma para executar dois arquivos WAV, um sistema autônomo um recurso inserido e o Outros sistema autônomo conteúdo.

To implement your WAV file as an embedded resource in Visual Studio, in the Properties pane, set its BuildAction property to "Embedded Resource." Se você está compilando na linha de comando, consulte Como: Compilar no aviso de comando Para obter informações sobre compilar um recurso inserido.

Observação:

A versão 3.5 do .NET Compact estrutura oferece suporte SoundPlayer para executar sons.Para obter mais informações, consulte SoundPlayer in the .NET Compact estrutura.

Este exemplo define o Sound classe que fornece a funcionalidade de código nativo a seguir usando CoreDll.dll no Windows CE:

  • Declarações de método para executar um som usando um nome de arquivo ou um fluxo de invocação de plataforma.

  • Uma enumeração de valores de bits para passar argumentos na chamada de método da chamada de plataforma.

  • A Play método que chama a plataforma correta chamar o método para executar um arquivo separado ou recurso inserido.

Este exemplo usa um arquivo de som denominado Chimes.wav.Quando você inclui o arquivo de som sistema autônomo um reurso incorporado, você retornar o fluxo de recurso para o arquivo, anexando ao início do assembly namespace ao nome de arquivo original na telefonar para GetManifestResourceStream.

Para executar sons usando invocação de plataforma

  1. Adicionar o Sound classe para seus projetos.

    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));
        }
    }
    
  2. Adicionar métodos para criar uma instância do Sound classe e para executar um arquivo, sistema autônomo em um botão Click evento.

    ' 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();
    }
    

Compilando o código

Este exemplo requer referências aos seguintes namespaces:

Consulte também

Conceitos

Tópicos "como" do .NET compact estrutura

Outros recursos

Interoperabilidade no .NET Compact Framework