背景
Sphero IDEには音声再生のブロックが用意されています。
boltは本体ではなく、制御するPCやスマホから音が鳴るようです。
Scratch
サウンドの欄にブロックがありました。
「ロボットの321の音を再生する」
サウンドのブロックの右にあるwaitを押すと、waitと「続ける」を選ぶことができました。
「続ける」は音声を再生しながら次に進むということでした。
spheroV2
sphero_edu.pyには音声再生の関数が見つかりませんでした。
代わりにpygameモジュールを用いて再生するようにしました。
import time
from spherov2 import scanner
from spherov2.sphero_edu import EventType, SpheroEduAPI
from spherov2.types import Color
from spherov2.utils import FrameRotationOptions
import os
import pygame
print("Testing Starting...")
print("Connecting to Bolt...")
toy = scanner.find_BOLT()
if toy is not None:
print("Connected.")
with SpheroEduAPI(toy) as api:
pygame.mixer.init(frequency=44100)
api.set_stabilization(False)
api.set_main_led(Color(r=50, g=0, b=0)) #Sets whole Matrix
time.sleep(1)
file_path = os.path.abspath("jinglebells.mp3")
pygame.mixer.music.load(file_path)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
continue
api.set_main_led(Color(r=0, g=0, b=0)) #Sets whole Matrix
time.sleep(1)
else:
print("Failed to connect to Sphero.")
実行結果はこちらのようになりました。
git\spherov2.py\spherov2\test>python BoltTest_sound.py
pygame 2.6.1 (SDL 2.28.4, Python 3.12.7)
Hello from the pygame community. https://www.pygame.org/contribute.html
Testing Starting...
Connecting to Bolt...
Connected.
音楽が終了するまでは次に進まないですので、Scratchの「続く」のような機能は並列化などで対応できるのかもしれないです。
まとめ
spheroV2とpygamesを用いて、サウンドをpythonで模擬的に動かすことができました。
bluetoothイヤホンを改造して、bolt側にスピーカーをつけると面白そうです。