Làm sao biết 1 file MP3 đã Play xong?

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,954
Tôi dùng code này để Play 1 file mp3
PHP:
Private Declare Function mciSendString Lib "winmm.dll" Alias _
        "mciSendStringA" (ByVal lpstrCommand As String, ByVal _
        lpstrReturnString As String, ByVal uReturnLength As Long, _
        ByVal hwndCallback As Long) As Long
PHP:
Private Sub CommandButton1_Click()
  Dim Check As Boolean
  Check = (CommandButton1.Caption = "Play")
  PlayMP3 Check
  CommandButton1.Caption = IIf(Check, "Stop", "Play")
End Sub
PHP:
Private Sub PlayMP3(isPlaying As Boolean)
  If isPlaying Then
    Call mciSendString("Open """ & [A1] & """ Alias MM", 0, 0, 0)
    Call mciSendString("Play MM", 0, 0, 0)
  Else
    Call mciSendString("Stop MM", 0, 0, 0)
    Call mciSendString("Close MM", 0, 0, 0)
  End If
End Sub
(Đường dẩn đến file MP3 được nhập vào tại cell A1)
Vấn đề là: Khi file mp3 này đang Play, làm sao biết được nó đã kết thúc (tức đã Play hết)
Xin các bạn, ai có kinh nghiệm về hàm API chỉ giúp tôi với!
Giải quyết được vấn đề này, ta có thể tạo 1 form, load tên các file mp3 vào 1 listbox rồi chơi từ bài này đến bài khác (cũng thú vị lắm đấy)
 

File đính kèm

Em chưa rành hết API nhưng xin đề xuất theo hướng xem thời gian phát được không?
Nếu thời gian phát hiện tại bằng tổng thời gian của bài thì nó nhảy sang bài khác!
Thân.
 
Upvote 0
Em chưa rành hết API nhưng xin đề xuất theo hướng xem thời gian phát được không?
Nếu thời gian phát hiện tại bằng tổng thời gian của bài thì nó nhảy sang bài khác!
Thân.
Mỗi bài có 1 thời lượng khác nhau, vậy mỗi bài lại phải viết 1 code khác nhau ah? Có ổn không?
 
Upvote 0
Tôi dùng code này để Play 1 file mp3
PHP:
Private Declare Function mciSendString Lib "winmm.dll" Alias _
        "mciSendStringA" (ByVal lpstrCommand As String, ByVal _
        lpstrReturnString As String, ByVal uReturnLength As Long, _
        ByVal hwndCallback As Long) As Long
PHP:
Private Sub CommandButton1_Click()
  Dim Check As Boolean
  Check = (CommandButton1.Caption = "Play")
  PlayMP3 Check
  CommandButton1.Caption = IIf(Check, "Stop", "Play")
End Sub
PHP:
Private Sub PlayMP3(isPlaying As Boolean)
  If isPlaying Then
    Call mciSendString("Open """ & [A1] & """ Alias MM", 0, 0, 0)
    Call mciSendString("Play MM", 0, 0, 0)
  Else
    Call mciSendString("Stop MM", 0, 0, 0)
    Call mciSendString("Close MM", 0, 0, 0)
  End If
End Sub
(Đường dẩn đến file MP3 được nhập vào tại cell A1)
Vấn đề là: Khi file mp3 này đang Play, làm sao biết được nó đã kết thúc (tức đã Play hết)
Xin các bạn, ai có kinh nghiệm về hàm API chỉ giúp tôi với!
Giải quyết được vấn đề này, ta có thể tạo 1 form, load tên các file mp3 vào 1 listbox rồi chơi từ bài này đến bài khác (cũng thú vị lắm đấy)

Thầy có thể tham khảo bài viết của bác anhphuong tại link sau :
http://www.giaiphapexcel.com/forum/showthread.php?t=22689
 
Upvote 0
Tôi dùng code này để Play 1 file mp3
....
Xin các bạn, ai có kinh nghiệm về hàm API chỉ giúp tôi với!
Giải quyết được vấn đề này, ta có thể tạo 1 form, load tên các file mp3 vào 1 listbox rồi chơi từ bài này đến bài khác (cũng thú vị lắm đấy)

Cái này em nhớ có một file của mấy thằng cha nước ngoài nó làm hay lắm, để em tìm và gửi cho anh tham khảo.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em chưa rành hết API nhưng xin đề xuất theo hướng xem thời gian phát được không?
Nếu thời gian phát hiện tại bằng tổng thời gian của bài thì nó nhảy sang bài khác!
Thân.
Trước khi post bài mình đã nghĩ đến hướng này và mình tiến hành thí nghiệm như sau:
- Cell A1 gõ đường dẩn đến thư mục chứa file MP3
- Cell A2 đến A4 gõ tên 3 file nhạc nào đó
- Code:
PHP:
Private Declare Function mciSendString Lib "winmm.dll" Alias _
        "mciSendStringA" (ByVal lpstrCommand As String, ByVal _
        lpstrReturnString As String, ByVal uReturnLength As Long, _
        ByVal hwndCallback As Long) As Long
PHP:
Function FileInfo(Path, FileName, Item)
  With CreateObject("Shell.Application").Namespace(Path)
    FileInfo = .GetDetailsOf(.ParseName(FileName), Item)
  End With
End Function
PHP:
Private Sub CommandButton1_Click()
  Dim Check As Boolean, i As Long, Dur
  Check = (CommandButton1.Caption = "Play")
  CommandButton1.Caption = IIf(Check, "Stop", "Play")
  If Check Then
    For i = 2 To 4
      Dur = Time + TimeValue(FileInfo(Cells(1, 1).Value, Cells(i, 1).Value, 21))
      PlayMP3 """" & Cells(1, 1) & Cells(i, 1) & """", True
      Application.Wait Dur
    Next i
  Else
    PlayMP3 "", False
  End If
End Sub
PHP:
Private Sub PlayMP3(Mp3File As String, isPlaying As Boolean)
  If isPlaying Then
    Call mciSendString("Open " & Mp3File & " Alias MM", 0, 0, 0)
    Call mciSendString("Play MM", 0, 0, 0)
  Else
    Call mciSendString("Stop MM", 0, 0, 0)
    Call mciSendString("Close MM", 0, 0, 0)
  End If
End Sub
Code chạy đúng yêu cầu, tức xong bài này đến bài khác đàng hoàng, có điều khi nó chạy thì "đồng hồ cát" hiện ra và không làm được gì cả...
Mình đoán có lẽ do đoạn Application.Wait mà ra
Không biết các bạn có hướng gì mới để điều khiển thời gian này không? Mục đích cuối cùng là: có thể làm bất cứ việc gì trên bảng tính khi nhạc đang phát
Nói thêm:
- Mình muốn đi từ thấp lên cao để có thể hiểu và khống chế được tiến trình, chính vì thế mình viết code ở mức đơn giản nhất để thí nghiệm cho chắc
- Sau khi thành công mới tính tới việc làm cho chương trình hoành tráng hơn (chẳng hạn tạo Form)
---------------------
Các bạn xem file và cải tiến giúp mình với (chỉ cần nghiên cứu phần điều khiển thời gian)
----------------------
Cái này em nhớ có một file của mấy thằng cha nước ngoài nó làm hay lắm, để em tìm và gửi cho anh tham khảo.
File này mình tham khảo từ file mà bạn đã gữi lên diển đàn đấy thôi (file chúc mừng SN bác SA nhà ta)
----------------------
Thầy có thể tham khảo bài viết của bác anhphuong tại link sau :
http://www.giaiphapexcel.com/forum/showthread.php?t=22689
File của bác anhphuong dùng WindowsMediaPlayer Control để hổ trợ ---> Có lẽ viết code theo hướng này là đơn giản nhất
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Phù... sau 2 ngày tìm tòi, tạm xong file này...


attachment.php



attachment.php


2 nút Help và About tôi chưa làm, các bạn cứ làm tiếp theo ý mình
Mời các bạn tham khảo và khám phá nhé (có 1 tính năng ẩn)
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    17.8 KB · Đọc: 223
  • PlayMP3_3.xls
    PlayMP3_3.xls
    86 KB · Đọc: 121
  • untitled1.JPG
    untitled1.JPG
    11 KB · Đọc: 221
Lần chỉnh sửa cuối:
Upvote 0
Phù... sau 2 ngày tìm tòi, tạm xong file này...


attachment.php



attachment.php


2 nút Help và About tôi chưa làm, các bạn cứ làm tiếp theo ý mình
Mời các bạn tham khảo và khám phá nhé (có 1 tính năng ẩn)
Bác Ndu ơi bác có cách nào từ file đó bác tạo được một cái addin để mỗi khi bọn em dùng đến excel , bật excel lên và kích chuột vào cái addin đó để được thưởng thức nhạc không bác? chương trình của bác hay quá. Nếu mà thêm được cái như em mong muốn nữa thì hay tuyệt. Như vậy mình vừa làm việc trên bảng tính vừa nghe nhạc, lựa chọn bài hát, quá hay Em đang nghe nhạc từ chương trình bác làm đây ạ.
Anh Ndu em vừa tìm thấy cái này hay hay nè.
http://caulacbovb.com/forum/viewtopic.php?t=379
 
Lần chỉnh sửa cuối:
Upvote 0
Bác Ndu ơi bác có cách nào từ file đó bác tạo được một cái addin để mỗi khi bọn em dùng đến excel , bật excel lên và kích chuột vào cái addin đó để được thưởng thức nhạc không bác? chương trình của bác hay quá. Nếu mà thêm được cái như em mong muốn nữa thì hay tuyệt. Như vậy mình vừa làm việc trên bảng tính vừa nghe nhạc, lựa chọn bài hát, quá hay Em đang nghe nhạc từ chương trình bác làm đây ạ.
Cái này dể mà bạn!
- Xoá code trong ThisWorkbook
- Chèn 1 Module mới với code:
PHP:
Sub ShowForm()
  Player.Show
End Sub
Gán cho macro này 1 phím tắt, chẳng hạn là Ctrl + Shift + S
Sửa lại code cho nút Exit thành:
PHP:
Private Sub ExitForm_Click()
  Unload Me
End Sub
Lưu file thành .xla và load nó vào mục Add-Ins
Vậy là xong!
Khởi động file Excel mới rồi Ctrl + Shift + S để thưởng thức
Bạn cũng có thể tạo 1 menu hoặc toolbar để gọi lệnh ShowForm cho hoành tráng hơn (tùy sở thích)
 
Upvote 0
Lần trước Thầy có chỉ tạo nút Min + Max trên UserForm, xin thầy chỉ cách tạo chỉ nút min thôi, và bỏ luôn 2 thanh cuộn luôn.
Vì em muốn sử dụng fìle nghe nhạc này trên ứng dụng, khi làm việc trên bảng tính, nhấn nút min cho nó xụp xuống.
 
Upvote 0
Hứng lên, chuyển luôn toàn bộ code sang VB6, tạo file thực thi (.exe) cho các bạn chạy độc lập... Giao diện tương tự, code cũng gần giống (khác 1 tí về điều khiển các control và sự kiện)

attachment.php


Đính kèm dưới đây là file EXE và toàn bộ source code, các bạn có thể cải tiến tùy thích
---------------------
Lần trước Thầy có chỉ tạo nút Min + Max trên UserForm, xin thầy chỉ cách tạo chỉ nút min thôi, và bỏ luôn 2 thanh cuộn luôn.
Vì em muốn sử dụng fìle nghe nhạc này trên ứng dụng, khi làm việc trên bảng tính, nhấn nút min cho nó xụp xuống.
Trong source có đoạn điều khiển các nút Max, Min và Close đấy, tham khảo nha! (VBA gần như tương tự)
 

File đính kèm

Upvote 0
Lần trước Thầy có chỉ tạo nút Min + Max trên UserForm, xin thầy chỉ cách tạo chỉ nút min thôi, và bỏ luôn 2 thanh cuộn luôn.
Vì em muốn sử dụng fìle nghe nhạc này trên ứng dụng, khi làm việc trên bảng tính, nhấn nút min cho nó xụp xuống.
Thôi... làm cho bạn luôn!
Enable MinButton và Disable MaxButton nhé
 

File đính kèm

Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom