Izdelava ksilofona

Zadnja naloga pri projektu glasbene skrinjice bo izdelava Malinine različice otroškega ksilofona. To pomeni, da boš na preizkusno ploščico dodal/-a osem gumbov in jih sprogramiral/-a tako, da se bo ob pritisku na posamezen gumb predvajal zvoke posameznih tonov, ki jih lahko zaigraš na otroškem ksilofonu.

Strojna oprema

  • 1 Malina
  • 1 preizkusna ploščica (angl. breadboard)
  • 1 zatič oblike T s kablom (angl. T-cobbler with breakout cable)
  • 8 pritisnih gumbov (angl. tactile switch)
  • 8 uporov 10 kΩ
  • vtične žičke moški-moški (angl. jumper wire male-to-male)

Programska oprema

Opomba

Izkaže se, da ima pythonov modul pygame najmanj težav pri predvajanju zvočnih datotek v formatu Ogg Vorbis. Zato bo najbolje, da zvočne datoteke, ki jih želiš uporabiti v tem ali drugih projektih, najprej pretvoriš v format Ogg Vorbis. To lahko narediš na primer s programom Audacity, ali pa uporabiš kakšno spletno storitev za pretvarjanje med različnimi formati zvočnih datotek.

Navodila

  1. Poveži Malinine GPIO nožice in preizkusno ploščico s pomočjo T-zatiča in kabla.
  2. Poveži vse gumbe z nožico GND in nožicami GPIO 4, GPIO 17, GPIO 22 in GPIO 27
    ter GPIO 5, GPIO 6, GPIO 13 in GPIO 19 (glej zavihek Vezje).
  3. Odpri IDLE in ustvari novo datoteko tako, da klikneš File > New file.
  4. Shrani novo datoteko tako, da klikneš File > Save. Datoteki daj ime ksilofon.py.
  5. V isto mapo shrani tudi zvočne datoteke c1.ogg, d1.ogg, e1.ogg, f1.ogg, g1.ogg, a1.ogg, b1.ogg in c2.ogg.
  6. V datoteko ksilofon.py vnesi kodo z zavihka Koda.
  7. Shrani kodo s Ctrl+S in jo nato zaženi s F5.
  8. Izmenično pritiskaj gumbe in zaslišati bi moral/-a zvoke posameznih tonov otroškega ksilofona.
  9. Na naslednji strani lahko najdeš nekaj primerov skladbic, ki jih lahko zaigraš na Malinin ksilofon.
Opomba

Če je mogoče, uporabi žičke istih barv, kot so na sliki vezja (glej zavihek Vezje), saj so z istimi barvami označene tudi note v skladbicah na naslednji strani.



# encoding: utf-8
import gpiozero
import pygame
pygame.init()

gumb_c1 = gpiozero.Button(19) # ali Button(25)
gumb_d1 = gpiozero.Button(13) # ali Button(24)
gumb_e1 = gpiozero.Button(6)  # ali Button(23)
gumb_f1 = gpiozero.Button(5)  # ali Button(18)
gumb_g1 = gpiozero.Button(22)
gumb_a1 = gpiozero.Button(27)
gumb_h1 = gpiozero.Button(17)
gumb_c2 = gpiozero.Button(4)

ton_c1 = pygame.mixer.Sound('c1.ogg')
ton_d1 = pygame.mixer.Sound('d1.ogg')
ton_e1 = pygame.mixer.Sound('e1.ogg')
ton_f1 = pygame.mixer.Sound('f1.ogg')
ton_g1 = pygame.mixer.Sound('g1.ogg')
ton_a1 = pygame.mixer.Sound('a1.ogg')
ton_h1 = pygame.mixer.Sound('b1.ogg')
ton_c2 = pygame.mixer.Sound('c2.ogg')

while True:
    if gumb_c1.is_pressed:
        ton_c1.play()
    if gumb_d1.is_pressed:
        ton_d1.play()
    if gumb_e1.is_pressed:
        ton_e1.play()
    if gumb_f1.is_pressed:
        ton_f1.play()
    if gumb_g1.is_pressed:
        ton_g1.play()
    if gumb_a1.is_pressed:
        ton_a1.play()
    if gumb_h1.is_pressed:
        ton_h1.play()
    if gumb_c2.is_pressed:
        ton_c2.play()

Izvorna koda