Bài toán lập trình đếm nhịp trong bài hát năm 2024

Ta hãy giải bài toán trên với các trường hợp đi từ đơn giản đến phức tạp, phụ thuộc vào giá trị tăng dần của số bậc thang n.

Với n = 1, có một cách đi là bước 1 bậc 1 lần.

Với n = 2, ta thấy có hai cách đi, biểu diễn dưới dạng số bước chân lần lượt là: 1 + 1, 2.

Với n = 3, ta có 3 = 1 + 1 + 1 = 1 + 2 = 2 +1. Tức là có 3 cách đi.

Với n = 4, ta có 4 = 1 + 1 + 1 + 1 = 1 + 1 + 2 = 1 + 2 + 1 = 2 + 1 + 1 = 2 + 2. Có tất cả 5 cách đi.

Khi n lớn một chút thì cách liệt kê như trên là rất dài và trong trường hợp tổng quát thì giải theo cách này cũng không hiệu quả. Vậy ta phải tìm ra một cách khác. Muốn vậy, ta tiếp tục thử liệt kê để tìm số cách đi với n lớn hơn. Với n = 5, có 8 cách đi. Với n = 6, có 13 cách đi. Liệt kê dãy số cách đi, tương ứng với n tăng dần từ 1, ta được: 1, 2, 3, 5, 8, 13.

Quy luật của dãy số có một vài trường hợp quen thuộc là số thứ n phụ thuộc vào n hoặc phụ thuộc vào một hay hai số trước nó. Ở đây ta thấy 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8, 5 + 8 = 13. Ta dự đoán rằng đây là dãy số Fibônaxi [là dãy số mà kể từ số thứ ba, mỗi số bằng tổng hai số trước nó]. Nhìn nhận dưới góc độ này, ta sẽ có một cách nhìn khác, ngắn gọn hơn cách liệt kê để tìm ra đáp số của bài toán trên. Chẳng hạn ta tìm đáp số cho n = 5 khi đã biết đáp số của bài toán với giá trị n là 1, 2, 3, 4. Để bước lên bậc thang thứ 5, cần xuất phát từ bậc thứ 4 hoặc thứ 3. Từ bậc 4 bước lên 1 bậc [cách 1]. Từ bậc 3 bước 1 lần 2 bậc [cách 2] hoặc bước 2 lần 1 bậc, cách này trùng với cách 1. Nghĩa là không tính trùng nhau thì số cách đi với n = 5 bằng tổng số cách đi với n = 3 và n = 4. Đến đây, ta hoàn thành xong chứng minh dự đoán trên.

Bài toán sẽ khó hơn nếu ta thay giả thiết số bước chân mỗi lần sẽ là 1, 2 hoặc 3. Liệt kê dãy cách đi, tương ứng với n tăng dần từ 1, ta được: 1, 2, 4, 7... Bạn hãy tìm hiểu xem có đúng là trong dãy số này, mỗi số hạng, kể từ số thứ tư bằng tổng của ba số trước nó hay không nhé.

Bài tập kỳ này. Giải bài toán ban đầu với n = 9.

Bài giải gửi về Hoàng Trọng Hảo, Tạp chí Toán Tuổi thơ, 361 Trường Chinh, Thanh Xuân, Hà Nội. Ngoài phong bì ghi dự thi "Học mà chơi - chơi mà học" của Báo Hànộimới.

Đây là bài viết đầu tiên của mình trong series này trên Viblo, có lẽ chủ đề kiến thức âm nhạc sẽ là phù hợp để làm điểm bắt đầu. Mục đích viết ra chỉ là để ôn tập các phần mà bản thân thấy thú vị, và tự tìm hiểu được qua các tài liệu khác nhau trên Internet. Một trong những nhiệm vụ của nhạc lý là giúp mô tả được sự đa dạng của các thể loại, hình thái âm nhạc khác nhau dưới dạng các thành phần, thành tố cơ bản. Từ việc hiểu và phân biệt được các thành phần cơ bản này, ta có thể tìm ra được sự tương đồng và các đặc trưng khác nhau giữa từng câu hát, từng bài hát và từng thể loại âm nhạc. Sau đây là 5 [nhóm] thành phần cơ bản nhất cấu tạo nên một bản nhạc: **1. Rhythm** Rhytm [nhịp] là các yếu tố liên quan đến **trường độ**, được xác định theo thời gian và thường tuân theo một mẫu nhất định. Ví dụ, nhịp gõ của trống, của các loại dây bass hay nhịp dậm chân,... theo thời gian đều là một thể hiện của rhythm. Ngược lại thì giọng người hát và các khí cụ không đóng vai trò thể hiện nhịp điệu trong bài nhạc. Một số khái niệm được quy ước là những thành phần cấu tạo nên rhythm bao gồm:

  • Note duration [độ dài nốt nhạc]: Cái này chắc ai cũng đã được học các con nòng nọc rồi
    . Ký hiệu các nốt nhạc là đơn vị nhỏ nhất giúp xác định trường độ bài nhạc. Cụ thể ta có các nốt tròn, nốt trắng, nốt đen, nốt móc đơn, móc đôi. Độ dài nốt trước bằng 2 lần độ dài nốt sau. Hình dưới là Phân cấp cấu tạo của các ký hiệu độ dài nốt nhạc
    Ngoài ra, để biểu thị các độ dài nhỏ hơn, ví dụ 1.5 nốt đen [hình dưới], ta dùng thêm dấu chấm cạnh bên
  • Beat [phách]: là cách thể hiện của các nốt nhạc trên một cách cố định theo thời gian, giống như nhịp đập của tim. Thông thường có 2 loại phách: phách mạnh và phách nhẹ. Phách mạnh thường ở đầu một bar [ô nhịp], đóng vai trò nhấn mạnh và làm "kim chỉ nam" về mặt thời gian cho người hát, nhạc công và cả người nghe.
  • Tempo: là đơn vị đo lường độ nhanh chậm của bài nhạc, cụ thể là beat, tính bằng số nhịp/phút [BPM]. Các bài hát buồn thường có tempo thấp và ngược lại. Khi mới làm quen với nhịp, ta thường dùng metronome để đo lường yếu tố này.
  • Meter: là tên gọi để xác định số lượng nốt nhạc và thời điểm của từng nốt nhạc trong từng bar [ô nhịp] và cũng là của toàn bài nhạc. Tên meter gồm có 2 số, số trên biểu thị số lượng phách trong một ô nhịp, số dưới biểu thị độ dài của phách đó so với phách dài nhất [nốt tròn]. Ví dụ: nhịp 2/4 là nhịp gồm có 2 phách, độ dài mỗi phách bằng 1/4 nốt tròn [nốt đen], còn nhịp 6/8 thì gồm 6 phách, độ dài mỗi phách bằng 1/8 nốt tròn [nốt móc đơn]. Có 2 loại meter cơ bản là simple [nhịp đơn] và compound [nhịp phức]:
    • Simple [nhịp đơn]: có nghĩa là mỗi phách trong ô nhịp có thể chia thành 2 nốt. Ví dụ ở nhịp 2/4 gồm 2 phách, thì mỗi phách chỉ được phép chia nhỏ thành 2 phách con. Ví dụ dưới đây là Cấu tạo nhịp 2/4

Tương tự với nhịp 2/2, 2/8:

+ Compound [nhịp phức]: là nhịp mà mỗi phách có thể được chia thành 3 phách con. Ví dụ nhịp 6/8 được quy định là nhịp phức. Lý do là bởi vì nhịp 3/4 là nhịp đơn nên có thể phân nhỏ thành 6 phách, từ đó giống y đúc 6/8. Để phân biệt 2 loại nhịp này, người ta quy ước nhịp 6/8 là nhịp phức, [được phân tách từ nhịp 2/6: 2 phách, độ dài mỗi phách bằng 1/6 nốt tròn]. Sau đây là hình so sánh Nhịp 6/8 vs 3/4:

Xác định Tempo của một bài hát bằng thư viên librosa trên Python:

File mẫu tại đây: file wav

import librosa
audio, sr = librosa.load['path/to/audio.wav']
audio_file, _ = librosa.effects.trim[audio]
def tempo[file]:
     tempo, _ = librosa.beat.beat_track[file, sr=sr]
     print['tempo: ', tempo]
tempo[audio_file]
`output: tempo:  107.666015625`

Trên đây là một số khái niệm cơ bản mà mình tìm hiểu được về thành phần đầu tiên của âm nhạc. Mình sẽ hoàn thiện tiếp các thành phần ở những phần tiếp theo.

Chủ Đề