[PYTHON] Vocabulaire amélioré avec Cloud Text-to-Speech

Contexte

À un moment donné, mon fils Kun m'a demandé, mon père.

Son Kun: "Papa, comment te souviens-tu des mots anglais?" Papa: "Eh bien, est-ce que tu lis à haute voix dans les classes d'école? Ensuite, peut-être que tu t'entraîneras à chanter à voix haute?" Son Kun: "Eh bien, les gens qui le font le font ..." Papa: "Devenez capable de traduire les manuels d'abord pour pouvoir le dire sans le regarder à l'étape suivante. Ce type de formation est efficace." Son Kun: "Ça ... je ne peux pas le chanter." Papa: "Quoi?! Si tu la chantes plusieurs fois, tu te souviens un peu, sinon de tout, n'est-ce pas?" Son Kun: "Un peu, mais je me fatigue après l'avoir fait plusieurs fois, donc je ne suis pas motivé ..." Papa: "(Sérieusement, c'est Akan, je déteste étudier, orz)"

背景_図.png

Analyse des besoins

La pratique de «l'apprentissage des mots anglais» est un chemin escarpé que tout le monde peut emprunter à moins d'être natif ou rapatrié. Il semble que son fils Kun ait déjà frappé le mur. Il existe de nombreuses façons de «se souvenir des mots», alors trions-les un peu.

L'approche de base est de «lire les mots anglais et de les former à les traduire en japonais». En vous y habituant à plusieurs reprises, vous devriez vous y habituer au moment où vous vous en souvenez.

Les méthodes suivantes sont typiques pour mémoriser des mots, mais comme mon fils Kun n'est pas bon dans ce domaine, la direction de "1 mot anglais" serait bonne.

  1. Souvenez-vous comme un mot anglais
  2. Rappelez-vous dans les phrases d'exemple
  3. Rappelez-vous dans le texte

Il existe les méthodes suivantes pour infiltrer le corps plutôt que le cerveau.

  1. Écrivez et souvenez-vous
  2. Rappelez-vous à voix haute
  3. Écoutez et souvenez-vous avec une source sonore telle qu'un CD

Après de nombreuses recherches, "2 voix" semble être bon en termes d'efficacité et de praticité. Cependant, son fils Kun dit également qu'il ne sait pas chanter. Quand il s'agit de cela, il semble que la «voix de 2» soit également peu probable.

"Ecrire 1" sera difficile en termes de temps. Ce qui reste, c'est l'utilisation de "3 sources sonores", et il vaudrait mieux y remédier autant que possible en écoutant le gap time. Mais comment organisez-vous les sources sonores? La plupart des CD dans l'annexe du livre de mots n'ont qu'une «voix anglaise». Il y a une source sonore qui répète un ensemble d'anglais et de japonais, mais mon fils Kun dit qu'il n'aime pas le rythme. En déclarant «ce qu'il faut rechercher», il s'est même plaint que «quoi» était persistant.

Quel client monstre!

要求分析_図.png

Stratégie de renforcement du vocabulaire

Si les produits d'autres sociétés ou les produits disponibles dans le commerce ne peuvent pas être utilisés, modifiez-vous la source sonore vous-même? Non, même le père d'un ingénieur qui traverse le monde n'a pas beaucoup de temps.

Oui, demandons à l'enseignant de Google.

Ensuite, une méthode appelée Hyakushiki English Words est sortie. Répéter les sources sonores anglaises et japonaises, c'est bien. Oh, mais mon fils Kun n'est pas un lycéen. Après tout, n'y a-t-il pas d'autre choix que de créer vous-même la source sonore?

Vous pouvez spécifier les mots dont vous vous souvenez et ajuster la vitesse de la source sonore, et dans certains cas, il serait bien de basculer entre anglais-> japonais et japonais-> anglais.

Dans cet esprit, j'ai pensé à la méthode suivante.

大作戦_図.png

Préparation

Exécution de l'article «Configuration de l'authentification» dans l'article [Text-to-Speech Client Libraries] de Google (https://cloud.google.com/text-to-speech/docs/reference/libraries?hl=JA) , Obtenez le fichier JSON qui contient la clé du compte de service. Spécifiez ce fichier comme argument du programme. Ce service semble être gratuit pour utiliser jusqu'à 1 million de caractères.

la mise en oeuvre

Fichier de définition Word

Le fichier CSV a le format suivant.

drapeau Id3tag_artist Id3tag_album Id3tag_title english japanese output loop_count
y L'anglais de papa part1 0001 begin début ./mp3/kihon78/0001.mp3 2

Image de génération de fichier audio

発声の構成図.png

Paramètres

La valeur dont vous souhaitez modifier le paramètre pour chaque mot est définie sur le fichier de définition de mot, et la valeur qui semble être bonne pour chaque fichier est définie comme paramètre (argument de ligne de commande). Il est nécessaire de concevoir cette zone en fonction de la plage dans laquelle les éléments de réglage doivent être appliqués, par exemple si elle peut être modifiée pendant la définition du système, la définition de l'application, la définition de l'instance ou activée. Cela dépend de l'opération prévue.

Génération de fichiers audio


def create_audio(
        output_path,
        text,
        params_language_code,
        params_name,
        params_speaking_rate):
    client = texttospeech.TextToSpeechClient.from_service_account_json(
        option.servicekey_of_file)
    s_input = texttospeech.types.SynthesisInput(text=text)
    voice_params = texttospeech.types.VoiceSelectionParams(
        language_code=params_language_code, name=params_name)
    audio_config = texttospeech.types.AudioConfig(
        audio_encoding=texttospeech.enums.AudioEncoding.MP3,
        speaking_rate=params_speaking_rate)
    response = client.synthesize_speech(
        s_input, voice_params, audio_config)
    with open(output_path, 'wb') as out:
        out.write(response.audio_content)

Combinez des fichiers audio

def synthesize_audio(
        input_en_path,
        input_jp_path,
        loop_count,
        output_path,
        option):
    loop_max = int(loop_count.strip())

    audio_en = AudioSegment.from_mp3(input_en_path)
    audio_jp = AudioSegment.from_mp3(input_jp_path)

    opening_margin = AudioSegment.silent(duration=100)
    between_sentences = AudioSegment.silent(duration=option.between_sentences)
    between_the_loop = AudioSegment.silent(duration=option.between_the_loop)

    if option.japanese_top:
        audio = opening_margin + audio_jp + between_sentences + audio_en
        if loop_max > 1:
            for li in range(loop_max - 1):
                audio += between_the_loop + audio_jp + between_sentences + audio_en
    else:
        audio = opening_margin + audio_en + between_sentences + audio_jp
        if loop_max > 1:
            for li in range(loop_max - 1):
                audio += between_the_loop + audio_en + between_sentences + audio_jp

    audio.export(output_path, format='mp3')
    os.remove(input_en_path)
    os.remove(input_jp_path)

Ensemble de sources

L'ensemble complet des implémentations peut être trouvé sur github, veuillez vous y référer si vous le souhaitez.

ear-studies

Future Work

Recommended Posts

Vocabulaire amélioré avec Cloud Text-to-Speech
[Package cloud] Gérez les packages python avec le package cloud
Exécutez XGBoost avec Cloud Dataflow (Python)