anhtuan1066
Thành viên gạo cội
- Tham gia
- 10/3/07
- Bài viết
- 5,802
- Được thích
- 6,912
Chủ đề này đã từng được bạn TuanVNUNI làm khá hoàn thiện... Ở đây ta dùng code để chơi các note nhạc với giải pháp đơn giản hơn rất nhiều
A> TIẾN HÀNH:
1> Chèn code vào Module
- Chèn 1 module và đặt code này vào nó:
2> Chèn UserForm
- Chèn 1 UserForm với 1 ScrollBar... Đặt giá trị Min và Max cho ScrollBar lần lượt là 30 và 100
- Chèn code này vào UserForm
Mở Form rồi dùng chuột kéo ScrollBar, các bạn sẽ thấy 1 chuổi âm thanh piano phát ra từ thấp đến cao
Tham khảo file PlayMusicalNote_1.xls
-----------------------------------------
B> NÂNG CẤP
Từ code trên, chúng ta hoàn toàn có thể nghĩ đến việc tạo ra 1 cây đàn piano với 44 phím trắng đen được vẽ bằng CommandButton
Code vẫn dựa trên cơ sở code cũ, chỉ thêm 1 ClassModule nhằm mục địch rút gọn code cho CommandButton (thay vì phải viết 44 đoạn code)... Tham khảo file PlayMusicalNote_2.xls
-----------------------------------------
C> NHỮNG KHẢ NÂNG MỞ RỘNG CÓ THỂ:
- Từ file này, các bạn có thể nghĩ đến việc dùng bàn phím thay cho chuột khi nhấn các phím đàn (KeyPress Event hay gì gì đó)
- Có thể nghiên cứu chỉnh sửa các thông số để thêm các loại nhạc cụ khác vào
- Có thể lập trình sẳn để nó chơi 1 bài nhạc nào đó
vân vân...
-----------------------------------------
Code này được tham khảo từ các trang web nước ngoài nhưng đã chỉnh sửa và cắt bỏ những phần không cần thiết... Các bạn hãy xem và góp ý thêm nhé
A> TIẾN HÀNH:
1> Chèn code vào Module
- Chèn 1 module và đặt code này vào nó:
PHP:
Dim handleMidiOut As Long
Private Declare Function midiOutShortMsg Lib "winmm.dll" _
(ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
Private Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, _
ByVal uDeviceID As Long, ByVal dwCallback As Long, _
ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long
PHP:
Function OpenMidiOut(ByVal dev_id As Long) As Long
CloseMidiOut
midiOutOpen handleMidiOut, dev_id, 0, 0, 0
OpenMidiOut = (handleMidiOut <> 0)
End Function
PHP:
Sub CloseMidiOut()
If handleMidiOut <> 0 Then
midiOutClose handleMidiOut
handleMidiOut = 0
End If
End Sub
PHP:
Sub PlayNote(Ch As Long, ByVal nn As Long, vel As Long)
Dim PackDword As Long
PackDword = &H90 + Ch + nn * &H100 + vel * &H10000
midiOutShortMsg handleMidiOut, PackDword
End Sub
- Chèn 1 UserForm với 1 ScrollBar... Đặt giá trị Min và Max cho ScrollBar lần lượt là 30 và 100
- Chèn code này vào UserForm
PHP:
Private Sub UserForm_Initialize()
OpenMidiOut (-1)
End Sub
PHP:
Private Sub UserForm_Terminate()
CloseMidiOut
End Sub
PHP:
Private Sub ScrollBar1_Change()
PlayNote 0, ScrollBar1.Value, 120
End Sub
Tham khảo file PlayMusicalNote_1.xls
-----------------------------------------
B> NÂNG CẤP
Từ code trên, chúng ta hoàn toàn có thể nghĩ đến việc tạo ra 1 cây đàn piano với 44 phím trắng đen được vẽ bằng CommandButton
Code vẫn dựa trên cơ sở code cũ, chỉ thêm 1 ClassModule nhằm mục địch rút gọn code cho CommandButton (thay vì phải viết 44 đoạn code)... Tham khảo file PlayMusicalNote_2.xls
-----------------------------------------
C> NHỮNG KHẢ NÂNG MỞ RỘNG CÓ THỂ:
- Từ file này, các bạn có thể nghĩ đến việc dùng bàn phím thay cho chuột khi nhấn các phím đàn (KeyPress Event hay gì gì đó)
- Có thể nghiên cứu chỉnh sửa các thông số để thêm các loại nhạc cụ khác vào
- Có thể lập trình sẳn để nó chơi 1 bài nhạc nào đó
vân vân...
-----------------------------------------
Code này được tham khảo từ các trang web nước ngoài nhưng đã chỉnh sửa và cắt bỏ những phần không cần thiết... Các bạn hãy xem và góp ý thêm nhé