Âm thanh trong Pascal: ĐỌC VÀ CHƠI NHẠC
Khi chạy chương trình của mình, có lẽ ai cũng muốn chèn vào một đoạn nhạc ngắn và vui tai để chương trình thêm sinh động. Với kiến thức mà chúng ta đang có, điều đó có thể thực hiện được. Bạn có thể dùng thủ tục Sound và các tần số của nốt nhạc để tạo ra các đoạn nhạc theo ý muốn của mình, miễn là ta phải nắm chút ít về nhạc lí.
Ta đã biết, để thể hiện cao độ của nốt nhạc, ta dùng thủ tục Sound, còn đối với trường độ của nốt nhạc, ta dùng thủ tục Delay.
Bảng sau sẽ trình bày cao độ của các nốt nhạc :
|
STT |
Nốt nhạc |
Octave 3 |
Octave 4 |
Octave 5 |
Octave 6 |
|
01 02 03 04 05 06 07 08 09 10 11 12 |
Do Do# Re Re# Mi Fa Fa# Sol Sol# La La# Si |
131 139 147 156 165 175 185 196 208 220 233 247 |
262 277 294 311 330 349 370 392 415 440 466 494 |
523 554 587 622 659 698 740 784 831 880 932 988 |
1074 1109 1175 1245 1319 1397 1480 1568 1661 1760 1865 1976 |
Bảng tần số nốt nạc theo quảng Tám ( Octave )
Trường độ của nốt nhạc do ta tự qui định tùy thuộc vào bản nhạc đó nhanh hay chậm. Chẳng hạn ta lấy nốt móc đơn làm mốc và cho nốt này một giá trị trường độ là 1/10 giây, thì
Nốt trắng = 4/10 giây Þ Delay ( 400 )
Nốt đen = 2/10 giây Þ Delay ( 200 )
Nốt móc đơn = 1/10 giây Þ Delay ( 100 )
Nốt móc đôi = 5/100 giây Þ Delay ( 50 )
Nốt móc ba = 25/1000 giây Þ Delay ( 25 )
* ĐỌC VÀ CHƠI NHẠC TỪ TẬP TIN VĂN BẢN :
Có một cách để chương trình chơi nhạc của bạn trở nên đơn giản và suôn sẽ hơn. Đó là đọc và chơi nhạc từ tập tin văn bản. Bạn chỉ việc tạo file chứa các giá trị ấn định mức độ nhanh chậm của bản nhạc theo quy tắc có sẵn do chương trình đặt ra. Sau đó, bạn nhập đường dẫn để chương trình tìm và chơi bản nhạc có chứa trong file đã được chỉ định.
Chương trình sau đây sẽ phát ra giai điệu bài "Cho con” của Phạm Trọng Cầu. Bản nhạc được ghi trong Text file theo mẫu :
5 C D
5 C MD
5 D MD
4 G D
5 M D
5 D T
...
Mỗi nốt nhạc được ghi trên một dòng theo thứ tự : quãng tám, tên nốt ( kí hiệu ) và kí hiệu trường độ phân cách nhau bởi một khoảng trắng.
Với bản nhạc này, ta lấy nốt móc đơn làm mốc và có giá trị trường độ là 250. Chữ T kí hiệu nốt trắng (Duration = 1000 ), chữ D - nốt đen ( Duration = 500 ), chữ MD - móc đơn ( Duration = 250 )...
Sau đây là chương trình Chơi nhạc từ Text file
Program Choi_nhac ; (* Bai hat 'Cho con' cua Pham Trong Cau *)
Uses Crt;
Const Notes: Array [0..12] Of String
= ('L','C','CF','D','DF','E','F','FF','G','GF','A','AF','B') ;
A0 = 32.625 ;
T=1000 ; D=500 ; MD=250 ;
Var f : Text ;
S, N : String ;
O, Du, Code : Integer ;
Procedure Play ( Octave : Integer ; Note : String ; Duration : Integer) ;
Var Fr : real ; I : Integer ;
Begin
Fr := A0 ;
For I := 1 To Octave Do Fr := Fr * 2 ;
I := 0 ;
While Notes[ i ] <> Note Do
Begin
Fr := Fr * Exp ( Ln(2) / 12 ) ; Inc ( i ) ;
End ;
If Note <> 'L' Then
Begin
Sound ( Round( Fr ) ) ;
Delay ( Duration ) ;
NoSound ;
Delay ( 50 ) ;
End
Else
Begin
Nosound ; Delay( Duration + 50 ) ;
End ;
End ;
BEGIN
Assign ( f,'CHOCON.OUT' ) ; Reset ( f ) ;
Repeat
Read ( f, O) ;
Readln ( f, S ) ;
While S[ 1 ] = ' ' do Delete( S, 1, 1 ) ;
While S[ Length( S ) ] = ' ' Do Delete( S, Length( S ),1 ) ;
N := Copy ( S, 1, Pos( ' ', s ) -1 ) ;
Delete( S, 1, Pos( ' ', s ) ) ;
While S[1]=' ' Do Delete( S, 1, 1 ) ;
If S = 'T' Then Du := T ;
If S = 'D' Then Du := D ;
If S = 'MD' Then Du := MD ;
Play ( O, N, Du ) ;
Until EOF ( f ) ;
Close ( f ) ;
END.
Tập tin CHOCON.OUT đã có sẵn trong thư mục Data, bạn chỉ việc copy nó đến cùng thư mục với chương trình của bạn là được.
Mong bạn sẽ hài lòng với chương trình này !
Đỗ Trung Thành @ 10:53 13/09/2009
Số lượt xem: 16111
- Âm thanh trong Pascal: TẠO HIỆU ỨNG ÂM THANH (13/09/09)
- Â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)

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