引言
在項目開發(fā)過程中,有時需要用到播放音頻文件。例如,在程序出現(xiàn)異?;虿僮鞒晒r播放特定音效提醒用戶。在C# 中是使用什么方法來播放音效文件,又有幾種方法可以實現(xiàn),本文將介紹幾種實現(xiàn)的方法。
方法
1、播放系統(tǒng)事件的聲音
使用 System.Media 命名空間的 SystemSounds 類,它只能播放系統(tǒng)定義的幾個聲音,如 Question、Beep、Asterisk、Hand、Exclamation。using System;
using System.Media;
namespace Fountain.WinConsole.SoundDemo
{
internal class Program
{
static void Main(string[] args)
{
SystemSounds.Question.Play();
Console.ReadKey();
SystemSounds.Beep.Play();
Console.ReadKey();
SystemSounds.Asterisk.Play();
Console.ReadKey();
SystemSounds.Hand.Play();
Console.ReadKey();
SystemSounds.Exclamation.Play();
Console.ReadKey();
}
}
}
2、使用 SoundPlayer 播放聲音
使用 System.Media 命名空間的 SoundPlayer 類,可以方便地播放wav 類型的聲音文件。方法 | 描述 |
---|
Load | 同步加載聲音文件。 |
LoadAsync | 用新線程加載聲音文件。 |
Play | 用新線程播放聲音文件。 |
PlaySync | 阻塞進程,播放完畢后才會執(zhí)行后面的代碼。 |
PlayLooping | 用新線程循環(huán)播放聲音文件。 |
Stop | 停止播放 |
using System;
using System.Media;
using System.Threading;
namespace Fountain.WinConsole.TextToSpeech
{
internal class Program
{
static void Main(string[] args)
{
#region 用屬性指定聲音文件位置
SoundPlayer soundPlayer = new SoundPlayer();
// 聲音文件在執(zhí)行程序的 Sound 目錄下
soundPlayer.SoundLocation = @"Sound\Error.wav";
// 加載
soundPlayer.Load();
// 阻塞進程,播放完畢后才會執(zhí)行后面的代碼
soundPlayer.PlaySync();
#endregion
#region 在構造方法指定聲音文件位置
SoundPlayer errorSoundPlayer = new SoundPlayer(@"Sound\Error.wav");
// 循環(huán)播放
errorSoundPlayer.PlayLooping();
//
Thread.Sleep(6000);
//停止播放
errorSoundPlayer.Stop();
#endregion
Console.ReadKey();
}
}
}
3、使用Windows API函數(shù)播放
調用外部 winmm.dll 文件,使用其提供聲音播放函數(shù),如 mciSendString 實現(xiàn)對聲音文件的播放,該函數(shù)支持播放 mp3文件。using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
namespace Fountain.WinConsole.TextToSpeech
{
internal class Program
{
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern int mciSendString(string command, StringBuilder returnString, int uReturnLength, int hwndCallback);
static void Main(string[] args)
{
string aliasName = "wavsong";
string wavFileName = @"C:\Error.wav";
//打開一個媒體文件
mciSendString(string.Format("open \"{0}\" alias {1}", wavFileName, aliasName), null, 0, 0);
// 播放媒體
mciSendString(string.Format("play {0}",aliasName), null, 0, 0);
Thread.Sleep(2000);
// 暫停媒體播放
mciSendString(string.Format("pause {0}",aliasName), null, 0, 0);
// 關閉媒體播放
mciSendString(string.Format("close {0}",aliasName), null, 0, 0);
Console.ReadKey();
}
}
}
小結
以上介紹了三種播放音頻文件的方法,當然還有其它方法可以實現(xiàn),這就不逐一提供示例介紹。如使用DirectX、Windows Media Player組件或者三方庫等。
該文章在 2024/7/3 9:29:08 編輯過