Zi 字媒體
2017-07-25T20:27:27+00:00
使用C#播放音效(提示聲音)的4種方式
資料來源: https://blog.kkbruce.net/2019/03/csharpformusicplay.html#.YNUtk-gzaUk
https://dotblogs.com.tw/hung-chin/2012/03/31/71186
01.Win32 API Beep
[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
}
// 小蜜峰
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);
02.SystemSounds 類別
//系統音效
SystemSounds.Asterisk.Play();
SystemSounds.Beep.Play();
SystemSounds.Exclamation.Play();
SystemSounds.Hand.Play();
SystemSounds.Question.Play();
03.SoundPlayer 類別 [WAV檔案]
using System.Media;
SoundPlayer player = new SoundPlayer();
player.SoundLocation = "媒體檔案路徑01";
player.LoadAsync();
player.PlaySync();
player.SoundLocation = "媒體檔案路徑02";
player.Load();
player.PlaySync();
04.WMPLib.dll [mp3檔案]
//01.先加入參考 Windows Media Player的COM元件
//02.程式開頭 加上
using WMPLib;
//03.實際完整程式碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Reflection;
using WMPLib;
namespace ResourceMP3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ResourceMP3.tada.mp3"); //命名空間.mp3檔名
using (Stream output = new FileStream(Path.Combine(Application.StartupPath, "temp.mp3"), FileMode.Create))
{
byte[] buffer = new byte[32 * 1024];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}
wmp.PlayStateChange += new _WMPOCXEvents_PlayStateChangeEventHandler(wmp_PlayStateChange);
wmp.URL = Path.Combine(Application.StartupPath, "temp.mp3");
wmp.settings.volume = 100;
wmp.controls.play();
}
void wmp_PlayStateChange(int NewState)
{
if ((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsStopped)
{
this.Close();
}
}
private void Form1_Shown(object sender, EventArgs e)
{
if (File.Exists(Path.Combine(Application.StartupPath, "temp.mp3"))==true)
{
File.Delete(Path.Combine(Application.StartupPath, "temp.mp3"));
}
}
}
}
心得: 我會選擇02和03方案
寫了
5860316篇文章,獲得
23313次喜歡