Jak přehrát hudbu pomocí Pico:ed

Zdroj: How to Play Music With Pico:ed

1. Nainstalujte firmware CircuitPython

Nejprve bude potřeba nainstalovat pro Pico:ed nějaký firmware. Doporučujeme použít CircuitPython. Na stránce CircuitPythonu si stáhněte nejnovější firmware, potom stiskněte tlačítko BOOTSEL na zadní straně Pico:ed a připojte jej k počítači pomocí USB kabelu, nakonec tlačítko BOOTSEL uvolněte. Měla by se zobrazit ikonka disku RPI-RP2 (vizte obrázek níže). Přetáhněte stažený firmware na tento disk a dokončete instalaci, poté se název disku změní na CIRCUITPY.

Po otevření disku byste měli vidět níže uvedené soubory a složky, mezi nimiž je soubor code.py pro kódování a složka lib pro uložení knihoven. Pokud potřebujete další nápady na to, jak používat Pico:ed, projděte si dokumentaci zde, kde najdete další podrobnosti o prvotním spuštění.

2. Přehrávejte melodie pomocí zabudovaného bzučáku

Podobně jako u micro:bitu je pro Pico:ed k dispozici knihovna elecfreaks_music, která zjednodušuje přehrávání hudby. Použití je poměrně snadné, protože v knihovně jsou již předpřipravené melodie, a tak můžete přehrávat hudbu pomocí pouhých dvou řádků. Pojďte si to vyzkoušet!

Otevřete v CIRCUITPY soubor code.py a naprogramujte jej podle následujícího postupu, aby Pico:ed přehrál DADADADUM.

from picoed import music

music.play(music.DADADADUM)

Jak vidíte, přehrávání hudby je docela snadné. Kromě výše uvedeného DADADADUM má hudební modul k dispozici i všechny ostatní vestavěné melodie, které jsou běžně dostupné pro micro:bit.

  • DADADADUM
  • ENTERTAINER
  • PRELUDE
  • ODE
  • NYAN
  • RINGTONE
  • FUNK
  • BLUES
  • BIRTHDAY
  • WEDDING
  • FUNERAL
  • PUNCHLINE
  • PYTHON
  • BADDY
  • CHASE
  • BA_DING
  • WAWAWAWAA
  • JUMP_UP
  • JUMP_DOWN
  • POWER_UP
  • POWER_DOWN

Kromě přehrávání vestavěných melodií můžete přehrávat také libovolnou hudbu, kterou máte rádi. Před samotným programováním musíte nejprve pochopit, jak melodii pomocí jazyka Python správně zapsat.

Hudební notový zápis:

Jednotlivá nota je specifikována takto:

Anglicky – NOTE[octave][:duration]

Česky – NOTA[oktáva][:hodnota noty]

Například A1:4 označuje notu „a“ v jednočárkované oktávě (1), která je čtvrťová (hodnota noty je libovolná délka trvání definovaná funkcí pro nastavení tempa – vizte níže). Pokud použijete místo názvu noty R, pak se s ní zachází jako s pauzou (tichem).

Akcidentální tóny (snížené a zvýšené) jsou označeny znaky b (snížení o půltón pomocí symbolu b) a # (zvýšení o půltón pomocí symbolu křížku). Například Ab je as a C# je cis.

U názvů not se nerozlišují velká a malá písmena.

Parametry octave (oktáva) a duration (hodnota noty) jsou stavy, které se přenášejí do následujících notových hodnot, dokud nejsou zadány jiné notové hodnoty. Výchozí stavy jsou oktáva = 4 (představuje jednočárkované c) a hodnota noty = 4 (4 = čtvrťová nota, dle výchozího nastavení tempa – vizte níže).

Pokud zvolíte výchozí hodnotu noty 4, představuje pak následující následující příklad rozložený akord C dur s notami o následující délce: čtvrťová (c1), osminová (e1), osminová (g1), čtvrťová (c2).

[‚c1:4‘, ‚e:2‘, ‚g‘, ‚c2:4‘].

Úvod Beethovenovy 5. symfonie by byl zakódován takto:

[‚r4:2‘, ‚g‘, ‚g‘, ‚g‘, ‚eb:8‘, ‚r:2‘, ‚f‘, ‚f‘, ‚f‘, ‚d:8‘]

Definice a rozsah oktávy odpovídají tabulce uvedené na této stránce. Například jednočárkované „c“ je značeno jako „c4“ a komorní „a“ (440) je „a4“. Každá nová oktáva začíná notou „c“.

Nyní zkusíme nechat přehrát vlastní melodii podle výše uvedených paramentrů. Ukázka kódu je zde:

from picoed import music

# play Prelude in C.
notes = [
    'c4:1', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5',
    'c4', 'd', 'a', 'd5', 'f5', 'a4', 'd5', 'f5', 'c4', 'd', 'a', 'd5', 'f5', 'a4', 'd5', 'f5',
    'b3', 'd4', 'g', 'd5', 'f5', 'g4', 'd5', 'f5', 'b3', 'd4', 'g', 'd5', 'f5', 'g4', 'd5', 'f5',
    'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5',
    'c4', 'e', 'a', 'e5', 'a5', 'a4', 'e5', 'a5', 'c4', 'e', 'a', 'e5', 'a5', 'a4', 'e5', 'a5',
    'c4', 'd', 'f#', 'a', 'd5', 'f#4', 'a', 'd5', 'c4', 'd', 'f#', 'a', 'd5', 'f#4', 'a', 'd5',
    'b3', 'd4', 'g', 'd5', 'g5', 'g4', 'd5', 'g5', 'b3', 'd4', 'g', 'd5', 'g5', 'g4', 'd5', 'g5',
    'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5',
    'a3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'a3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5',
    'd3', 'a', 'd4', 'f#', 'c5', 'd4', 'f#', 'c5', 'd3', 'a', 'd4', 'f#', 'c5', 'd4', 'f#', 'c5',
    'g3', 'b', 'd4', 'g', 'b', 'd', 'g', 'b', 'g3', 'b3', 'd4', 'g', 'b', 'd', 'g', 'b'
]

music.play(notes)

Nyní už víte, jak správně zapsat svou oblíbenou melodii, ale jak naprogramovat Pico:ed tak, aby při přehrávání hudby prováděl další funkce? K tomu budeme potřebovat funkci asyncio z CircuitPythonu. Zde je ukázka, jak při přehrávání hudby naprogramovat blikání.

import board
import digitalio
import asyncio
from picoed import music

led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT

async def blink(interval):
    while True:
        led.value = True
        await asyncio.sleep(interval)
        led.value = False
        await asyncio.sleep(interval)

async def main():
    player = asyncio.create_task(music.play_async(music.PYTHON))
    light = asyncio.create_task(blink(0.15))
    await asyncio.gather(player)
    await asyncio.gather(light)

asyncio.run(main())

3. Připojte reproduktor a přehrávejte hudbu i ve formátu wav

Pomocí jazyka CircuitPython můžete přehrávat hudbu jak ve formátech wav, tak i ve formátu mp3 a ovládat reproduktor pomocí PWM pinů nebo dokonce přehrávat hudbu přes externí reproduktor. Teoreticky vzato, je zabudovaný bzučák schopen přehrávat hudbu ve formátu wav, ale úroveň zvuku bude nejspíš velmi špatná, protože bzučák nemá dostatečně vysoký výkon pro zesílení. Abychom si mohli ukázat, jak přehrávat hudbu ve formátu wav, budeme k tomu potřebovat externí reproduktor.

Nejprve si připravte externí reproduktor a připojte jej k Pico:edu 3,5mm audiokabelem a pomocí svorek s krokodýly. Schéma zapojení vidíte na obrázku níže:

Pro otestování si stáhněte zvukový soubor StreetChicken.wav. Zkopírujte jej na disk CIRCUITPY podle níže uvedeného schématu:

Na disku CIRCUITPY otevřete soubor code.py a začněte programovat. Pro přehrávání souboru ve formátu wav zkopírujte níže uvedený program. Je to jednoduché!

import board
import audiocore
import audiopwmio

data = open("StreetChicken.wav", "rb")
wav = audiocore.WaveFile(data)
audio = audiopwmio.PWMAudioOut(board.P0)

audio.play(wav)

Správný hudební přehrávač musí mít funkce přehrávání, zastavení, pozastavení a obnovení přehrávání. A jak tyto funkce zprovoznit na Pico:ed? Použijte k tomu vestavěná tlačítka A a B. Tlačítko A je možné nastavit pro přehrávání/zastavení, tlačítko B pro pozastavení/obnovení přehrávání.

Podrobný program naleznete v níže uvedeném příkazu:

import board
import audiocore
import audiopwmio
from picoed import *

data = open("StreetChicken.wav", "rb")
wav = audiocore.WaveFile(data)
audio = audiopwmio.PWMAudioOut(board.P0)

is_paused = False

while True:
    if button_a.was_pressed():
        if audio.playing:
            audio.stop()
        else:
            audio.play(wav, loop=True)
            is_paused = False

    if audio.playing and button_b.was_pressed():
        if is_paused:
            audio.resume()
            is_paused = False
        else:
            audio.pause()
            is_paused = True

Teď už umíte ovládat přehrávání hudby, ale ještě tomu něco chybí. Pokud totiž zrovna nepřeháváte hudbu, nevíte, zda je Pico:ed ve stavu pozastavení nebo zastavení. V lepší orientaci mezi stavy přehrávání Vám pomůže doplnit jednotlivé stavy o dynamické efekty. A k tomu se perfektně hodí LED obrazovka Pico:ed! Při zastavení program zobrazí „čtverec“; při přehrávání program zobrazí dynamické virtuální frekvenční spektrum a při pozastavení program zobrazí frekvenční spektrum klidné. Pro vyobrazení frekvenčního spektra samozřejmě neexistuje žádné pravidlo a používá se pouze náhodná funkce CircuitPythonu, protože znázorňovat skutečné spektrum je poměrně složité.

Konkrétní příkaz naleznete níže:

import board
import audiocore
import audiopwmio
from picoed import *
import random
import time

data = open("StreetChicken.wav", "rb")
wav = audiocore.WaveFile(data)
audio = audiopwmio.PWMAudioOut(board.P0)

is_paused = False

def show_virtual_spectrum(interval=0):
    display.clear()
    for x in range(display.width):
        for y in range(random.randint(0, display.height)):
            display.pixel(x, 6 - y, 12 - y)
    time.sleep(interval)

def show_stop():
    display.show(Image.SQUARE)

while True:
    if audio.playing:
        if not is_paused:
            show_virtual_spectrum()
    else:
        show_stop()

    if button_a.was_pressed():
        if audio.playing:
            audio.stop()
        else:
            audio.play(wav, loop=True)
            is_paused = False

    if audio.playing and button_b.was_pressed():
        if is_paused:
            audio.resume()
            is_paused = False
        else:
            audio.pause()
            is_paused = True

4. Displej

5. Závěr

A to je vše co potřebujete znát, abyste mohli pomocí Pico:ed přehrávat hudbu. Pokud máte zájem o podrobnější informace k Pico:ed, projděte si kompletní dokumentaci.

Podobné příspěvky

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *