|
- """
- eleventLabs voice service
-
- ["voice_id":"pNInz6obpgDQGcFmaJgB","name":"Adam"]
- ["voice_id":"ErXwobaYiN019PkySvjV","name":"Antoni"]
- ["voice_id":"VR6AewLTigWG4xSOukaG","name":"Arnold"]
- ["voice_id":"EXAVITQu4vr4xnSDxMaL","name":"Bella"]
- ["voice_id":"AZnzlk1XvdvUeBnXmlld","name":"Domi"]
- ["voice_id":"MF3mGyEYCl7XYWbV9V6O","name":"Elli"]
- ["voice_id":"TxGEqnHWrfWFTfGW9XjX","name":"Josh"]
- ["voice_id":"21m00Tcm4TlvDq8ikWAM","name":"Rachel"]
- ["voice_id":"yoZ06aMxZJJ28mfd3POQ","name":"Sam"]
-
- """
-
- import time
- import requests
-
- from elevenlabs import generate
-
- from bridge.reply import Reply, ReplyType
- from common.log import logger
- from common.tmp_dir import TmpDir
- from voice.voice import Voice
- from config import conf
-
- XI_API_KEY = conf().get("xi_api_key")
- name = conf().get("xi_voice_id")
-
- if name == "Adam":
- voice_id = "pNInz6obpgDQGcFmaJgB"
- elif name == "Antoni":
- voice_id = "ErXwobaYiN019PkySvjV"
- elif name == "Arnold":
- voice_id = "VR6AewLTigWG4xSOukaG"
- elif name == "Bella":
- voice_id = "EXAVITQu4vr4xnSDxMaL"
- elif name == "Domi":
- voice_id = "AZnzlk1XvdvUeBnXmlld"
- elif name == "Elli":
- voice_id = "MF3mGyEYCl7XYWbV9V6O"
- elif name == "Josh":
- voice_id = "TxGEqnHWrfWFTfGW9XjX"
- elif name == "Rachel":
- voice_id = "21m00Tcm4TlvDq8ikWAM"
- elif name == "Sam":
- voice_id = "yoZ06aMxZJJ28mfd3POQ"
-
-
- class ElevenLabsVoice(Voice):
-
- def __init__(self):
- pass
-
- def voiceToText(self, voice_file):
- pass
-
- def textToVoice(self, text):
- url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
- headers = {
- "Accept": "audio/mpeg",
- "Content-Type": "application/json",
- "xi-api-key": XI_API_KEY
- }
- data = {
- "text": text,
- "model_id": "eleven_monolingual_v1",
- "voice_settings": {
- "stability": 0,
- "similarity_boost": 0
- }
- }
- response = requests.post(url, json=data, headers=headers)
- audio = response.content
- fileName = TmpDir().path() + "reply-" + str(int(time.time())) + "-" + str(hash(text) & 0x7FFFFFFF) + ".mp3"
- with open(fileName, "wb") as f:
- f.write(audio)
- logger.info("[ElevenLabs] textToVoice text={} voice file name={}".format(text, fileName))
- return Reply(ReplyType.VOICE, fileName)
|