File size: 1,477 Bytes
6feeeab
 
8b984d0
 
 
 
6feeeab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import datasets.arrow_dataset
import numpy as np
import torch
import transformers.pipelines.text_to_audio
from datasets import load_dataset
from transformers import pipeline


def load_model() -> transformers.pipelines.text_to_audio.TextToAudioPipeline:
    """
    Подгрузка модели преобразования текста в речь
    :return: class TextToAudioPipeline
    """
    return pipeline("text-to-speech", "microsoft/speecht5_tts")


def load_speaker_dataset() -> datasets.arrow_dataset.Dataset:
    """
    Подгрузка датасета для озвучивания текста
    :return: class Dataset
    """
    return load_dataset("Matthijs/cmu-arctic-xvectors", split="validation")


def text_to_speech(
        text: str,
        synthesiser: transformers.pipelines.text_to_audio.TextToAudioPipeline,
        embeddings_dataset: datasets.arrow_dataset.Dataset
        ) -> (np.ndarray, int):
    """
    Преобразование текста в речь
    :param text: Текст
    :param synthesiser: pipeline для озвучивания текста
    :param embeddings_dataset: dataset для озвучивания текста
    :return: tuple (audio data, sampling rate)
    """
    speaker_embedding = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0)

    speech = synthesiser(text, forward_params={"speaker_embeddings": speaker_embedding})

    return speech['audio'], speech['sampling_rate']