话筒 V2

此对象允许您访问 micro:bit V2上可用的内置麦克风。它可用于响应声音。麦克风输入位于电路板正面,旁边是麦克风活动 LED,使用麦克风时该 LED 会亮起。

micro:bit with microphone LED on

声音事件

麦克风可以根据声音的幅度和波长响应一组预定义的声音事件。

这些声音事件由SoundEvent 类的实例表示,可通过 中的变量访问microbit.SoundEvent:

  • microbit.SoundEvent.QUIET:表示声音事件的推移,loudquiet 喜欢说话或背景音乐。
  • microbit.SoundEvent.LOUD: 表示声音事件的推移,quietloud象拍手或喊叫。

职能

microbit.microphone.current_event()
  • 返回: 最后录制的声音事件的名称, SoundEvent('loud')SoundEvent('quiet').
microbit.microphone.was_event(event)
  • event: 声音事件,例如SoundEvent.LOUDSoundEvent.QUIET.
  • 返回: true 如果自上次调用以来至少听到一次声音,否则falsewas_event() 还会在返回之前清除声音事件历史记录。
microbit.microphone.is_event(event)
  • event: 声音事件,例如SoundEvent.LOUDSoundEvent.QUIET.
  • 返回: true 如果声音事件是自上次调用以来最近的事件,否则 false。它不会清除声音事件历史记录。
microbit.microphone.get_events()
  • 返回:事件历史的元组。最新的列在最后。 get_events()还会在返回之前清除声音事件历史记录。
microbit.microphone.set_threshold(event, value)
  • event:声音事件,例如SoundEvent.LOUDSoundEvent.QUIET.
  • value:0-255 范围内的阈值级别。例如, 只有在声音很大(> = 250)时才会触发。 set_threshold(SoundEvent.LOUD, 250)
microbit.microphone.sound_level()
  • return: 0 到 255 范围内的声压级表示。

例子

一个例子,贯穿了麦克风 API 的一些功能:

# Basic test for microphone.  This test should update the display when
# Button A is pressed and a loud or quiet sound *is* heard, printing the
# results. On Button B this test should update the display when a loud or
# quiet sound *was* heard, printing the results. On shake this should print
# the last sounds heard, you should try this test whilst making a loud sound
# and a quiet one before you shake.

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)