Excel và chương trình nghe nhạc

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,436
Điểm
0
Nơi ở
TP HCM
Nghề nghiệp
Bác sĩ
TuanVNUI​

Tặng các bạn chương trình Nghe, Tạo nhạc trên EXCEL

--------------------------------------------------------------------------------

Với bản tính ham vui, yêu nhạc mình đã viết ra chương trình nghe và soạn nhạc trên EXCEL. Chương trình cung cấp các định nghĩa chuẩn về nhạc, với 128 loại âm thanh (Guita, Piano, Sáo,..) cùng các nốt nhạc cho phép bạn soạn ra bất kỳ một bản nhạc nào, hoặc có thể sáng tác riêng cho mình.

Chương trình có mở code cho phép bạn sửa đổi, nâng cấp tùy ý. Bạn nào phát triển hơn nữa hãy gửi lên cho mọi người thưởng thức.

Trước khi chạy bạn hãy bật loa lên nhé.

Bạn hãy chạy tệp Excelsound.xls, chọn Enable Macros.

Download tại đây!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Adam_tran Post :

Tuyệt vời! Cái file này hơi bị độc.
Anh Tuân nghiên cứu tiếp để có thể có thêm:
- Công cụ Tempo dùng chỉnh tốc độ chơi của bản nhạc.
- Có thể quy định cường độ âm thanh của mỗi nốt nhạc
- Có thể chơi cùng lúc hơn 1 âm thanh (multi MIDI chanel).
- Options: Có thể export bản nhạc ra file Midi
Được những yêu cầu trên thì file của anh gần bằng Encore rồi!
 
Tuanktcdcn Post :

Cảm ơn adam_tran, I rất muốn phát triển chương trình này theo gợi ý của bạn và hơn nữa, I cũng rất muốn người nào đó phát triển tiếp chương trình này. Hiện nay kỹ thuật ghi bản nhạc thành file MIDI (*.Mid) I đã làm gần thành công nhưng nó đọc thông số ngưng (Delay) không chuẩn, I đang nghiên cứu tiếp nhưng bí thời gian quá.
 
Hai2Hai Post :

Title: MUSIC EDITOR Version 2000 (A musical note editor..a must see..)
Description: In this sample code of mine, you can learn how to control arrays and used it in a more sufficient way of programming. You can SAVE/EDIT/INSERT/PRINT the notes you already designed.
Download

Còn có 1 số sourcecode về guita nữa.

Các bạn thử download MIDI guitar program xem sao

P/S: Mình mù tít về mấy món music này nhé :). Riêng music, hỏi thêm Mr Tuân :)
 
Tuanktcdcn Post :

Để soạn nhạc bạn thực hành các bước sau:
+ Mở Sheet "IdVoice-Nhac cu" để tìm hiểu các loại âm thanh, từ đây bạn nhới Id của nhạc cụ đó.
+ Mở Sheet "Tim hieu not nhac" bạn có thể hiểu đặc tính các nốt nhạc. Tất cả mọi bản nhạc trên Thế giới chỉ có 7 nốt nhạc cơ bản:
C - Đồ
D - Rê
E - Mi
F - Pha
G - Son
A- La
B - Si
Cùng với 5 nốt mở rộng: C#, D#, F#, G#, A#
Sự thay đổi các nốt nhạc này sẽ tạo ra các sóng nhạc (wave) thay đổi, cùng với độ "Ngưng" (Delay) sẽ cho chúng ta các bản nhạc khác nhau, NS Mozart cũng làm như vậy. Trong Sheet này, bạn hãy vào "Chạy thử" để tập soạn nhé.
+ Để soạn bản nhạc mới, bạn copy "S-Soan nhac" ra một Sheet khác (có thể nằm cùng trên cùng Workbook), đặt tên phải có 2 ký tự đầu là "S-" nhé.

Với phiên bản này hơi khó soạn. Với phiên bản sau các bạn có thể cầm một bản nhạc và soạn trên chương trình được.

Chúc các bạn có những giây phút thoải mái khi ở bên EXCEL!
 
Cho mình hỏi chút về phần bạn làm. Nếu muốn trích xuất mỗi nốt nhạc thôi thì cần phài làm những thao tác gì ?
 
rich_rover84 đã viết:
Cho mình hỏi chút về phần bạn làm. Nếu muốn trích xuất mỗi nốt nhạc thôi thì cần phài làm những thao tác gì ?

Bạn sử dụng thủ tục (Sub) "NotePlay". Cấu trúc của thủ tục này như sau:
NotePlay(ByVal Note As nNote, ByVal Quang As Integer, ByVal nDelay As Single)

Note: là tên nốt nhạc, nhận các hằng như sau:
NoteC 'Do
NoteC1 ' Do thang (#)
NoteD 'Re
NoteD1 = 3 'Re#
NoteE = 4 'Mi
NoteF = 5 'Fa
NoteF1 = 6 'Fa#
NoteG = 7 'Son
NoteG1 = 8 'Son#
NoteA = 9 ' La
NoteA1 = 10 'La#
NoteB = 11 'Si

Quang: Gọi là "Quãng" để chỉ ra trường độ âm thanh (âm cao, thấp). Có một hằng số
Mã:
Quang = 12
Quang nhận các giá trị:
0*Quang 'âm cơ bản
1*Quang 'quãng 8
2*Quang 'quãng 16
3*Quang 'quãng 24

nDelay: là thời gian chơi nốt chạc (Delay). nDelay nhận các hằng số sau:

Den 'Đen
Den1
Don 'Đơn
Don1
Kep 'Kép
Kep1
Tam
Tam1
Tu 'Tứ
Tu1
Trang 'Trắng
Trang1
Tron 'Tròn
Tron1
TronX2

Bạn có thể dùng hàm
Mã:
GetDELAY(ByVal cDelay As String) As Single
cho đối số nDelay.

BẠN THAM KHẢO CÁC VÍ DỤ SAU:

Chạy một nót nhạc
Mã:
Sub TestNode()
 NotePlay NoteA, 0, Den
End Sub

Chạy một đoạn dạo nhạc bài "Lời ru buồn"
Mã:
Sub DaoNhac_LoiRuBuon()
Const cnNode = 30
Dim aNode(cnNode) As nNote, aQuang(cnNode) As Long, aDelay(cnNode) As Single
Dim i As Long
i = 0
[COLOR="Green"]'Định nghĩa các nốt nhạc[/COLOR]
aNode(i) = NoteD: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteE: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteF: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteE: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteD: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteA: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteA: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteG: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteG: aQuang(i) = 0 * Quang: aDelay(i) = Den: i = i + 1

aNode(i) = NoteG: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteA: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteA1: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteA: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteG: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteD: aQuang(i) = 1 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteD: aQuang(i) = 1 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteA: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteA: aQuang(i) = 0 * Quang: aDelay(i) = Den: i = i + 1

aNode(i) = NoteE: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteF: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteG: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteF: aQuang(i) = 0 * Quang: aDelay(i) = Kep: i = i + 1
aNode(i) = NoteE: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteF: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteG: aQuang(i) = 0 * Quang: aDelay(i) = Den: i = i + 1

[COLOR="Green"]'Đoạn 1[/COLOR]
aNode(i) = NoteF: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteG: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteA: aQuang(i) = 0 * Quang: aDelay(i) = Den: i = i + 1

[COLOR="Green"]'Ngắt đoạn 2[/COLOR]
aNode(i) = NoteE: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteC: aQuang(i) = 0 * Quang: aDelay(i) = Don: i = i + 1
aNode(i) = NoteD: aQuang(i) = 0 * Quang: aDelay(i) = Den: i = i + 1

[COLOR="Green"]'Kiểm tra và truyền âm thanh cho máy tính[/COLOR]
If hMIDI = 0 Then LoadMIDI

[COLOR="Green"]'Chọn loại nhạc cụ[/COLOR]
Change_Sound hMIDI, Sound_list.[Nylon String Guitar]

K = 0
For K = 0 To 1 [COLOR="Green"]'Chạy 2 lần aNode(i)[/COLOR]
    If K = 1 Then Change_Sound hMIDI, Sound_list.[Metal Pad]
    For i = 0 To cnNode - 3
        If K = 1 And i = cnNode - 6 Then [COLOR="Green"]'Ngắt sang đoạn 2[/COLOR]
            Exit For
        Else [COLOR="Green"]'Đoạn 1[/COLOR]
            NotePlay aNode(i), aQuang(i), aDelay(i)
        End If
    Next
    
    If K = 1 Then [COLOR="Green"]' Đoạn 2[/COLOR]
        For i = cnNode - 3 To cnNode
            NotePlay aNode(i), aQuang(i), aDelay(i) [COLOR="Green"]'Phát ra âm thanh[/COLOR]
        Next
    End If
Next

End Sub
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom