Dela via


Använda plattformsanrop för att spela upp en WAV-fil

Följande C#-kodexempel illustrerar hur du använder plattformsanropstjänster för att spela upp en WAV-ljudfil i Windows-operativsystemet.

Exempel

Den här exempelkoden använder DllImportAttribute för att importera winmm.dllmetodens PlaySound startpunkt som Form1 PlaySound(). Exemplet har ett enkelt Windows-formulär med en knapp. Om du klickar på knappen öppnas en standardfönsterdialogruta OpenFileDialog så att du kan öppna en fil som ska spelas upp. När en vågfil har valts spelas den PlaySound() upp med hjälp av metoden för winmm.dll-biblioteket . Mer information om den här metoden finns i Använda funktionen PlaySound med Waveform-Audio Files. Bläddra och välj en fil som har ett .wav-tillägg och välj sedan Öppna för att spela upp vågfilen med hjälp av plattformsanrop. En textruta visar den fullständiga sökvägen till den markerade filen.

using System.Runtime.InteropServices;

namespace WinSound;

public partial class Form1 : Form
{
    private TextBox textBox1;
    private Button button1;

    public Form1()  // Constructor.
    {
        InitializeComponent();
    }

    [DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
    private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);

    [System.Flags]
    public enum PlaySoundFlags : int
    {
        SND_SYNC = 0x0000,
        SND_ASYNC = 0x0001,
        SND_NODEFAULT = 0x0002,
        SND_LOOP = 0x0008,
        SND_NOSTOP = 0x0010,
        SND_NOWAIT = 0x00002000,
        SND_FILENAME = 0x00020000,
        SND_RESOURCE = 0x00040004
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
        var dialog1 = new OpenFileDialog();

        dialog1.Title = "Browse to find sound file to play";
        dialog1.InitialDirectory = @"c:\";
        //<Snippet5>
        dialog1.Filter = "Wav Files (*.wav)|*.wav";
        //</Snippet5>
        dialog1.FilterIndex = 2;
        dialog1.RestoreDirectory = true;

        if (dialog1.ShowDialog() == DialogResult.OK)
        {
            textBox1.Text = dialog1.FileName;
            PlaySound(dialog1.FileName, new System.IntPtr(), PlaySoundFlags.SND_SYNC);
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // Including this empty method in the sample because in the IDE,
        // when users click on the form, generates code that looks for a default method
        // with this name. We add it here to prevent confusion for those using the samples.
    }
}

Dialogrutan Öppna filer filtreras för att endast visa filer som har ett .wav-tillägg via filterinställningarna.

Kompilera koden

Skapa ett nytt C# Windows Forms Application-projekt i Visual Studio och ge det namnet WinSound. Kopiera föregående kod och klistra in den över innehållet i den Form1.cs filen. Kopiera följande kod och klistra in den i filen Form1.Designer.cs i InitializeComponent() -metoden efter eventuell befintlig kod.

this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(192, 40);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(88, 24);
this.button1.TabIndex = 0;
this.button1.Text = "Browse";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(8, 40);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(168, 20);
this.textBox1.TabIndex = 1;
this.textBox1.Text = "File path";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Platform Invoke WinSound C#";
this.ResumeLayout(false);
this.PerformLayout();

Kompilera och kör koden.

Se även