SGK Tin Học 11 - Bài đọc thêm 4. Âm thanh

  • Bài đọc thêm 4. Âm thanh trang 1
  • Bài đọc thêm 4. Âm thanh trang 2
  • Bài đọc thêm 4. Âm thanh trang 3
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.