Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Это мой первый go код, приветствую вашу критику.
package main
import (
ivona "github.com/jpadilla/ivona-go"
"bufio"
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"strings"
)
const format = "tts%04d.ogg" // files like 0001.ogg
var dir = flag.String("dir", ".", "like /home/vitaly/Desktop/")
var textFile = flag.String("text", "", "path to text file, like /home/vitaly/Desktop/test.txt")
var key = flag.String("key", "GDNAICTDMLSLU5426OAA", "access key for ivona api")
var secret = flag.String("secret", "2qUFTF8ZF9wqy7xoGBY+YXLEu+M2Qqalf/pSrd9m", "secret key for ivona api")
func main() {
flag.Parse()
conf := os.Stdin // если нет конфига, но читаем стандартный ввод
if *textFile != "" {
conf, err := os.Open(*textFile)
if err != nil {
log.Fatal(err)
}
defer conf.Close()
}
client := ivona.New(*key, *secret)
scanner := bufio.NewScanner(conf)
for i := 1; scanner.Scan(); i++ {
paragraph := strings.TrimSpace(scanner.Text())
if paragraph == "" { // пропускаем пустые строки
continue
}
log.Printf("process: %v\n", paragraph)
options := ivona.NewSpeechOptions(paragraph)
options.Voice.Language = "ru-RU"
options.Voice.Name = "Maxim"
options.Voice.Gender = "Male"
options.OutputFormat.Codec = "OGG"
r, err := client.CreateSpeech(options)
if err != nil {
log.Fatal(err)
}
file := filepath.Join(*dir, fmt.Sprintf(format, i))
err = ioutil.WriteFile(file, r.Audio, 0644)
if err != nil {
log.Fatalln("writing result file:", err)
}
}
if err := scanner.Err(); err != nil {
log.Fatalln("reading text file:", err)
}
}
4d3
< "fmt"
5a5,8
>
> "bufio"
> "flag"
> "fmt"
7a11,12
> "os"
> "path/filepath"
10a16,22
> const format = "tts%04d.ogg" // files like 0001.ogg
>
> var dir = flag.String("dir", ".", "like /home/vitaly/Desktop/")
> var textFile = flag.String("text", "", "path to text file, like /home/vitaly/Desktop/test.txt")
> var key = flag.String("key", "GDNAICTDMLSLU5426OAA", "access key for ivona api")
> var secret = flag.String("secret", "2qUFTF8ZF9wqy7xoGBY+YXLEu+M2Qqalf/pSrd9m", "secret key for ivona api")
>
12,15c24,32
< client := ivona.New("GDNAICTDMLSLU5426OAA", "2qUFTF8ZF9wqy7xoGBY+YXLEu+M2Qqalf/pSrd9m")
< text, err := ioutil.ReadFile("/home/vitaly/Desktop/test.txt")
< if err != nil {
< log.Fatal(err)
---
> flag.Parse()
>
> conf := os.Stdin // если нет конфига, но читаем стандартный ввод
> if *textFile != "" {
> conf, err := os.Open(*textFile)
> if err != nil {
> log.Fatal(err)
> }
> defer conf.Close()
18,21c35,39
< arrayOfParagraphs := strings.Split(string(text), "\n")
< i := 0
< for _, paragraph := range arrayOfParagraphs {
< if len(paragraph) < 4 { // against empty lines
---
> client := ivona.New(*key, *secret)
> scanner := bufio.NewScanner(conf)
> for i := 1; scanner.Scan(); i++ {
> paragraph := strings.TrimSpace(scanner.Text())
> if paragraph == "" { // пропускаем пустые строки
24c42,43
< log.Printf("%v\n", paragraph)
---
> log.Printf("process: %v\n", paragraph)
>
29a49
>
35,37c55,63
< i++
< file := fmt.Sprintf("/home/vitaly/Desktop/ivona/tts%04d.ogg", i) // files like 0001.ogg
< ioutil.WriteFile(file, r.Audio, 0644)
---
> file := filepath.Join(*dir, fmt.Sprintf(format, i))
> err = ioutil.WriteFile(file, r.Audio, 0644)
> if err != nil {
> log.Fatalln("writing result file:", err)
> }
> }
>
> if err := scanner.Err(); err != nil {
> log.Fatalln("reading text file:", err)
C script supported: just add '#!/usr/local/bin/tcc -run' at the first line of your C source, and execute it directly from the command line.
Я один из голосов программы преобразования текста в речь IVONA. Введите фразу здесь и нажмите Play.Произносит без проблем.
if (len(paragraph) < 1) {
log.Printf("%v\n", paragraph)
go-скрипт который делает аудиокнигу из текстового файла используя один из лучших синтезаторов речи — Ivona от Amazon