日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Go SDK

本文介紹如何使用阿里云智能語音服務提供的Go SDK,包括SDK的安裝方法及SDK代碼示例。

前提條件

在使用SDK前,請先閱讀接口說明,詳情請參見接口說明

下載安裝

說明
  • SDK支持Go 1.16及以上版本。

  • 請確認已經安裝Golang環境,并完成基本配置。

  1. 下載并安裝SDK。

    通過以下命令完成SDK下載和安裝。

    go get github.com/aliyun/alibabacloud-nls-go-sdk
  2. 導入SDK。

    在代碼中通過添加以下字段導入SDK。

    import ("github.com/aliyun/alibabacloud-nls-go-sdk")

SDK常量

常量

含義

SDK_VERSION

SDK版本。

PCM

PCM音頻格式。

WAV

WAV音頻格式。

OPUS

OPUS音頻格式。

OPU

OPU音頻格式。

DEFAULT_DISTRIBUTE

獲取Token時使用的默認區域,默認為"cn-shanghai"。

DEFAULT_DOMAIN

獲取Token時使用的默認URL,默認為"nls-meta.cn-shanghai.aliyuncs.com"。

DEFAULT_VERSION

獲取Token時使用的協議版本,默認為"2019-02-28"。

DEFAULT_URL

默認公有云URL,默認為"wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1"。

建立連接

重要

使用AkidAkkey來獲取Token時,建議針對Token進行緩存,并根據獲取Token時獲得的過期時間參數進行及時更新;請勿頻繁調用獲取Token的接口,否則會造成云端限流。

1.ConnectionConfig

用于建立連接的基礎參數。

參數說明:

參數

類型

參數說明

Url

String

訪問的公有云URL,如果不確定,可以使用常量DEFAULT_URL

Token

String

訪問Token,詳情可參見獲取Token概述

Akid

String

阿里云賬號AccessKey ID。

  • 若未填寫Token字段,則需要填寫該字段。

  • 若已填寫Token字段,則該字段可不填寫。

Akkey

String

阿里云賬號AccessKey Secret。

  • 若未填寫Token字段,則需要填寫該字段。

  • 若已填寫Token字段,則該字段可不填寫。

Appkey

String

對應項目Appkey。

2.func NewConnectionConfigWithToken(url string, appkey string, token string) *ConnectionConfig

通過URL、Appkey和Token創建連接參數。

  • 參數說明:

參數

類型

參數說明

Url

String

訪問的公有云URL,如果不確定,可以使用常量DEFAULT_URL

Appkey

String

對應項目Appkey。

Token

String

訪問Token,詳情可參見獲取Token概述

  • 返回值:

*ConnectionConfig:連接配置對象指針。

3. func NewConnectionConfigFromJson(jsonStr string) (*ConnectionConfig, error)

通過JSON字符串來創建連接參數。

  • 參數說明:

參數

類型

參數說明

jsonStr

String

描述連接參數的JSON字符串,有效字段如下:urltokenakidakkeyappkey。其中必須包含urlappkey,如果包含Token則不需要包含akidakkey

  • 返回值:

*ConnectionConfig:連接配置對象指針。

語音合成

1.SpeechSynthesisStartParam

實時語音合成參數。

參數

類型

參數說明

Voice

String

發音人,默認值:“xiaoyun”。

Format

String

音頻格式,默認使用WAV。

SampleRate

Integer

采樣率,默認值:16000 Hz。

Volume

Integer

音量,范圍為0~100,默認值:50。

SpeechRate

Integer

語速,范圍為-500~500,默認值:0。

PitchRate

Integer

音高,范圍為-500~500,默認值:0。

EnableSubtitle

Boolean

是否開啟字幕功能,默認不開啟。

  • true:開啟。

  • false:不開啟。

2.func DefaultSpeechSynthesisParam() SpeechSynthesisStartParam

創建一個默認的語音合成參數。

  • 參數說明:無。

  • 返回值:

    SpeechSynthesisStartParam:默認參數。

3.func NewSpeechSynthesis(...) (*SpeechSynthesis, error)

創建一個新的語音合成對象。

  • 參數說明:

參數

類型

參數說明

config

*ConnectionConfig

參見建立連接相關內容。

logger

*NlsLogger

參見SDK日志相關內容。

realtimeLongText

Boolean

  • false:短文本。

  • true:實時長文本。

taskfailed

func(string, interface{})

識別過程中的錯誤處理回調參數,interface{}為用戶自定義參數。

synthesisresult

func([]byte, interface{})

語音合成數據回調參數。

metainfo

func(string, interface{})

字幕數據回調,需要參數中EnableSubtitle為true。

completed

func(string, interface{})

合成完畢結果回調參數。

closed

func(interface{})

連接斷開回調參數。

param

interface{}

用戶自定義參數。

  • 返回值:無。

4.func (tts *SpeechSynthesis) Start(text string, param SpeechSynthesisStartParam, extra map[string]interface{}) (chan bool, error)

給定文本和參數進行語音合成。

  • 參數說明:

參數

類型

參數說明

text

String

待合成文本。

param

SpeechRecognitionStartParam

實時合成參數。

extra

map[string]interface{}

額外key:value參數。

  • 返回值:

    • chan bool:語音合成完成通知管道。

    • error:錯誤異常。

5.func (tts *SpeechSynthesis) Shutdown()

強制停止語音合成。

  • 參數說明:無。

  • 返回值:無。

SDK日志

1.func DefaultNlsLog() *NlsLogger

用于創建全局唯一的默認日志對象,默認日志以NLS為前綴,輸出到標準錯誤。

  • 參數說明:無。

  • 返回值:

NlsLogger:日志對象指針。

2.func NewNlsLogger(w io.Writer, tag string, flag int) *NlsLogger

創建一個新的日志。

  • 參數說明:

參數

類型

參數說明

w

io.Writer

任意實現io.Writer接口的對象。

tag

String

日志前綴,會打印到日志行首部。

flag

Integer

日志flag,具體請參見Go官方log文檔

  • 返回值:

NlsLogger:日志對象指針。

3.func (logger *NlsLogger) SetLogSil(sil bool)

設置日志是否輸出到對應的io.Writer。

  • 參數說明:

參數

類型

參數說明

sil

Boolean

是否禁止日志輸出。

  • true:禁止。

  • false:允許。

  • 返回值:無。

4.func (logger *NlsLogger) SetDebug(debug bool)

設置是否打印Debug日志,僅影響通過Debugf或Debugln進行輸出的日志。

  • 參數說明:

參數

類型

參數說明

debug

Boolean

是否允許Debug日志輸出。

  • true:允許。

  • false:禁止。

  • 返回值:無。

5. func (logger *NlsLogger) SetOutput(w io.Writer)

設置日志輸出方式。

  • 參數說明:

參數

類型

參數說明

w

io.Writer

任意實現io.Writer接口的對象。

  • 返回值:無。

6. func (logger *NlsLogger) SetPrefix(prefix string)

設置日志行的標簽。

  • 參數說明:

參數

類型

參數說明

prefix

String

日志行標簽,會輸出在日志行行首。

  • 返回值:無。

7. func (logger *NlsLogger) SetFlags(flags int)

設置日志屬性。

  • 參數說明:

參數

類型

參數說明

flags

Integer

日志屬性,具體請參見Go官方文檔

  • 返回值:無。

8. 日志打印

日志打印方法:

方法名

方法說明

func (l *NlsLogger) Print(v ...interface{})

標準日志輸出。

func (l *NlsLogger) Println(v ...interface{})

標注日志輸出,行尾自動換行。

func (l *NlsLogger) Printf(format string, v ...interface{})

帶Format的日志輸出,Format方式見具體請參見Go官方文檔

func (l *NlsLogger) Debugln(v ...interface{})

Debug信息日志輸出,行尾自動換行。

func (l *NlsLogger) Debugf(format string, v ...interface{})

帶Format的Debug信息日志輸出。

func (l *NlsLogger) Fatal(v ...interface{})

致命錯誤日志輸出,輸出后自動進程退出。

func (l *NlsLogger) Fatalln(v ...interface{})

致命錯誤日志輸出,行尾自動換行,輸出后自動進程退出。

func (l *NlsLogger) Fatalf(format string, v ...interface{})

帶Format的致命錯誤日志輸出,輸出后自動進程退出。

func (l *NlsLogger) Panic(v ...interface{})

致命錯誤日志輸出,輸出后自動進程退出并打印崩潰信息。

func (l *NlsLogger) Panicln(v ...interface{})

致命錯誤日志輸出,行尾自動換行,輸出后自動進程退出并打印崩潰信息。

func (l *NlsLogger) Panicf(format string, v ...interface{})

帶Format的致命錯誤日志輸出,輸出后自動進程退出并打印崩潰信息。

代碼示例

package main

import (
  "errors"
  "io"
  "log"
  "os"
  "sync"
  "time"

  nls "github.com/aliyun/alibabacloud-nls-go-sdk"
)

const (
  //online key
  APPKEY = "Your APPKEY" //獲取Appkey請前往控制臺:https://nls-portal.console.aliyun.com/applist
  TOKEN  = "Your TOKEN"  //獲取Token具體操作,請參見:http://bestwisewords.com/document_detail/450514.html
)

type TtsUserParam struct {
  F      io.Writer
  Logger *nls.NlsLogger
}

func onTaskFailed(text string, param interface{}) {
  p, ok := param.(*TtsUserParam)
  if !ok {
    log.Default().Fatal("invalid logger")
    return
  }

  p.Logger.Println("TaskFailed:", text)
}

func onSynthesisResult(data []byte, param interface{}) {
  p, ok := param.(*TtsUserParam)
  if !ok {
    log.Default().Fatal("invalid logger")
    return
  }
  p.F.Write(data)
}

func onCompleted(text string, param interface{}) {
  p, ok := param.(*TtsUserParam)
  if !ok {
    log.Default().Fatal("invalid logger")
    return
  }

  p.Logger.Println("onCompleted:", text)
}

func onClose(param interface{}) {
  p, ok := param.(*TtsUserParam)
  if !ok {
    log.Default().Fatal("invalid logger")
    return
  }

  p.Logger.Println("onClosed:")
}

func waitReady(ch chan bool, logger *nls.NlsLogger) error {
  select {
  case done := <-ch:
    {
      if !done {
        logger.Println("Wait failed")
        return errors.New("wait failed")
      }
      logger.Println("Wait done")
    }
  case <-time.After(60 * time.Second):
    {
      logger.Println("Wait timeout")
      return errors.New("wait timeout")
    }
  }
  return nil
}

var lk sync.Mutex
var fail = 0
var reqNum = 0

const (
  TEXT = "你好小德,今天天氣怎么樣。"
)

func testMultiInstance() {
  param := nls.DefaultSpeechSynthesisParam()
  config := nls.NewConnectionConfigWithToken(nls.DEFAULT_URL, APPKEY, TOKEN)
  strId := "ID0"
  fname := "ttsdump.wav"
  ttsUserParam := new(TtsUserParam)
  fout, err := os.OpenFile(fname, os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0666)
  logger := nls.NewNlsLogger(os.Stderr, strId, log.LstdFlags|log.Lmicroseconds)
  logger.SetLogSil(false)
  logger.SetDebug(true)
  logger.Printf("Test Normal Case for SpeechRecognition:%s", strId)
  ttsUserParam.F = fout
  ttsUserParam.Logger = logger
  //第三個參數控制是否請求長文本語音合成,false為短文本語音合成
  tts, err := nls.NewSpeechSynthesis(config, logger, false,
    onTaskFailed, onSynthesisResult, nil,
    onCompleted, onClose, ttsUserParam)
  if err != nil {
    logger.Fatalln(err)
    return
  }

  lk.Lock()
  reqNum++
  lk.Unlock()
  logger.Println("SR start")
  ch, err := tts.Start(TEXT, param, nil)
  if err != nil {
    lk.Lock()
    fail++
    lk.Unlock()
    tts.Shutdown()
  }

  err = waitReady(ch, logger)
  if err != nil {
    lk.Lock()
    fail++
    lk.Unlock()
    tts.Shutdown()
  }
  logger.Println("Synthesis done")
  tts.Shutdown()

}

func main() {
  testMultiInstance()
}