ホームページ  >  記事  >  バックエンド開発  >  Golangでテキストを音声に変換する方法

Golangでテキストを音声に変換する方法

PHPz
PHPzオリジナル
2023-04-24 14:46:411725ブラウズ

人工知能の急速な発展に伴い、音声テクノロジーは人々の日常生活に欠かせないものになりました。教育における音声読み上げ、インテリジェントな顧客サービスにおける自動音声応答、カーナビゲーションにおける音声プロンプトなど、多くのシナリオでテキストを音声に迅速に変換する必要がある場合があります。現時点では、言語 golang は、より効率的で簡潔なテキスト読み上げソリューションを提供します。この記事では、golang を使用してテキスト読み上げを完了する方法を読者に紹介します。

  1. golang サードパーティ パッケージをインストールする

golang では、サードパーティ ライブラリを通じてテキスト読み上げ機能を実装できます。現在、市場には go-tts と go-astits という 2 つの人気のあるライブラリがあります。ここでは、より成熟した安定したゴーアスティットを選択します。

次のコマンドを使用して、golang インストール ディレクトリの src パスにある 3 番目のライブラリに go-astits パッケージをインストールします。

go get github.com/mkb218/gosynth/v2
  1. 音声エンジンをインストールします
#go-astits は音声エンジンに依存します。現在、espeak と Festival の 2 つの音声エンジンをサポートしています。ここでは、espeak を使用することを選択します。

インストールの特別な方法:

sudo apt-get install espeak
インストールが完了したら、次のコードを golang エディタにコピーし、.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())
}
前上記のコードを実行する場合、test.wav ファイルが配置されているフォルダーが作成されていることを確認する必要があります。このコードでは、exec パッケージの Command 関数を通じて espeak コマンドを呼び出し、テキストをオーディオ ファイルに変換します。同時に、go-astits ライブラリのシンセ パッケージの NewWAVFilePlayer 関数を使用して、test.wav オーディオ ファイルを再生します。

    サードパーティ API の呼び出し
音声エンジンをローカルにインストールすることに加えて、サードパーティの音声 API を呼び出してテキスト読み上げ機能を実装することもできます。 API。一般的に使用される音声 API には、Alibaba Cloud や Tencent Cloud などのクラウド サービス プロバイダーによって提供されるものが含まれます。

ここでは、Baidu 音声合成 API を使用することを選択します。 Baidu 音声合成 API を使用するには、https://ai.baidu.com/tech/speech/tts にアクセスして関連アプリケーションを登録および申請し、アクセスできるアプリ ID、API キー、シークレット キーを申請する必要があります。 API。

関連する golang サードパーティ ライブラリをインストールします:

go get github.com/go-resty/resty/v2
go get github.com/leonkaihao/baidu-tts-go/baidu
Baidu 音声合成 API と対話するコードを作成します:

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())
}
上記のコードでは、 API キーと秘密キーは、Baidu Cloud に適用される関連情報に置き換えられます。 Baidu 音声合成 API を呼び出すことで、ローカルに音声エンジンをインストールせずに音声合成機能を簡単に実装できます。

    概要
ローカル音声エンジンを使用し、サードパーティ API を呼び出すことで、golang でテキスト読み上げ機能を迅速に実装できます。この記事では、go-astits を使用する方法と Baidu 音声合成 API を呼び出す 2 つのソリューションの基本手順を簡単に紹介します。音声合成に興味のある開発者にとって、これらのソリューションはより多くの選択肢を提供し、機能を迅速に実装するのに役立ち、開発効率も向上します。

以上がGolangでテキストを音声に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。