Porady: użycie wywołania platformy do odtwarzania pliku Wave (Przewodnik programowania w języku C#)How to: Use Platform Invoke to Play a Wave File (C# Programming Guide)

Poniższy C# przykład kodu ilustruje sposób używania usług wywołania platformy do odtwarzania pliku dźwiękowego Wave w systemie operacyjnym Windows.The following C# code example illustrates how to use platform invoke services to play a wave sound file on the Windows operating system.

PrzykładExample

Ten przykładowy kod używa DllImportAttribute do importowania winmm.dll``PlaySound punktu wejścia metody jako Form1 PlaySound().This example code uses DllImportAttribute to import winmm.dll's PlaySound method entry point as Form1 PlaySound(). Przykład ma prosty formularz systemu Windows z przyciskiem.The example has a simple Windows Form with a button. Kliknięcie tego przycisku powoduje otwarcie standardowego okna dialogowego OpenFileDialog systemu Windows, w którym można otworzyć plik do odtworzenia.Clicking the button opens a standard windows OpenFileDialog dialog box so that you can open a file to play. Po wybraniu pliku Wave jest on odtwarzany przy użyciu metody PlaySound() biblioteki winmm. dll .When a wave file is selected, it is played by using the PlaySound() method of the winmm.dll library. Aby uzyskać więcej informacji na temat tej metody, zobacz Używanie funkcji PlaySound z plikami Wave-audio.For more information about this method, see Using the PlaySound function with Waveform-Audio Files. Przeglądaj i wybierz plik z rozszerzeniem WAV, a następnie kliknij przycisk Otwórz , aby odtworzyć plik Wave przy użyciu wywołania platformy.Browse and select a file that has a .wav extension, and then click Open to play the wave file by using platform invoke. Pole tekstowe zawiera pełną ścieżkę wybranego pliku.A text box shows the full path of the file selected.

Okno dialogowe otwieranie plików jest filtrowane w celu wyświetlania tylko plików o rozszerzeniu WAV z wykorzystaniem ustawień filtru:The Open Files dialog box is filtered to show only files that have a .wav extension through the filter settings:

dialog1.Filter = "Wav Files (*.wav)|*.wav";
using System.Windows.Forms;
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:\";
            dialog1.Filter = "Wav Files (*.wav)|*.wav";
            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.
        }
    }
}

Kompilowanie koduCompiling the code

  1. Utwórz nowy C# projekt aplikacji Windows Forms w programie Visual Studio i nadaj mu nazwę WinSound.Create a new C# Windows Forms Application project in Visual Studio and name it WinSound.

  2. Skopiuj powyższy kod i wklej go do zawartości pliku Form1.cs .Copy the code above, and paste it over the contents of the Form1.cs file.

  3. Skopiuj poniższy kod i wklej go w pliku Form1.Designer.cs , w metodzie InitializeComponent() po jakimkolwiek istniejącym kodzie.Copy the following code, and paste it in the Form1.Designer.cs file, in the InitializeComponent() method, after any existing code.

    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();
    
  4. Kompiluj i uruchamiaj kod.Compile and run the code.

Zobacz takżeSee also