稼働中

micro:bit V2(m_28)microbit.microphone .SoundEvent

microphone SoundEvent

MicroPython micro:bit V2 の「microbit」モジュールには V1から追加された
「audio, microphone, pin_logo, pin_speaker, set_volume, speaker, ws2812_write, Sound, SoundEvent」の関数があります。
※「microbit」モジュールを「from microbit import *」でインポートした前提で記載しています。

(13)microbit.SoundEvent

サウンドのイベント(マイクの状態)です。’microphone’の関数で使います。
SoundEvent.LOUD
大きな音(大きな音から静かな音へのサウンドイベントの移行を表します。)
SoundEvent.QUIET
静かな音(静かな音から大きな音へのサウンドイベントの移行を表します。)


>>> type(Sound)
<class 'type'>

>>> microphone.current_event() == (SoundEvent.LOUD)
False
>>> microphone.was_event(SoundEvent.QUIET)
True

(14)microbit.microphone

micro:bitに搭載されているマイクを操作をします。マイクと言うより音センサーと考えた方が良いかもしれません。
「current_event, is_event, was_event, get_events, sound_level, set_threshold」のメソッドがあります。

作動させるとマイクのマーク表示されます。マイクを無効にするにはreset()や本体ボタンでリセットが必要なようです。ソフトリブートで無効にすることはできません。
マイク表示

(14-1)current_event()

現在のマイクのレベル(SoundEvent.LOUD、SoundEvent.QUIET)を調べます。


>>> print(microphone.current_event())
SoundEvent('quiet')
>>> if microphone.current_event()== SoundEvent.QUIET:
    print('QUIET')

QUIET
>>> 

(14-2)is_event(event)

最新のマイクのレベル(SoundEvent.LOUD、SoundEvent.QUIET)を調べ、ブール値(True、False)を返します。サウンドイベントの履歴はクリアされません。


>>> print(microphone.is_event(SoundEvent.QUIET))
True

(14-3)was_event(event)

履歴のマイクのレベル(SoundEvent.LOUD、SoundEvent.QUIET)を調べ、ブール値(True、False)を返します。サウンドイベントの履歴はクリアされます。


>>> print(microphone.was_event(SoundEvent.LOUD))
True
>>> print(microphone.was_event(SoundEvent.LOUD))
False   # 履歴がクリアされたので

(14-4)get_events

サウンドイベントの履歴を返します。古い順に並んでいます。マイクONしていればサウンドイベントを記録しています。実行後は履歴はクリアされます。
サウンドイベントの履歴なので’loud’と’quiet’の繰返しになると思います。データは過去8個までのようです。


>>> print(microphone.get_events())
(SoundEvent('loud'), SoundEvent('quiet'), SoundEvent('loud'), SoundEvent('quiet'),
 SoundEvent('loud'), SoundEvent('quiet'), SoundEvent('loud'), SoundEvent('quiet'))
>>> print(microphone.get_events())
()                  #実行後は履歴クリア
>>> 

(14-5)sound_level()

マイクの音量を返します。0-255の値です。


>>> for i in range(10):
    print(i,microphone.sound_level())
    sleep(500)

0 0
1 21
2 18
3 12
4 31
5 18
6 0
7 8
8 0
9 0
>>> 

(14-6)set_threshold(event, value)

サウンドイベントの閾値を設定します。たぶんSoundEvent.LOUDだけだと思います。


>>> microphone.set_threshold(SoundEvent.LOUD, 10)
>>> 

参考例


from microbit import *
microphone.set_threshold(SoundEvent.LOUD, 10)

for i in range(10):
    a=microphone.current_event()
    b=microphone.sound_level()
    print(i,a,b)
    sleep(500)
    
c=microphone.get_events()
print(c)
c=microphone.get_events()
print(c) 

実行結果
机の上で左右に強弱で擦った時のサウンドイベントと音レベルのデータ


>>> %Run -c $EDITOR_CONTENT
0 SoundEvent('quiet') 0
1 SoundEvent('quiet') 0
2 SoundEvent('loud') 7
3 SoundEvent('loud') 17
4 SoundEvent('loud') 2     # eventとlevelの読取りの時間差でズレ
5 SoundEvent('quiet') 4
6 SoundEvent('quiet') 5
7 SoundEvent('quiet') 0
8 SoundEvent('loud') 11
9 SoundEvent('quiet') 2
(SoundEvent('loud'), SoundEvent('quiet'), SoundEvent('loud'), SoundEvent('quiet'), 
SoundEvent('loud'), SoundEvent('quiet'), SoundEvent('loud'), SoundEvent('quiet'))
()                        # 履歴は消えている
>>> 

まとめ

micro:bit V2のmicrobitモジュールのmicrophone、SoundEventについて記載しました。