Dự án 11: Hộp nhạc Giáng sinh - MakerEdu Inventor Kit for Micro:bit

From MakerLab Wiki
Jump to navigation Jump to search

Mức độ: Khó ★★★★★★★☆☆

Danh sách thiết bị

Mô tả dự án

Trong dự án này, các bạn sẽ làm hộp nhạc Giáng Sinh. Khi nhấn cùng lúc 2 nút A+B, micro:bit sẽ phát bài "Santa Claus is coming to town".

Bạn sẽ được học một số khái niệm cơ bản về âm thanh. Và sau bài học, bạn có thể lập trình bất kì bản nhạc nào mình muốn lên micro:bit.

Giải thích

Nốt nhạc - (Note):

Về cơ bản những âm thanh bạn nghe thấy được tạo ra bởi sự "dao động" của sóng âm.

MakeCode Kit 15 SoundWave.png

_ Bằng cách thay đổi "tần số dao động" (Hz), bạn có thể tạo ra bất kì âm thanh nào, từ âm trầm tới ẩm bổng. Và khi kết hợp những mức tần số này với nhau hợp lý, bạn có thể tạo ra vô số "giai điệu" hay.

_ Có giai điệu mang lại cho ta cảm giác vui vẻ, hạnh phúc, thì cũng có giai điệu làm ta buồn, làm ta khóc, và cũng có giai điệu làm ta cảm thấy sợ hãi, hồi hộp, ... Rất nhiều cảm xúc mà âm nhạc mang lại cho ta. Vậy làm sao để ta lưu trữ lại được chúng, nếu ta thích một giai điệu nào đó đây?

_ Nếu lưu lại dưới dạng giá trị tần số thì quá khó nhớ và khó dùng cho chính chúng ta. Từ nhu cầu đấy, hệ thống nốt nhạc ra đời: với mỗi "nốt nhạc" sẽ tương ứng một "giá trị tần số".

_ Trong một dãi nốt nhạc, ta chia thành từng nhóm 7 nốt cơ bản, gồm Đô (C) - Rê (D) - Mi (E) - Fa (F) - Sol (G) - La (A) - Si (B).

MakeCode Kit 15 7Note.png

Âm lượng - (Volume):

_ Để tăng giảm âm lượng, ta điều chỉnh tăng giảm "biên độ dao động" của sóng âm.

_ Khi tăng biên độ ta sẽ nghe được âm thanh lớn dần, và ngược lại giảm biên bộ ta sẽ nghe được âm thanh nhỏ dần.

Thời lượng - (Duration):

_ Trong một giai điệu, không chỉ có sự kết hợp các nốt nhạc với nhau. Mà còn có yếu tố "thời lượng phát""thời lượng nghỉ".

_ Đó là khoảng thời gian phát một nốt nhạc, làm ta nghe được một âm thanh kéo dài trong bao lâu.

_ Và giữa các nốt nhạc, khi phát xong một nốt có thể cần hoặc không một khoảng thời gian nghỉ trước khi phát nốt nhạc kế tiếp.

Nhịp độ - (Tempo):

_ Với một giai điệu, bạn có thể thay đổi "nhịp độ" của nó. Bằng cách "kéo giãn" hoặc "thu hẹp" tổng thời gian phát toàn giai điệu đó.

_ Điều này làm cho giai điệu bạn nghe có nhịp độ nhanh hơn hoặc chậm hơn so với mức bình thường.




Icon-Info-White.png Tip:
Thực hành với khối play sound... để kiểm nghiệm những khái niệm trên.
MakeCode Kit 15 BlockSound.PNG

Các bước thực hiện (Giai đoạn 1)

Tạo code

  1. Tạo 1 hàm có tên "Santa Claus is coming to town", xong bấm nút Done.
  2. Trong vùng code, bạn tạo chức năng cho khối function Santa Claus is coming to town như hình dưới.
    → Khối này khi được gọi sẽ phát tuần tự từng nốt nhạc từ đầu đến cuối.
Melody: Santa Claus is coming to town.
Note: (3) Low ; (4) Middle ; (5) High
|
NOTE_G4,
NOTE_E4,
NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_C5,
NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4,
NOTE_E4, NOTE_G4, NOTE_C4, NOTE_E4,
NOTE_D4, NOTE_F4, NOTE_B3,
NOTE_C4

Beat:
|
1/8,
1/8, 1/8, 1/4, 1/4, 1/4,
1/8, 1/8, 1/4, 1/4, 1/4,
1/8, 1/8, 1/4,
1/4, 1/4,
1/8, 1/8, 1/4, 1/2,
1/4, 1/4, 1/4, 1/4,
1/4, 1/2, 1/4,
1

Blocks

MakeCode Kit 11a.png

Javascript

function Santa_Claus_is_coming_to_town() {
  music.playTone(392, music.beat(BeatFraction.Eighth))
  music.playTone(330, music.beat(BeatFraction.Eighth))
  music.playTone(349, music.beat(BeatFraction.Eighth))
  music.playTone(392, music.beat(BeatFraction.Quarter))
  music.playTone(392, music.beat(BeatFraction.Quarter))
  music.playTone(392, music.beat(BeatFraction.Quarter))
  music.playTone(440, music.beat(BeatFraction.Eighth))
  music.playTone(494, music.beat(BeatFraction.Eighth))
  music.playTone(523, music.beat(BeatFraction.Quarter))
  music.playTone(523, music.beat(BeatFraction.Quarter))
  music.playTone(523, music.beat(BeatFraction.Quarter))
  music.playTone(330, music.beat(BeatFraction.Eighth))
  music.playTone(349, music.beat(BeatFraction.Eighth))
  music.playTone(392, music.beat(BeatFraction.Quarter))
  music.playTone(392, music.beat(BeatFraction.Quarter))
  music.playTone(392, music.beat(BeatFraction.Quarter))
  music.playTone(440, music.beat(BeatFraction.Eighth))
  music.playTone(392, music.beat(BeatFraction.Eighth))
  music.playTone(349, music.beat(BeatFraction.Quarter))
  music.playTone(349, music.beat(BeatFraction.Half))
  music.playTone(330, music.beat(BeatFraction.Quarter))
  music.playTone(392, music.beat(BeatFraction.Quarter))
  music.playTone(262, music.beat(BeatFraction.Quarter))
  music.playTone(330, music.beat(BeatFraction.Quarter))
  music.playTone(294, music.beat(BeatFraction.Quarter))
  music.playTone(349, music.beat(BeatFraction.Half))
  music.playTone(247, music.beat(BeatFraction.Quarter))
  music.playTone(262, music.beat(BeatFraction.Whole))
}

Các bước thực hiện (Giai đoạn 2)

Tạo code

  1. Tạo biến có tên "play".
    → Cho phép micro:bit phát nhạc hoặc không.
  2. Tạo 1 khối on start như hình dưới.
    → Cài đặt "âm lượng""nhịp độ" của loa.
  3. Tạo 1 khối on button A+B pressed như hình dưới.
    → Khối này thực hiện khi nhấn cùng lúc nút A+B, biến "play" sẽ được đặt thành 1 (cho phép phác nhạc).
  4. Tạo 1 khối forever như hình dưới.
    → Khối này kiểm tra liên tục, nếu thấy biến "play" bằng 1 sẽ cho phát nhạc. Đến khi bài nhạc kết thúc, sẽ đặt về lại 0.

Blocks

MakeCode Kit 11b.png

Javascript

let play = 0

music.setVolume(255)
music.setTempo(35)

input.onButtonPressed(Button.AB, function () {
  basic.showIcon(IconNames.EigthNote)
  play = 1
})

basic.forever(function () {
  if (play) {
    Santa_Claus_is_coming_to_town()
    basic.clearScreen()
    play = 0
  }
})

Nạp code

  1. Nhấp vào Download để nạp code của bạn sang micro:bit.
  2. Nhấn đồng thời nút Anút B để xem code hoạt động thế nào.

Kết quả

... hình dự án

Bài tập thêm

Dựa theo cách làm trên, các bạn thử lập trình cho micro:bit phát thêm bài "We wish you a merry Christmas""Jingle Bells" nhé.

Melody: We wish you a merry Christmas.
Note: (3) Low ; (4) Middle ; (5) High
|
NOTE_B3, 
NOTE_F4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4,
NOTE_D4, NOTE_D4, NOTE_D4,
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4,
NOTE_E4, NOTE_E4, NOTE_E4,
NOTE_A4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_G4,
NOTE_F4, NOTE_D4, NOTE_B3, NOTE_B3,
NOTE_D4, NOTE_G4, NOTE_E4,
NOTE_F4

Beat:
|
1/4,
1/4, 1/8, 1/8, 1/8, 1/8,
1/4, 1/4, 1/4,
1/4, 1/8, 1/8, 1/8, 1/8,
1/4, 1/4, 1/4,
1/4, 1/8, 1/8, 1/8, 1/8,
1/4, 1/4, 1/8, 1/8,
1/4, 1/4, 1/4,
1/2
Melody: Jingle Bells.
Note: (3) Low ; (4) Middle ; (5) High
|
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
NOTE_E5,
NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
NOTE_D5, NOTE_G5

Beat:
|
1/8, 1/8, 1/4,
1/8, 1/8, 1/4,
1/8, 1/8, 1/8, 1/8,
1/2,
1/8, 1/8, 1/8, 1/8,
1/8, 1/8, 1/8, 1/16, 1/16,
1/8, 1/8, 1/8, 1/8,
1/4, 1/4