C# 如何使用PC喇叭發出聲音

C# 如何使用PC喇叭發出聲音

今天在研究怎樣使用C#來呼叫PC喇叭發出聲音,這東西可以運用到裝XP Embedded且沒有音效卡的工業電腦上面

由於C#並沒有物件可以供我們使用,所以必須使用Windows API來達到效果

 

我們必須使用 Kernel32.dll 中的 Beep function 來達到功能

MSDN 介紹 : http://msdn.microsoft.com/en-us/library/ms679277(VS.85).aspx

private static extern int Beep(int dwFreq, int dwDuration);

Beep共有兩個參數,說明如下

dwFreq : 發聲頻率 37~32767(0x25~0x7FFF)
dwDuration : 延遲時間 (ms)
 

發出小星星聲音的程式碼如下


using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Beep
{
    class Program
    {
        [DllImport("kernel32.dll")]
        private static extern int Beep(int dwFreq, int dwDuration);

        public enum Music
        {
            Do = 523,
            Re = 587,
            Mi = 659,
            Fa = 698,
            So = 784,
            La = 880,
            Ti = 988,
            Do2 = 1046
        }

        static void Main(string[] args)
        {
            Beep((int)Music.Do, 300);
            Beep((int)Music.Do, 300);
            Beep((int)Music.So, 300);
            Beep((int)Music.So, 300);
            Beep((int)Music.La, 300);
            Beep((int)Music.La, 300);
            Beep((int)Music.So, 600);

            Beep((int)Music.Fa, 300);
            Beep((int)Music.Fa, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Re, 300);
            Beep((int)Music.Re, 300);
            Beep((int)Music.Do, 600);

            Beep((int)Music.So, 300);
            Beep((int)Music.So, 300);
            Beep((int)Music.Fa, 300);
            Beep((int)Music.Fa, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Re, 600);

            Beep((int)Music.So, 300);
            Beep((int)Music.So, 300);
            Beep((int)Music.Fa, 300);
            Beep((int)Music.Fa, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Re, 600);

            Beep((int)Music.Do, 300);
            Beep((int)Music.Do, 300);
            Beep((int)Music.So, 300);
            Beep((int)Music.So, 300);
            Beep((int)Music.La, 300);
            Beep((int)Music.La, 300);
            Beep((int)Music.So, 600);

            Beep((int)Music.Fa, 300);
            Beep((int)Music.Fa, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Mi, 300);
            Beep((int)Music.Re, 300);
            Beep((int)Music.Re, 300);
            Beep((int)Music.Do, 600);

        }
    }
}

 

===========================這是簽名檔分隔線==============================
我沒有甚麼技術能力
不過卻希望在這邊跟大家分享自己遭遇的一些問題
希望大家有更好的方法可以跟我說!!
======================================================================