Âm thanh trong Pascal: TẠO HIỆU ỨNG ÂM THANH
Đối với một số ngôn ngữ lập trình hướng đối tượng mạnh như Visual Basic hoặc Visual C++, thì việc quản lý âm thanh như chuyển âm thanh, chuyển nhạc (nhạc MP3, audio) ra Soundcard là không có gì khó. Nhưng đối với Pascal, đó là một công việc phức tạp và mất thời gian.
Ở bài này, tôi chỉ đề cập đến việc tạo hiệu ứng âm thanh trên loa nội bộ của máy PC.
1. Beep (bíp):
Tiếng bíp thường dùng để báo lỗi trong các chương trình. Để phát tiếng bíp, bạn dùng tần số xấp xỉ 150 Hertz trong khoảng thời gian 400 mili giây.
Ví dụ sau đây sẽ phát ra tiếng bip để báo lỗi nếu bạn nhập sai số liệu :
Program Bip ;
Uses Crt ;
Var
MyNum : Integer ;
(* ----------------------------------------------------- *)
Procedure Beep ;
Begin
Sound ( 150 ) ;
Delay ( 400 ) ;
Nosound ;
End ;
(* ----------------------------------------------------- *)
BEGIN
Clrscr ;
Write (' Cho mot so tu 1 đen 5 : ') ;
Readln ( MyNum ) ;
If ( MyNum < 1 ) Or ( MyNum > 5 ) Then
Begin
Beep ;
Write (' Ban vao sai roi ! ') ;
End
Else Write (' So lieu duoc chap nhan ! ') ;
Readln ;
End.
2. Buzz (tiếng rù rù):
Để tạo tiếng rù rù, bạn dùng tần số 100 Hertz và thời khoảng 30 mili giây
Program Ru_ru ;
Uses Crt ;
Var
Counter : Integer ;
BEGIN
For Counter := 1 To 30 Do
Begin
Sound ( 100 ) ;
Delay ( 30 ) ;
Nosound ;
Delay ( 30 ) ;
End ;
END.
3. Tiếng banh nảy:
Để tạo tiếng banh nảy bạn thay đổi giữa 2 tone thấp và cao như quả banh nảy lên rồi lại rơi xuống. Mỗi lần banh nảy sẽ giảm độ nảy so với lần trước nghĩa là tiếng banh ngày càng gần nhau. Ví dụ sau đây cho thấy điều đó :
Program Ban_nay ;
Uses Crt ;
Var
Hight, Low : Integer ;
(* ---------------------------------------------------------- *)
Procedure BoucingBall ( Hight, Low : Integer ) ;
Var
Count : Integer ;
Begin
Count := 20 ;
While Count > 1 Do
Begin
Sound ( Low - Count * 2 ) ;
Delay ( (Count * 500) Div 20 ) ;
Nosound ;
Sound ( Hight ) ;
Delay ( (Count * 500) Div 15 ) ;
Nosound ;
Delay ( 150 ) ;
Count := Count - 2 ;
End ;
End ;
(* ---------------------------------------------------------- *)
BEGIN
BoucingBall ( 350, 200 ) ;
END.
4. Tiếng bỏ bom:
Ví dụ sau tạo ra tiếng bỏ bom. Thủ tục BombsAway có 3 tham biến Hight, Low, Altitude. Tham biến Hight, Low cho tần số cao và thấp, tham biến Altitude kiểm soát thời khoảng của tone :
Program Bo_bom ;
Uses Crt ;
Var
Hight, Low, Altitude : Integer ;
(* ------------------------------------------------------------ *)
Procedure BombsAway ( Hight, Low, Altitude : Integer ) ;
Var
Count : Integer ;
Begin
Count := Low ;
While Count <= Hight Do
Begin
Sound ( Count ) ;
Delay ( (Altitude Div Count) * 75 ) ;
Count := Count + 10 ;
End ;
For Count := 1 To 3 Do
Begin
Nosound ;
Sound ( 40 ) ;
Delay ( 500 ) ;
Nosound ;
Delay ( 100 ) ;
End ;
Sound ( 40 ) ;
Delay ( 3000 ) ;
Nosound ;
End ;
(* ------------------------------------------------------------ *)
BEGIN
BombsAway ( 1200, 200, 500 ) ;
END.
5. Tiếng báo động:
Ví dụ sau đây sẽ tạo ra tiếng báo động cho đến khi bạn gõ phím bất kì :
Program Bao_dong ;
Uses Crt ;
(* ----------------------------------------------------------- *)
Procedure RedAlert ( Hight, Low : Integer ) ;
Var
Ch :Char ;
Begin
Clrscr ;
Write(' An phim bât ki de cham dut bao dong ! ') ;
Repeat
Sound ( Hight ) ;
Delay ( 400 ) ;
Sound ( Low ) ;
Delay ( 400 ) ;
Until KeyPressed ;
Ch := Readkey ;
Nosound ;
End ;
(* ----------------------------------------------------------- *)
BEGIN
RedAlert ( 359, 200 ) ;
END.
Trên đây, tôi đã trình bày các hiệu ứng của âm thanh được lập trình bởi Pascal. Tuy nhiên do sử dụng kĩ thuật phối âm chưa cao nên âm thanh chưa gây được ấn tượng cho người nghe. Ở phần Ứng dụng, tôi đã trình bày các ví dụ để tạo âm thanh sinh động hơn, bạn có thể tham khảo.
Đỗ Trung Thành @ 10:53 13/09/2009
Số lượt xem: 14535
- Âm thanh trong Pascal: LOA CỦA PC (13/09/09)
- XỬ LÍ BÀN PHÍM (13/09/09)
- MÀU CHỮ VÀ MÀU NỀN (13/09/09)
- THIẾT LẬP MÀN HÌNH ĐỒ HỌA (13/09/09)
- Con trỏ: CON TRỎ KHÔNG ĐỊNH KIỂU (13/09/09)

Các ý kiến mới nhất