Maison  >  Article  >  développement back-end  >  Comment convertir du texte en parole dans Golang

Comment convertir du texte en parole dans Golang

PHPz
PHPzoriginal
2023-04-24 14:46:411726parcourir

Avec le développement rapide de l'intelligence artificielle, la technologie vocale est devenue un élément indispensable de la vie quotidienne des gens. Dans de nombreux scénarios, nous pouvons avoir besoin de convertir rapidement du texte en parole, comme la lecture vocale dans l'éducation, la réponse vocale automatique dans le service client intelligent, les invites vocales dans la navigation automobile, etc. À l’heure actuelle, le langage golang peut nous apporter une solution de synthèse vocale plus efficace et plus concise. Cet article présentera aux lecteurs comment utiliser Golang pour compléter la synthèse vocale.

  1. Installer le package tiers Golang

Dans Golang, nous pouvons implémenter la fonction de synthèse vocale via des bibliothèques tierces. Il existe actuellement deux bibliothèques populaires sur le marché, à savoir les go-tts et les go-astits. Ici, nous choisissons les go-astits les plus matures et les plus stables.

Utilisez la commande suivante pour installer le package go-astits dans la troisième bibliothèque dans le chemin src de votre répertoire d'installation golang :

go get github.com/mkb218/gosynth/v2
  1. Installez le moteur vocal

go-astits doit dépendre du moteur vocal, actuellement il prend en charge deux moteurs vocaux : espeak et festival. Ici, nous choisissons d'utiliser espeak.

Comment installer espeak :

sudo apt-get install espeak

Une fois l'installation terminée, nous pouvons copier le code suivant dans votre éditeur golang et l'enregistrer en tant que fichier .go :

package main

import (
    "fmt"
    "os/exec"
    "time"

    "github.com/mkb218/gosynth/v2/synth"
)

func main() {
    // 调用espeak命令将文本转为音频文件
    err := exec.Command("espeak", "-w", "test.wav", "Hello, World!").Run()
    if err != nil {
        fmt.Println("Failed to convert text to wave file:", err)
        return
    }

    // 播放音频文件
    player := synth.NewWAVFilePlayer("test.wav")
    player.Play()
    time.Sleep(player.Duration())
}

Avant d'exécuter le code ci-dessus, vous devez vous assurer que le Fichier test.wav Le dossier a été créé. Dans ce code, nous appelons la commande espeak via la fonction Command du package exec pour convertir le texte en fichier audio. En même temps, nous utilisons la fonction NewWAVFilePlayer dans le package synth de la bibliothèque go-astits pour lire le fichier audio test.wav.

  1. Appeler une API tierce

En plus d'installer le moteur vocal localement, nous pouvons également implémenter la fonction de synthèse vocale en appelant une API vocale tierce. Les API vocales couramment utilisées incluent celles fournies par les fournisseurs de services cloud tels qu'Alibaba Cloud et Tencent Cloud.

Ici, nous choisissons d'utiliser l'API de synthèse vocale Baidu. Pour utiliser l'API de synthèse vocale Baidu, vous devez vous rendre sur https://ai.baidu.com/tech/speech/tts pour vous inscrire et postuler aux applications associées, et demander l'ID d'application, la clé API et la clé secrète auxquelles vous pouvez accéder. l'API.

Installez les bibliothèques tierces Golang pertinentes :

go get github.com/go-resty/resty/v2
go get github.com/leonkaihao/baidu-tts-go/baidu

Écrivez du code pour interagir avec l'API de synthèse vocale Baidu :

package main

import (
    "fmt"

    "github.com/go-resty/resty/v2"
    "github.com/leonkaihao/baidu-tts-go/baidu"
)

func main() {
    // 获取Access Token
    client := resty.New()
    resp, err := client.R().
        SetFormData(map[string]string{
            "grant_type":    "client_credentials",
            "client_id":     "您的API Key",
            "client_secret": "您的Secret Key",
        }).
        Post("https://aip.baidubce.com/oauth/2.0/token")
    if err != nil {
        fmt.Println("Failed to get token: ", err)
        return
    }
    token := baidu.Token{}
    err = resp.UnmarshalJSON(&token)
    if err != nil {
        fmt.Println("Failed to unmarshal token response: ", err)
        return
    }

    // 调用语音合成API来将文本转为语音
    resp, err = client.R().
        SetHeader("Content-Type", "application/json").
        SetQueryParam("access_token", token.AccessToken).
        SetBody(map[string]string{
            "tex":      "你好,欢迎使用百度语音合成API",
            "lan":      "zh",
            "ctp":      "1",
            "speed":    "5",
            "per":      "4",
            "cuid":     "YOUR_CUID",
            "spd":      "5",
            "vol":      "15",
            "tts":      "audio",
            "aue":      "3",
            "channel":  "1",
            "len":      "-1",
            "pdt":      "",
            "pvc":      "1.0",
            "speaker":  "0",
            "background_music_id": -1,
        }).
        Post("https://tsn.baidu.com/text2audio")
    if err != nil {
        fmt.Println("Failed to request API: ", err)
        return
    }

    fmt.Println(resp.StatusCode())
}

Notez que dans le code ci-dessus, vous devez remplacer votre clé API et votre clé secrète par celles appliquées sur Baidu Cloud. information. En appelant l'API de synthèse vocale Baidu, nous pouvons facilement implémenter la fonction de synthèse vocale sans installer de moteur vocal local.

  1. Résumé

En utilisant le moteur vocal local et en appelant l'API tierce, nous pouvons rapidement implémenter la fonction de synthèse vocale dans Golang. Cet article présente brièvement les étapes de base de deux solutions utilisant go-astits et appelant l'API de synthèse vocale Baidu. Pour les développeurs intéressés par la synthèse vocale, ces solutions vous offrent plus de choix, vous aident à mettre en œuvre rapidement des fonctions et améliorent également l'efficacité de votre développement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Choisissez golang ou javaArticle suivant:Choisissez golang ou java