translator_cli.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from RealtimeSTT import AudioToTextRecorder
  2. from RealtimeTTS import TextToAudioStream, AzureEngine
  3. import os, openai
  4. openai.api_key = os.environ.get("OPENAI_API_KEY")
  5. engine = AzureEngine(os.environ.get("AZURE_SPEECH_KEY"), service_region="germanywestcentral") # exchange "germanywestcentral" with your azure service region
  6. stream = TextToAudioStream(engine)
  7. recorder = AudioToTextRecorder(model="medium")
  8. languages = [["english", "AshleyNeural"],
  9. ["german", "AmalaNeural"],
  10. ["french", "DeniseNeural"],
  11. ["spanish", "EstrellaNeural"],
  12. ["portuguese", "FernandaNeural"],
  13. ["italian", "FabiolaNeural"]]
  14. def generate_charstream(messages):
  15. for chunk in openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages, stream=True):
  16. if (text_chunk := chunk["choices"][0]["delta"].get("content")):
  17. yield text_chunk
  18. for index, language in enumerate(languages, start=1):
  19. print(f"{index}. {language[0]}")
  20. language_number = input("Select translation language (1-6): ")
  21. language_info = languages[int(language_number) - 1]
  22. engine.set_voice(language_info[1])
  23. system_prompt = {'role': 'system', 'content': f'Translate the given text to {language_info[0]}. Output only the translated text.'}
  24. while True:
  25. print("\nSay something!")
  26. user_text = recorder.text()
  27. print(f"Input text: {user_text}")
  28. print("Translation: ", end="", flush=True)
  29. user_message = {'role': 'user', 'content': user_text}
  30. translation_stream = generate_charstream([system_prompt, user_message])
  31. stream.feed(translation_stream)
  32. recorder.noise_detection(False)
  33. stream.play(log_characters=True)
  34. recorder.noise_detection(True)