マイク V2

このオブジェクトを使うと、micro:bit V2 に内蔵のマイクにアクセスできます。マイクは音に反応するために使えます。マイク入力は、マイクを使っているときに点灯するボードの前面のマイクアクティビティ LED の横にあります。

micro:bit 上ののマイク LED

サウンドイベント

マイクは、音の振幅と波長に基づいて事前定義されたサウンドイベントに応答できます。

これらのサウンドイベントは SoundEvent クラスのインスタンスによって表され、次の microbit.SoundEvent 変数を介してアクセスできます。

  • microbit.SoundEvent.QUIET: 発話やBGMのように「うるさくなった」(loud)から「静かになった」(quiet)への変化を表します。
  • microbit.SoundEvent.LOUD: 拍手や叫び声のように「静かになった」(quiet)から「うるさくなった」(loud)への変化を表します。

関数

microbit.microphone.current_event()
  • 戻り値: 記録されている最新のサウンドイベントの名前、SoundEvent('loud') もしくは SoundEvent('quiet') を返します。
microbit.microphone.was_event(event)
  • event: サウンドイベント。 SoundEvent.LOUD または SoundEvent.QUIET
  • 戻り値: 直前の呼出しから少なくとも一度は指定のサウンドイベントが発生した場合は true 、さもなければ false を返します。 was_event() は戻る前にサウンドイベントの履歴をクリアします。
microbit.microphone.is_event(event)
  • event: サウンドイベント。 SoundEvent.LOUD または SoundEvent.QUIET
  • 戻り値: 直前の呼出しから発生した最新のサウンドイベントが指定のものであれば true 、さもなければ false を返します。サウンドイベントの履歴はクリアしません。
microbit.microphone.get_events()
  • 戻り値: サウンドイベント履歴のタプル。最新のものが最後にリストされます。 get_events() は戻る前にサウンドイベント履歴をクリアします。
microbit.microphone.set_threshold(event, value)
  • event: サウンドイベント。 SoundEvent.LOUD または SoundEvent.QUIET
  • value: 0-255 の範囲の閾値レベル。たとえば set_threshold(SoundEvent.LOUD, 250) は音が非常に大きい場合にのみトリガされます(>= 250)。
microbit.microphone.sound_level()
  • 戻り値: 0-255の範囲で表される音圧レベルを返します。

サンプルコード

マイクAPIのいくつかの機能を実行するサンプルコード:

# マイクの基本テストです。このテストは、ボタンAが押され、「うるさくなった」や
# 「静かになった」 *ときに* 表示を更新し、結果を表示します。ボタンBでは、
# 「うるさくなった」や「静かになった」 *ことがあれば* 表示を更新し、結果を表示します。
# ゆさぶった時には、最後に発生したサウンドイベントを表示します。シェイクする前に、
# 「うるさくなった」や「静かになった」を起こしながらこのテストを試してください。\m
from microbit import *

display.clear()
sound = microphone.current_event()

while True:
    if button_a.is_pressed():
        if microphone.current_event() == SoundEvent.LOUD:
            display.show(Image.SQUARE)
            uart.write('isLoud\n')
        elif microphone.current_event() == SoundEvent.QUIET:
            display.show(Image.SQUARE_SMALL)
            uart.write('isQuiet\n')
        sleep(500)
    display.clear()
    if button_b.is_pressed():
        if microphone.was_event(SoundEvent.LOUD):
            display.show(Image.SQUARE)
            uart.write('wasLoud\n')
        elif microphone.was_event(SoundEvent.QUIET):
            display.show(Image.SQUARE_SMALL)
            uart.write('wasQuiet\n')
        else:
            display.clear()
        sleep(500)
    display.clear()
    if accelerometer.was_gesture('shake'):
        sounds = microphone.get_events()
        soundLevel = microphone.sound_level()
        print(soundLevel)
        for sound in sounds:
            if sound == SoundEvent.LOUD:
                display.show(Image.SQUARE)
            elif sound == SoundEvent.QUIET:
                display.show(Image.SQUARE_SMALL)
            else:
                display.clear()
            print(sound)
            sleep(500)