Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

79 lines
2.3KB

  1. """
  2. eleventLabs voice service
  3. ["voice_id":"pNInz6obpgDQGcFmaJgB","name":"Adam"]
  4. ["voice_id":"ErXwobaYiN019PkySvjV","name":"Antoni"]
  5. ["voice_id":"VR6AewLTigWG4xSOukaG","name":"Arnold"]
  6. ["voice_id":"EXAVITQu4vr4xnSDxMaL","name":"Bella"]
  7. ["voice_id":"AZnzlk1XvdvUeBnXmlld","name":"Domi"]
  8. ["voice_id":"MF3mGyEYCl7XYWbV9V6O","name":"Elli"]
  9. ["voice_id":"TxGEqnHWrfWFTfGW9XjX","name":"Josh"]
  10. ["voice_id":"21m00Tcm4TlvDq8ikWAM","name":"Rachel"]
  11. ["voice_id":"yoZ06aMxZJJ28mfd3POQ","name":"Sam"]
  12. """
  13. import time
  14. import requests
  15. from elevenlabs import generate
  16. from bridge.reply import Reply, ReplyType
  17. from common.log import logger
  18. from common.tmp_dir import TmpDir
  19. from voice.voice import Voice
  20. from config import conf
  21. XI_API_KEY = conf().get("xi_api_key")
  22. name = conf().get("xi_voice_id")
  23. if name == "Adam":
  24. voice_id = "pNInz6obpgDQGcFmaJgB"
  25. elif name == "Antoni":
  26. voice_id = "ErXwobaYiN019PkySvjV"
  27. elif name == "Arnold":
  28. voice_id = "VR6AewLTigWG4xSOukaG"
  29. elif name == "Bella":
  30. voice_id = "EXAVITQu4vr4xnSDxMaL"
  31. elif name == "Domi":
  32. voice_id = "AZnzlk1XvdvUeBnXmlld"
  33. elif name == "Elli":
  34. voice_id = "MF3mGyEYCl7XYWbV9V6O"
  35. elif name == "Josh":
  36. voice_id = "TxGEqnHWrfWFTfGW9XjX"
  37. elif name == "Rachel":
  38. voice_id = "21m00Tcm4TlvDq8ikWAM"
  39. elif name == "Sam":
  40. voice_id = "yoZ06aMxZJJ28mfd3POQ"
  41. class ElevenLabsVoice(Voice):
  42. def __init__(self):
  43. pass
  44. def voiceToText(self, voice_file):
  45. pass
  46. def textToVoice(self, text):
  47. url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
  48. headers = {
  49. "Accept": "audio/mpeg",
  50. "Content-Type": "application/json",
  51. "xi-api-key": XI_API_KEY
  52. }
  53. data = {
  54. "text": text,
  55. "model_id": "eleven_monolingual_v1",
  56. "voice_settings": {
  57. "stability": 0,
  58. "similarity_boost": 0
  59. }
  60. }
  61. response = requests.post(url, json=data, headers=headers)
  62. audio = response.content
  63. fileName = TmpDir().path() + "reply-" + str(int(time.time())) + "-" + str(hash(text) & 0x7FFFFFFF) + ".mp3"
  64. with open(fileName, "wb") as f:
  65. f.write(audio)
  66. logger.info("[ElevenLabs] textToVoice text={} voice file name={}".format(text, fileName))
  67. return Reply(ReplyType.VOICE, fileName)