Biblioteca de reconocimiento de voz de Python: ¿siempre escucha?

Recientemente he estado trabajando en el uso de una biblioteca de reconocimiento de voz en Python para iniciar aplicaciones. Tengo la intención de utilizar la biblioteca para la automatización del hogar activada por voz usando el GPIO Raspberry Pi.

Tengo esto funcionando, detecta mi voz y lanza la aplicación. El problema es que parece colgarse de la única palabra que digo (por ejemplo, digo internet y lanza Chrome una cantidad infinita de veces)

Este es un comportamiento inusual por lo que he visto de los bucles while. No puedo entender cómo evitar que se repita. ¿Necesito hacer algo fuera del circuito para que funcione correctamente? Por favor vea el código a continuación.

http://pastebin.com/auquf1bR

import pyaudio,os
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
        audio = r.listen(source)

def excel():
        os.system("start excel.exe")

def internet():
        os.system("start chrome.exe")

def media():
        os.system("start wmplayer.exe")

def mainfunction():
        user = r.recognize(audio)
        print(user)
        if user == "Excel":
                excel()
        elif user == "Internet":
                internet()
        elif user == "music":
                media()
while 1:
        mainfunction()

Respuestas a la pregunta(4)

Su respuesta a la pregunta