Spaces:
Running
Running
import speech_recognition as sr # type: ignore | |
import os | |
import pygame # type: ignore | |
from gtts import gTTS # type: ignore | |
from pydub import AudioSegment | |
from pydub.playback import play | |
# Dog sound files (Ensure these files exist) | |
dog_sounds = { | |
"sit": r'C:\Users\User\Downloads\dog_sit.mp3', | |
"come": r'C:\Users\User\Downloads\dog_come.mp3', | |
"fetch": r'C:\Users\User\Downloads\dog_fetch.mp3', | |
"treat": r'C:\Users\User\Downloads\dog_treat.mp3', | |
"play": r'C:\Users\User\Downloads\dog_play.mp3', | |
"bark": r'C:\Users\User\Downloads\dog_bark.mp3' | |
} | |
# Initialize speech recognizer | |
recognizer = sr.Recognizer() | |
# Initialize pygame mixer | |
pygame.mixer.init() | |
def recognize_speech(): | |
"""Recognizes speech from the microphone input.""" | |
with sr.Microphone() as source: | |
print("Listening for command...") | |
try: | |
audio = recognizer.listen(source, timeout=5) | |
command = recognizer.recognize_google(audio) | |
print(f"Human said: {command}") | |
return command.lower() | |
except sr.UnknownValueError: | |
print("Sorry, I could not understand your speech.") | |
return None | |
except sr.RequestError: | |
print("Sorry, the speech service is unavailable.") | |
return None | |
except sr.WaitTimeoutError: | |
print("No speech detected. Please try again.") | |
return None | |
def dog_response(command): | |
"""Plays the corresponding dog sound based on the recognized command.""" | |
if command: | |
# Check if command matches known keywords | |
for key in dog_sounds: | |
if key in command: | |
play_dog_sound(dog_sounds[key]) | |
return | |
# Default to bark sound if command is unknown | |
print("No specific dog command recognized. Playing default bark sound.") | |
play_dog_sound(dog_sounds["bark"]) | |
else: | |
print("No command to process.") | |
def play_dog_sound(sound_file): | |
"""Plays an audio file using Pygame.""" | |
if os.path.exists(sound_file): | |
pygame.mixer.music.load(sound_file) | |
pygame.mixer.music.play() | |
while pygame.mixer.music.get_busy(): # Wait until sound finishes playing | |
continue | |
else: | |
print(f"Error: Sound file '{sound_file}' not found.") | |
def make_dog_response(text): | |
"""Generates a playful dog response using text-to-speech.""" | |
try: | |
tts = gTTS(text=text, lang='en') | |
response_file = "dog_response.mp3" | |
tts.save(response_file) | |
pygame.mixer.music.load(response_file) | |
pygame.mixer.music.play() | |
while pygame.mixer.music.get_busy(): | |
continue | |
os.remove(response_file) # Clean up the temporary file | |
except Exception as e: | |
print(f"Error generating speech: {e}") | |
def main(): | |
"""Main loop to listen for speech commands and respond accordingly.""" | |
print("Say 'exit' or 'quit' to stop.") | |
while True: | |
command = recognize_speech() | |
if command in ["exit", "quit"]: | |
print("Exiting program. Goodbye!") | |
break | |
dog_response(command) # Process command | |
make_dog_response(f"Woof! I heard you say {command}.") # Playful dog response | |
if __name__ == "__main__": | |
main() | |