Beispiel #1
0
def main():
    if sys.platform == 'darwin':
        speaker = tts.OSX()
    else:
        # n.b. at the time of writing, this doesnt work on OSX
        speaker = tts.Google()

    try:
        audioInput = Microphone()

        audioInput.listen()

        speaker.say("Searching...")

        speech_to_text = stt.Google(audioInput)

        # speech_to_text = stt.Dummy('who was winston churchill?')

        job = Job(speech_to_text.get_text())

        plugins = {
            "db": DBPedia(speaker),
            "Wolfram": Wolfram(speaker, os.environ.get('WOLFRAM_API_KEY'))
        }

        for plugin in plugins:
            plugins[plugin].process(job)

        if not job.get_is_processed():
            speaker.say("Sorry, I couldn't find any results for the query, '" + job.raw() + "'.")

    except NotUnderstoodException:
        speaker.say("Sorry, I couldn't understand what you said.")
Beispiel #2
0
    def __init__(self):
        self.audioInput = Microphone()
        self.speaker = tts.Google()
        self.voice_cmd = VoiceCommand(self.speaker)
        self._load_ai()
        self._print_welcome()

        print "Saying: Hello there!"
        self.speaker.play_wav("./wav/hello.wav")
Beispiel #3
0
	def listen(self, conversation):
		"""Initiate listening for voice commands."""
		self.audioInput = Microphone()
		self.audioInput.listen()
		job = self.set_job()
		
		if job is None:
			return

		if conversation is False:
			self.classify_job(job)
		else: 
			if job.recorded().find("no stop") != -1:
				self.speaker.say("Ending conversation. It was nice talking to you!")
				sys.exit(1)
			
			self.execute_voice_cmd(job, "computer", job.query)
Beispiel #4
0
    def listen(self):
        try:
            audioInput = Microphone()
            audioInput.listen()

            speech_to_text = stt.Google(audioInput)
            recorded_text = speech_to_text.get_text()
            job = Job(recorded_text)

            controller = webbrowser.get(
            )  # initialize controller for web browser

            # parse first and second words in command
            first_word = (recorded_text.split(' ')[0]).lower()
            if recorded_text.find(' ') >= 1:
                second_word = (recorded_text.split(' ')[1]).lower()
            else:
                second_word = ""

            # execute commands based on first word in query
            if first_word == "stop" or first_word == "no" \
              or recorded_text.find('no stop') != -1:
                print "---Accidental recording---"
                print "Saying: Oops, sorry."
                self.speaker.play_wav("./wav/sorry.wav")

            elif first_word == "open":
                if second_word != "":  # open webpage
                    phrase = recorded_text[recorded_text.find(' ') + 1:]
                    url = self.make_url(phrase)

                    if url != "":
                        self.speaker.say("opening " + url[12:])
                        controller.open(url)

                    else:
                        self.speaker.say("sorry, I didn't find the web page.")

                else:
                    self.speaker.say("no webpage specified.")

            elif first_word == "google" or first_word == "search":
                if second_word != "":  # pull up query results
                    self.speaker.say("searching...")
                    google_url = "http://www.google.com/search?q="
                    phrase = recorded_text[recorded_text.find(' ') + 1:]
                    url = google_url + phrase.replace(" ", "+")
                    controller.open(url)

                else:  # no query provided, just open google
                    self.speaker.say("opening google.com.")
                    url = "http://www.google.com"
                    controller.open(url)

            elif recorded_text.find('news') != -1:
                self.speaker.say("getting the world news.")

                r = praw.Reddit(user_agent='evebot v1.0 by /u/tw334')
                submissions = r.get_subreddit('worldnews').get_new(limit=10)
                # TODO make titles spoken
                for submission in submissions:
                    print ">>> " + submission.title

            elif first_word == "youtube":
                if second_word != "":
                    if second_word == "search":  # return youtube search results
                        self.speaker.say("Pulling up youtube results.")
                        y_url = "http://www.youtube.com/results?search_query="
                        phrase = recorded_text[recorded_text.find(' ') + 1:]
                        phrase = phrase[recorded_text.find(' ') + 1:]
                        url = y_url + phrase.replace(" ", "+")
                        controller.open(url)

                    else:  # open first youtube video associated with query
                        self.speaker.say("Playing video.")
                        Youtube(self.speaker).process(job)

                else:
                    self.speaker.say("Opening youtube.com.")
                    url = "http://www.youtube.com"
                    controller.open(url)

            elif first_word == "play" or first_word == "grooveshark":
                self.speaker.say("opening Grooveshark.")

                if second_word != "":  # pull up Grooveshark search results
                    # TODO auto play first music item from search results
                    grooveshark_url = "http://grooveshark.com/#!/search?q="
                    phrase = recorded_text[recorded_text.find(' ') + 1:]
                    url = grooveshark_url + phrase.replace(" ", "+")
                    controller.open(url)

                else:
                    url = "http://grooveshark.com"
                    controller.open(url)

            elif recorded_text.lower().find('screenshot') != -1:
                Screenshot(self.speaker).take()

            elif first_word == "computer":  # AI responds
                response = self.AI.respond(recorded_text[8:], "Thomas")
                self.speaker.say(response)

            else:
                Wolfram(self.speaker,
                        os.environ.get('WOLFRAM_API_KEY')).process(job)

            if not job.get_is_processed:
                self.speaker.say("Sorry, I didn't find any results.")

        except NotUnderstoodException:
            print "Sorry, I didn't understand what you said."
            self.speaker.play_wav("./wav/didntget.wav")