Micrófono
Introducción
Robobo puede identificar notas musicales, palmadas o conocer el nivel de ruido ambiente mediante el micrófono del Smartphone. Este módulo no está implementado en el simulador.
Elementos de programación
1. Clase Note
Representa una nota detectada por Robobo.
Atributos:
-
-
-
- name (string): La nota musical en formato texto, según la nomenclatura inglesa, que es:
-
-
| DO | DO# | RE | RE# | MI | FA | FA# | SOL | SOL# | LA |
| C | Cs | D | Ds | E | F | Fs | G | Gs | S |
-
-
-
- duration (int): La duración de la nota en milisegundos.
-
-
2. Método readLastNote
| readLastNote() |
|
Lee la última nota detectada por el sensor de notas.
Devuelve: |
Ejemplo de Uso
El siguiente programa genera notas musicales desde MI hasta RE, utilizando el método playNote. Luego, esas notas se leen con el método readLastNote y se dice en voz alta la nota detectada. Al ejecutar este programa, se puede observar como para algunas notas emitidas (sostenidas), no se dice nada.
from robobopy.Robobo import Robobo
rob = Robobo("10.113.26.150")
rob.connect()
note_to_play = 52
while note_to_play <= 64:
rob.playNote(note_to_play, 1)
note_to_play+=1
read_note = rob.readLastNote()
if read_note == 'C':
rob.sayText('Acabo de oir un DO')
else:
if read_note == 'D':
rob.sayText('Acabo de oir un RE')
else:
if read_note == 'E':
rob.sayText('Acabo de oir un MI')
else:
if read_note == 'F':
rob.sayText('Acabo de oir un FA')
else:
if read_note == 'G':
rob.sayText('Acabo de oir un SOL')
else:
if read_note == 'A':
rob.sayText('Acabo de oir un LA')
else:
if read_note == 'B':
rob.sayText('Acabo de oir un SI')
rob.wait(1)3. Método whenANoteIsDetected
| whenANoteIsDetected(callback) |
|
Establece la función callback que se llama cuando se detecta una nueva nota.
Parámetros: |
Ejemplo de Uso
El siguiente programa hace que Robobo diga que acaba de oír la nota Do si efectivamente esta nota ha sonado y haciendo uso del método whenANoteIsDetected.
from robobopy.Robobo import Robobo
def fun():
if rob.readLastNote() == 'C':
rob.sayText('Acabo de oir un DO')
rob = Robobo('10.113.26.150')
rob.connect()
rob.whenANoteIsDetected(fun)
# el programa se mantiene en ejecución continua
while True:
rob.wait(0.1)4. Método readClapCounter
| readClapCounter() |
|
Lee el número de palmadas registrado desde el último reinicio.
Devuelve: |
5. Método resetClapCounter
| resetClapCounter() |
| Reinicia el contador de palmadas. |
Ejemplo de Uso
El siguiente programa detecta cuando se realizan dos o más palmadas consecutivas (en menos de dos segundos), lo cual hace que Robobo emita un sonido de alegría y ponga la expresión de sorpresa. Para ello se utiliza una variable como temporizador el cual se reinicia cada 2 segundos y el método readClapCounter. Si damos una única palmada, no ocurre nada.
from robobopy.Robobo import Robobo
from robobopy.utils.Sounds import Sounds
from robobopy.utils.Emotions import Emotions
rob = Robobo('10.113.26.150')
rob.connect()
timer = 0
while True:
if timer < 2:
if rob.readClapCounter() > 1:
rob.playSound(Sounds.LAUGH)
rob.setEmotionTo(Emotions.SURPRISED)
rob.wait(0.5)
rob.resetClapCounter()
else:
timer = 0
rob.resetClapCounter()
rob.setEmotionTo(Emotions.NORMAL)
rob.wait(1)
timer+=16. Método whenClapIsDetected
| whenClapDetected(callback) |
|
Establece la función callback que se llama cuando se detecta una nueva palmada.
Parámetros: |
Ejemplo de Uso
El siguiente programa hace que Robobo se detenga y diga, «Me has mandado parar» cuando detecta una palmada.
from robobopy.Robobo import Robobo
def clap():
rob.stopMotors()
rob.sayText('Me has mandado parar')
rob = Robobo('10.113.26.150')
rob.connect()
rob.moveWheels(20,20)
rob.whenClapIsDetected(clap)
# el programa se mantiene en ejecución continua
while True:
rob.wait(0.1)7. Método readNoiseLevel
| readNoiseLevel() |
|
Lee el nivel de presión de sonido (SPL, por sus siglas en inglés), que es una medida del ruido ambiente.
Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo diga el nivel de ruido de manera continua y lo categorice en nivel de ruido alto, medio o bajo en función de los decibelios detectados por el método readNoiseLevel.
from robobopy.Robobo import Robobo
rob = Robobo('10.113.26.150')
rob.connect()
while True:
noise_level = rob.readNoiseLevel()
rob.sayText(noise_level)
if noise_level >= 70:
rob.sayText('El nivel de ruido es muy alto')
elif noise_level >= 40 and noise_level < 70:
rob.sayText('El nivel de ruido es medio')
elif noise_level > 20 and noise_level > 40:
rob.sayText('El nivel de ruido es bajo')
else:
rob.sayText('El nivel de ruido es muy bajo')
rob.wait(1)