電腦內建的Windows Media Player一直是年久不衰的播放軟體,
廢話不多說,簡單說明一下如何在Windows Form裡面加入Windows Media Player元件
Step1: 從工具箱 選擇項目
Step3: 接下來我們可以從工具箱中找到這個Windows Media Player元件,將它拖曳到專案內
就可以開始使用。我們可以看到在右邊綠色框框中,自動產生了AxInterop.WMPLib與Interop.WMPLib元件
基本上這樣就算完成
我們可以透過下面簡單的指令,讓這個Player可以開始播放音樂:
this.axWindowsMediaPlayer1.URL = string.Format(@"C:\Users\Jerry\Desktop\What is love.mp3");
我們也可以透過ListBox點了之後,就開始播放,像我就習慣把我喜歡的歌放在一個資料夾內
這裡是用E:\mmusic\ 資料夾
listBox5點選切換事件
private void listBox5_SelectedIndexChanged(object sender, EventArgs e)
{
this.axWindowsMediaPlayer1.URL = string.Format(@"E:\mmusic\" + listBox5.SelectedItem);
}
進入點:
private void Form1_Load(object sender, EventArgs e)
{
MusicPlayer_initial();
}
狀態用途,後面會再提到
private void MusicPlayer_initial()
{
MusicFolderRefresh();
axWindowsMediaPlayer1.PlayStateChange += player_PlayStateChange;
}
目錄內所有mp3檔案倒進listBox5
public void MusicFolderRefresh()
{
listBox5.Items.Clear();
string[] tempMusicFile;
string path = @"E:\mmusic\";
//tempMusicFile = Directory.GetDirectories(path);
tempMusicFile = Directory.GetFiles(path, "*.mp3");
foreach (string iii in tempMusicFile)
{
listBox5.Items.Add(Path.GetFileName(iii));
}
}
顯示畫面:
重複與隨機功能:
在介紹這個功能之前,要先說明下工作狀態
WMPLibrary裡面有播放器的狀態,從字面上可以看出他的各種意思
wmppsUndefined | Windows Media Player is in an undefined state. |
wmppsStopped | Playback is stopped. |
wmppsPaused | Playback is paused. |
wmppsPlaying | Stream is playing. |
wmppsScanForward | Stream is scanning forward. |
wmppsScanReverse | Stream is scanning backward. |
wmppsBuffering | Stream is being buffered. |
wmppsWaiting | Waiting for streaming data. |
wmppsMediaEnded | The end of the media item has been reached. |
wmppsTransitioning | Preparing new media item. |
wmppsReady | Ready to begin playing. |
wmppsReconnecting | Trying to reconnect for streaming data. |
wmppsLast | Last enumerated value. Not a valid state. |
資料來源:
https://docs.microsoft.com/zh-tw/windows/desktop/api/wmp/ne-wmp-wmpplaystate
這裡目前只會使用到wmppsStopped,因為我們的目的是重複播放與隨機播放,所以我們只看結束的那一刻.....
隨機播放:
利用Random產生1~list內項目的數,並透過listBox5.SetSelected(i, true); 使ListBox自動再觸發其他項目來達到隨機循環。
private void player_PlayStateChange(object sender,
AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
try
{
if (axWindowsMediaPlayer1.playState ==
WMPLib.WMPPlayState.wmppsStopped)
{
if (cbx_RepeatMusic.Checked)
{
if (cbx_RandomMusic.Checked)
{
Random rnd = new Random(Guid.NewGuid().GetHashCode());
int i = rnd.Next(1, listBox5.Items.Count);
listBox5.SetSelected(i, true);
}
else
{
axWindowsMediaPlayer1.Ctlcontrols.play();
}
}
}
}
catch (Exception exx)
{
MessageBox.Show(exx.Message + exx.StackTrace);
}
}
之前用到的狀態事件用途,可以讓播放器透過簡單的事件來回傳狀態:
_WMPOCXEvents_PlayStateChangeEvent
當Repeat選了之後觸發play,讓Player再播放一次
axWindowsMediaPlayer1.Ctlcontrols.play();
除了Play() //執行
還有其他功能
fastForward(); //向前快轉
fastReverse(); //反向快轉
先這樣,後續會再整理這篇....
Source code之後會更新到GitHub 等我摸熟再整理囉XDD
可能的延伸應用:
1. 針對音樂自訂播放大小聲,比如說哪首歌音量為80,其他為100,就可以防止爆音傷害耳朵XDD