Tài nguyên Thư viện

Thành viên trực tuyến

3 khách và 0 thành viên

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • Menu Thư viện

    Gốc > Kiến thức tin học > Lập trình Pascal >

    Â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 !


    Nhắn tin cho tác giả
    Đỗ Trung Thành @ 10:53 13/09/2009
    Số lượt xem: 16111
    Số lượt thích: 0 người
     
    Gửi ý kiến