SGK Tin Học 11 - Bài đọc thêm 4. Âm thanh
Bài đọc thêm 4 ÂM THANH Ta sẽ tìm hiểu thêm một sô' yếu tô' về âm thanh như mô phỏng âm thanh và mô phỏng nốt nhạc trong Pascal. Khi được bật, loa máy tính sẽ phát ra âm thanh ở một tần sô' nào đó cho đến khi được tắt. Để khai thác khả năng này, thư viện crt có: Thủ tục phát ra một âm thanh có tần sô' (cao độ) là h (tính theo đơn vị héc - Hz): procedure Sound(h: word); Thủ tục tắt âm thanh đang được phát ra loa: procedure NoSound; Mỗi khi gọi thủ tục Sound để phát một âm thanh nào đó, âm thanh này sẽ được kéo dài cho đến khi gặp lời gọi NoSound. Để xác định khoảng thời gian kéo dài (trường độ), ta dùng thủ tục Delay với tham trị í. Thủ tục sau phát một âm thanh với cao độ h và trường độ í: procedure CreatSound(h,t: word); begin Sound(h); Delay(t); NoSound; end; a) Mô phỏng âm thanh Có thể mô phỏng một âm thanh nhờ thủ tục CreatSound(h,t). vấn đề còn lại là tìm các giá trị thích hợp của hvàt. Ví dụ Chương trình dưới đây tạo tiếng lộc cộc của vó ngựa phi: program DemoSound; uses crt; procedure CreatSound(h, t: word); begin Sound(h); Delay(t); NoSound; end; procedure Clockoc(h: word); begin CreatSound(h, 20); Delay(50); CreatSound(h, '20); Delay(100); CreatSound(h, 40); end; begin repeat Clockoc (500); Delay (200); until KeyPressed; end. Việc khai thác âm thanh thường được sử dụng để xây dựng các chương trình trò chơi hoặc mô phỏng. Vì thế, nếu thường xuyên phải phát triển những ứng dụng loại này thì nên tổ chức một thư viện chứa một số âm thanh mẫu như tiếng các loại động cơ, tiếng còi, tiếng nổ, tiếng va chạm,... để tiện dùng. b) Mô phỏng nốt nhạc Một trường hợp riêng của việc khai thác âm thanh là mô phỏng các nốt nhạc. Một nốt nhạc cao độ h, trường độ t sẽ được thực hiện bởi lệnh gọi: CreatSound(h,t); Theo âm luật, từ một quãng 8 đến quãng 8 kê' tiếp, thừa số nhân của cao độ là 2. Trong một quãng 8, có 12 khoảng nửa cung, vì thế thừa số nhân giữa hai khoảng này là căn bậc 12 của 2. Vì vậy chỉ cần biết cao độ của một nốt làm gốc, ta có thể tính cao độ của các nốt khác. Chẳng hạn, xuất phát từ cao độ của nốt đô trung là 512, cao độ của các nốt trong quãng 8 trung lần lượt là (sau khi đã làm tròn): Nốt nhạc Cao độ đô trung 512 đô thăng 542 rê 575 rê thăng 609 mi 645 fa 683 Nốt nhạc Cao độ fa thăng 724 son 767 son thăng 813 la 861 la thăng 912 si 967 về trường độ, lấy nốt móc đơn làm đơn vị là 150, ta tính được các trường độ khác: Nốt nhạc Trường độ nốt đen 300 nốt trắng 600 nốt trắng chấm 900 nốt tròn 1200 t: word); NoSound; {si den} {son den} {la den} {re trang cham} {re den} {la den} {si den} {son trang cham} {si den} {son den} {la den} {re trang cham} {re den} {la den} {si den} {son trang cham} Ví dụ Chương trình dưới đây thể hiện một bản nhạc ngắn của đồng hồ, tất cả các nốt đều ở quãng 8 trung: program DemoMusic; uses crt; procedure CreatSound(h, begin Sound(h); Delay(t) end; begin CreatSound(967, 300); CreatSound(767, 300); CreatSound(861, 300); 'CreatSound(575, 900); Delay(60); ' CreatSound(575, 300); CreatSound(861, 300); CreatSound(967, 300); CreatSound(767, 900); Delay (60); CreatSound(967, 300); CreatSound(767, 300); CreatSound(861, 300); CreatSound(575, 900); Delay ( 60); CreatSound(575, 300); CreatSound(861, 300); CreatSound(967, 300); CreatSound(767, 900); end.