>  기사  >  백엔드 개발  >  golang에서 텍스트를 음성으로 변환하는 방법

golang에서 텍스트를 음성으로 변환하는 방법

PHPz
PHPz원래의
2023-04-24 14:46:411726검색

인공지능의 급속한 발전으로 음성 기술은 사람들의 일상생활에서 없어서는 안 될 부분이 되었습니다. 많은 시나리오에서 교육 분야의 음성 읽기, 지능형 고객 서비스의 자동 음성 응답, 자동차 내비게이션의 음성 안내 등과 같이 텍스트를 음성으로 신속하게 변환해야 할 수 있습니다. 현재 언어 golang은 우리에게 보다 효율적이고 간결한 텍스트 음성 변환 솔루션을 제공할 수 있습니다. 이 기사에서는 독자들에게 golang을 사용하여 텍스트 음성 변환을 완성하는 방법을 소개합니다.

  1. golang 타사 패키지 설치

golang에서는 타사 라이브러리를 통해 텍스트 음성 변환 기능을 구현할 수 있습니다. 현재 시장에는 go-tts와 go-astits라는 두 가지 인기 있는 라이브러리가 있습니다. 여기서는 좀 더 성숙하고 안정적인 고아스티트를 선택합니다.

다음 명령을 사용하여 golang 설치 디렉터리의 src 경로에 있는 세 번째 라이브러리에 go-astits 패키지를 설치합니다.

go get github.com/mkb218/gosynth/v2
  1. 음성 엔진 설치

go-astits는 현재 음성 엔진에 따라 달라집니다. espeak와festival의 두 가지 음성 엔진을 지원합니다. 여기서는 espeak를 사용하기로 선택했습니다.

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 오디오 파일을 재생합니다.

  1. 타사 API 호출

음성 엔진을 로컬에 설치하는 것 외에도 타사 음성 API를 호출하여 텍스트 음성 변환 기능을 구현할 수도 있습니다. 일반적으로 사용되는 음성 API에는 Alibaba Cloud 및 Tencent Cloud와 같은 클라우드 서비스 제공업체에서 제공하는 API가 포함됩니다.

여기에서는 Baidu 음성 합성 API를 사용하기로 선택했습니다. 바이두 음성합성 API를 사용하려면 https://ai.baidu.com/tech/speech/tts에 접속하여 관련 애플리케이션을 등록 및 신청해야 하며, 접근할 수 있는 App ID, API Key, Secret Key를 신청해야 합니다. 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 클라우드에 적용된 키로 바꿔야 합니다. 정보. Baidu 음성 합성 API를 호출하면 로컬 음성 엔진을 설치하지 않고도 음성 합성 기능을 쉽게 구현할 수 있습니다.

  1. 요약

로컬 음성 엔진을 사용하고 타사 API를 호출하면 golang에서 텍스트 음성 변환 기능을 빠르게 구현할 수 있습니다. 이 기사에서는 go-astits를 사용하고 Baidu 음성 합성 API를 호출하는 두 가지 솔루션의 기본 단계를 간략하게 소개합니다. 음성 합성에 관심이 있는 개발자에게 이러한 솔루션은 더 많은 선택권을 제공하고 기능을 빠르게 구현하는 데 도움이 되며 개발 효율성도 향상시킵니다.

위 내용은 golang에서 텍스트를 음성으로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.