|
VỌC MÁY TÍNH
CÙNG NHẠC SĨ HOÀI AN |
|
Tạo nút phát âm thanh
với VRML
HOÀI AN |
|
Với ý tưởng thực hiện
một bàn phím piano 3D có thể tương tác phát ra nốt nhạc,
bạn hãy thử tìm hiểu xem VRML cung cấp cho chúng ta
những chức năng liên quan nào... |
 |
|
1.
Hình ảnh |
|
Trước hết bạn tạo một
bàn phím Piano gồm hai loại phím trắng và đen đơn giản
bằng hai định nghĩa đối tượng hình học: hai hình hộp 3D.
Với chuyển động “Examine” trong “Movements” của trình
duyệt hỗ trợ VRML (như Cosmo Player hay Blaxxun Contact)
người dùng có thể xoay các hình khối bạn vừa tạo để thấy
một octave – quãng tám các phím Piano từ C4 đến C5 ( nốt
Do 4 đến Do 5 ) rất đẹp. |
|
 |
|
2. Âm
thanh |
|
a. Đầu tiên bạn tạo một
nút kiểu TouchSensor, nút này sẽ dò vị trí và trạng thái
của thiết bị trỏ ( con chuột), và phát sinh sự kiện khi
người dùng “chạm” vào đối tượng hình học nào trong nhóm
thuộc nút “cha” TouchSensor. |
|
DEF D4 TouchSensor { } |
|
 |
|
b. Tiếp theo bạn tạo
một nút Sound đặc tả phần trình diễn âm thanh, tuy nhiên
bạn chỉ dùng một thuộc tính đường dẫn “source” để dẫn
đến nút AudioClip – nút thật sự phát ra âm thanh từ
nguồn cho trước “url”. Ở đây (nút AudioClip) có một
thuộc tính thú vị khác: “pitch”, thuộc tính này có thể
hiểu như tỷ lệ chênh về cao độ của âm thanh phát ra so
với âm thanh gốc. Do đó với một nốt D4 cho trước ( file
D_TONE.WAV trong mã nguồn), bạn có thể tạo nốt E4 (cao
hơn D4 1 cung) bằng công thức:
E4=D4*1.122, hay với “pitch” 1.122. Tương tự, bạn
tạo ra nốt D#4 (cao hơn D4 nửa cung):
D#4=D4*1.059 |
|
Sound {
source DEF PitchD4 AudioClip {
url "D_TONE.wav"
pitch 1.0
}
} |
|
 |
|
c. Cuối cùng bạn “dẫn
đường” cho các sự kiện truyền đi: |
|
ROUTE D4.touchTime TO PitchD4.set_startTime |
|
Ngay tại thời gian
người dùng “chạm” vào nút kiểu TouchSensor, một nút
AudioClip có liên kết (ví dụ: nút PitchD4) sẽ được kích
hoạt. |
|
Bạn thử tìm hiểu đoạn
chương trình tạo ra 3 nốt D4, D#4, và E4 và
Click vào đây để tải
về chương trình nguồn đầy đủ: |
|
# nốt Re gần nốt Do 4 |
|
Transform { translation 0.25 0.0 0.0
children [
USE WhiteKey,
DEF D4 TouchSensor { }
Sound {
source DEF PitchD4 AudioClip {
url "D_TONE.wav"
pitch 1.0
}
}
]
} |
|
# nốt Re# gần nốt Do 4 |
|
Transform { translation 0.375 0.1 -0.375
children [
USE BlackKey,
DEF Ds4 TouchSensor { }
Sound {
source DEF PitchDs4 AudioClip {
url "D_TONE.wav"
pitch 1.059
}
}
]
} |
|
# nốt Mi gần nốt Do 4 |
|
Transform { translation 0.5 0.0 0.0
children [
USE WhiteKey,
DEF E4 TouchSensor { },
Sound {
source DEF PitchE4 AudioClip {
url "D_TONE.wav"
pitch 1.122
}
}
]
} |
|
|