Dùng thư viện của Windows Media Player:
I- Liên quan đến Playlist: (Danh sách bài nhạc)Play một bản nhạc, tạo một danh sách... tất cả đều liên quan đến Playlist.
Kiến trúc (Class) cao nhất của lớp Playlist là IWMPPlaylistCollection, là tập hợp toàn bộ Playlist (Collection of Playlist).
[IWMP] là tiếp đầu ngữ của nhóm lớp (Class)
Ta có: WMP---> PlaylistCollection
Dưới PlaylistCollection, phân từng mảng Playlist: IWMPPlaylistArray
Ta có: WMP ---> PlaylistCollection ----> PlaylistArray
Cuối cùng là một Playlist cụ thể.
Ta có: WMP ---> PlaylistCollection ----> PlaylistArray ----> Playlist
Khi ta vẽ lên Form một WMP, vd
WindowsMediaPlayer1, ta đã có công cụ thực hành (application) đứng lớp cao nhất.
Ta chỉ việc khai báo các biến Object theo thứ tự lớp ở trên, và gán cho WindowsMediaPlayer1 dùng:
I)- A- lớp PlaylistCollection: dùng tên biến tùy ý, để dễ phân biệt, tôi dùng tên CollecPlaylist, lần lượt là MangPlaylist và MyPlaylist.
Mã: Chọn hết
Dim CollecPlaylist As IWMPPlaylistCollection ''''' (General) '''''
Set CollecPlaylist = WindowsMediaPlayer1.PlayListCollection
Ghi chú: Các biến Object như CollecPlaylist, MangPlaylist, MyPlaylist phải khai báo toàn cục (General) vì được dùng trong nhiều Sub.
Ghi chú: Câu
Set CollecPlaylist = WindowsMediaPlayer1.PlayListCollection nên đưa vào Form Load để tránh lập lại, chỉ cần khai báo 1 lần.
Ghi chú: vì ta có Set địa chỉ cụ thể, nên câu khai báo Dim, có thể gán là Object, vd:
Dim CollecPlaylist As Object
Set CollecPlaylist = WindowsMediaPlayer1.PlayListCollectionNhưng kiểu khai báo nầy không được IDE hổ trợ cho việc viết code, vì chỉ khi runtime, CollecPlaylist mới biến thành WindowsMediaPlayer1.PlayListCollection, còn khi viết code thì chưa, do đó IDE chưa biết CollecPlaylist là cái gì!
I)- B- tiếp theo lớp PlaylistArrayDim MangPlaylist As IWMPPlaylistArray ''''' (General) '''''
Set MangPlaylist = WindowsMediaPlayer1.PlayListCollection.(PlaylistArray)vì
CollecPlaylist = WindowsMediaPlayer1.PlayListCollectionnên ta viết gọn:
Set MangPlaylist = CollecPlaylist.(PlaylistArray)Làm gì có code
.(PlaylistArray) ? Tôi viết như thế để các bạn thấy
chuỗi lớp từ "cha" đến "con".
Sau CollecPlaylist khi ta gõ dấu chấm . thì IDE đã xuất hiện các lớp con (tương đương PlaylistArray). Và tùy tình huống mà ta Set:
Hai tình huống hay gặp nhất là load Playlist và tạo mới Playlist và code hay dùng là:
Mã: Chọn hết
Set MangPlaylist = CollecPlaylist.getByName(Name)
mà đối số Name của hàm .getByName là tên của Playlist cần load hay tạo mới.
I)- C- tiếp theo lớp Playlist:Mã: Chọn hết
Dim MyPlaylist As IWMPPlaylist ' (General)
Tùy tình huống mà Set MyPlaylist:
C1- tạo Playlist mới:
Mã: Chọn hết
Set MyPlaylist = CollecPlaylist.newPlaylist(Name)
C2- load Playlist
Mã: Chọn hết
Set MyPlaylist = MangPlaylist.Item(0)
trong 2 tình huống trên, C2 là cha đẻ con, mà C1 thì ông nội đẻ cháu!
Thực ra lớp PlaylistArray chỉ là trung gian giữa 2 lớp PlayListCollection và PlayList. (giữa tập hợp PL và PL).
Khi tạo mới Playlist, ta dùng trực tiếp từ PlaylistCollection ---> Playlist [CollecPlaylist.newPlaylist(Name)].
Còn khi load, PlaylistCollection phải lục lọi trong kho [CollecPlaylist.getByName(Name)], mà hàm .getByName(Name) trả về mảng!
Vì thế, cho dù Name của Playlist chỉ có 1, ta không thể viết tắt như
Set MyPlaylist = CollecPlaylist.getByName(Name).Cho nên ta phải viết
Set MyPlaylist = MangPlaylist.Item(0) là vì vậy.
Túm lại, hai câu lệnh sau phải, hoặc hay đi kèm:
Mã: Chọn hết
Set MangPlaylist = CollecPlaylist.getByName(Name)
Set MyPlaylist = MangPlaylist.Item(0)
Từ đây, MyPlaylist được WindowsMediaPlayer1 quản lý như là 1 Playlist trong Collection của nó. Để WindowsMediaPlayer1 dùng MyPlaylist, ta viết:
Mã: Chọn hết
WindowsMediaPlayer1.currentPlaylist = MyPlaylist
II- Liên quan đến Media: (bài nhạc = file)Các bài nhạc được WMP cho vào Collection riêng, (MediaCollection)
Ta có: WMP---> MediaCollection ----> Media
Phân lớp ở đây đơn giản hơn, nên code gọn hơn:
II)- A- MediaCollection
Mã: Chọn hết
Dim AllSong As IWMPMediaCollection ''''' (General) '''''
Chỉ khi dùng tạo mới Playlist, có liên quan đến các file, MediaCollection mới sử dụng đến, do đó câu trên thích khai báo trong Sub làm Playlist cũng được.
Mã: Chọn hết
Set AllSong = WindowsMediaPlayer1.MediaCollection
Và câu Set đương nhiên nên nằm trong Sub làm Playlist rồi!
II)- B- Media
Mã: Chọn hết
Dim MySong As IWMPMedia ''''' (General) '''''
Cũng như MediaCollection, đối tượng Media ít quan trọng, ưng khai báo trong Sub cũng được. (
Tuy niên vì nhiều ứng dụng, nên viết ở General)
Đối tượng Media nầy nhiều ứng dụng, chuẩn nhất là khi dùng tạo mới Playlist, Set như sau
Mã: Chọn hết
Set MySong = AllSong.Add(Path_File_as_String)
Ngoài ra, Media nầy được dùng để lấy bài nhạc cụ thể (thông tin file nhạc) từ Playlist, vd:
Mã: Chọn hết
Set MySong = MyPlaylist.Item(i_As_Long)
Vì thế, chuẩn thì gọi MySong (IWMPMedia), viết nhanh thì gán bất cứ Object nào:
Mã: Chọn hết
Set zzzObject = AllSong.Add(Path_File_as_String)
Set oooObject = MyPlaylist.Item(i_As_Long)
Kết: Bạn đã quen các đối tượng WMP: PlaylistCollection, PlaylistArray, Playlist, MediaCollection, Media.
Với các khái niệm làm quen trên, tôi đảm bảo bạn sẽ viết code dùng WMP dễ dàng với IDE trợ giúp; hoặc đọc code dễ hiểu trong Project mà bạn nếu đã load.
Các bài sau sẽ có code từng button...
