Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar teks kepada pertuturan dalam golang

Bagaimana untuk menukar teks kepada pertuturan dalam golang

PHPz
PHPzasal
2023-04-24 14:46:411726semak imbas

Dengan perkembangan pesat kecerdasan buatan, teknologi suara telah menjadi bahagian yang sangat diperlukan dalam kehidupan seharian manusia. Dalam banyak senario, kita mungkin perlu menukar teks kepada pertuturan dengan cepat, seperti bacaan suara dalam pendidikan, jawapan suara automatik dalam perkhidmatan pelanggan pintar, gesaan suara dalam navigasi kereta, dsb. Pada masa ini, bahasa golang boleh membawa kita penyelesaian teks ke pertuturan yang lebih cekap dan ringkas. Artikel ini akan memperkenalkan pembaca tentang cara menggunakan golang untuk melengkapkan teks ke pertuturan.

  1. Pasang pakej pihak ketiga golang

Dalam golang, kami boleh melaksanakan fungsi teks ke pertuturan melalui perpustakaan pihak ketiga. Pada masa ini terdapat dua perpustakaan popular di pasaran, iaitu go-tts dan go-astits. Di sini, kami memilih go-astits yang lebih matang dan stabil.

Gunakan arahan berikut untuk memasang pakej go-astits dalam pustaka ketiga dalam laluan src dalam direktori pemasangan golang anda:

go get github.com/mkb218/gosynth/v2
  1. Pasang enjin pertuturan

go-astits perlu bergantung pada enjin pertuturan pada masa ini ia menyokong dua enjin pertuturan: espeak dan festival. Di sini, kami memilih untuk menggunakan espeak.

Cara memasang espeak:

sudo apt-get install espeak

Selepas pemasangan selesai, kami boleh menyalin kod berikut ke dalam editor golang anda dan menyimpannya sebagai fail .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())
}

Sebelum menjalankan kod di atas, anda perlu memastikan bahawa folder tempat letak fail test.wav telah dibuat. Dalam kod ini, kami memanggil arahan espeak melalui fungsi Perintah dalam pakej exec untuk menukar teks kepada fail audio. Pada masa yang sama, kami menggunakan fungsi NewWAVFilePlayer dalam pakej synth pustaka go-astits untuk memainkan fail audio test.wav.

  1. Panggil API pihak ketiga

Selain memasang enjin pertuturan secara setempat, kami juga boleh melaksanakan fungsi teks ke pertuturan dengan memanggil pertuturan pihak ketiga API. API suara yang biasa digunakan termasuk yang disediakan oleh penyedia perkhidmatan awan seperti Alibaba Cloud dan Tencent Cloud.

Di sini, kami memilih untuk menggunakan API sintesis pertuturan Baidu. Untuk menggunakan API sintesis pertuturan Baidu, anda perlu pergi ke https://ai.baidu.com/tech/speech/tts untuk mendaftar dan memohon aplikasi berkaitan dan memohon ID Apl, Kunci API dan Kunci Rahsia yang boleh mengakses API.

Pasang perpustakaan pihak ketiga golang yang berkaitan:

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

Tulis kod untuk berinteraksi dengan API sintesis pertuturan 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())
}

Perhatikan bahawa dalam kod di atas, ia diperlukan Gantikan Kunci API dan Kunci Rahsia anda dengan maklumat berkaitan yang digunakan pada Baidu Cloud. Dengan memanggil API sintesis pertuturan Baidu, kami boleh melaksanakan fungsi sintesis pertuturan dengan mudah tanpa memasang enjin pertuturan tempatan.

  1. Ringkasan

Dengan menggunakan enjin pertuturan tempatan dan memanggil API pihak ketiga, kami boleh melaksanakan fungsi teks ke pertuturan dengan cepat dalam golang. Artikel ini memperkenalkan secara ringkas langkah asas dua penyelesaian menggunakan go-astits dan memanggil API sintesis pertuturan Baidu. Untuk pembangun yang berminat dalam sintesis pertuturan, penyelesaian ini memberi anda lebih banyak pilihan, membantu anda melaksanakan fungsi dengan cepat dan juga meningkatkan kecekapan pembangunan anda.

Atas ialah kandungan terperinci Bagaimana untuk menukar teks kepada pertuturan dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Pilih golang atau javaArtikel seterusnya:Pilih golang atau java