- PVSM.RU - https://www.pvsm.ru -
Указываем в скрипте путь на книгу в txt — на выходе получаем папку с озвучкой хорошим синтезом.
Люблю потреблять контент ушами — в это время можно заниматься спортом или давать отдых глазам. Я привык что любая нормальная книга имеет аудио-версию, в худшем случае — любительскую, однако это не всегда так. Сегодня я несколько часов перебирал разные онлайн-сервисы и Андроид-программы для проговаривания русского текста — из приглянувшегося только Pocket [1] который использует Google TTS и Google Books [2] с тем же движком но отчего то другим качеством голоса. Также интересен SpeechKit от Яндекс [3]. Но вроде лучший синтез у Ivona [4] — эту компанию в 2013 году купил Амазон. Гитхаб нашел с десяток скриптов для дергания готового звука, но полностью готового решения для озвучки целой книги не оказалось. Используя неофициальную Go-библиотеку для IVONA Speech Cloud API [5] за несколько часов написал скрипт — впервые использую Go, удобно что все зависимости в одном файле, даже библиотеку с Гитхаба подтягивает автоматически.
Скрипт [6] создает один ogg-файл на абзац — у меня была книга в plaintext, конечно логичнее было бы разбивать по главам, а целиком книгу скормить не получилось — есть лимит на входное количество символов, около десяти минут озвучки на нормальной скорости. Выходной формат можно поменять на mp3. Имена файлов нормально отсортированы по порядку. При работе скрипта в консоли показывается текущий абзац отправленный на озвучку.
Для работы скрипта нужны access key и secret key — я оставил тут свои, но если перестанет работать — вы можете бесплатно получить новые ключи тут [7].
package main
import (
"log"
"fmt"
"io/ioutil"
"strings"
ivona "github.com/jpadilla/ivona-go"
)
func main() {
client := ivona.New("GDNAICTDMLSLU5426OAA", "2qUFTF8ZF9wqy7xoGBY+YXLEu+M2Qqalf/pSrd9m")
text, err := ioutil.ReadFile("/home/vitaly/Desktop/test.txt")
if err != nil {
log.Fatal(err)
}
arrayOfParagraphs := strings.Split(string(text), "n")
i := 0
for _,paragraph := range arrayOfParagraphs {
if (len(paragraph) < 4) { // against empty lines
continue
}
log.Printf("%vn", 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)
}
i++
file := fmt.Sprintf("/home/vitaly/Desktop/ivona/tts%04d.ogg", i) // files like 0001.ogg
ioutil.WriteFile(file, r.Audio, 0644)
}
}
После замены пути к книге и пути к выходной папке (а возможно и заменив символ по которому делается сплит файла а также указав английский вместо русского) запускаем скрипт — минут за десять получаем около сотни страниц готового tts:
go run ivona-tts.go
Это мой первый go код, приветствую вашу критику.
P.S.: Первым делом лучше искать уже озвученную человеком версию книги.
Автор: zdanevich-vitaly
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/google/109695
Ссылки в тексте:
[1] Pocket: https://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro
[2] Google Books: https://play.google.com/store/apps/details?id=com.google.android.apps.books
[3] SpeechKit от Яндекс: https://tts.voicetech.yandex.net/generate?text=%22%D0%A5%D0%B0%D0%B1%D1%8B%20%D0%BF%D1%80%D0%BE%20%D0%BD%D0%B0%D1%83%D0%BA%D1%83,%20%D0%BA%D0%BE%D1%81%D0%BC%D0%BE%D1%81,%20%D0%B3%D0%B0%D0%B4%D0%B6%D0%B5%D1%82%D1%8B,%20%D0%9F%D0%9E,%20%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D1%83%20%D0%B8%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%B5%20%D1%81%D1%85%D0%BE%D0%B6%D0%B8%D0%B5%20%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B5%D1%85%D0%B0%D0%BB%D0%B8%20%D0%BD%D0%B0%20geektimes.ru.%20%22&format=mp3&lang=ru-RU&speaker=zahar&emotion=good&key=a3a66d18-e9d2-43af-9408-36a30416baed
[4] Ivona: https://www.ivona.com/
[5] Go-библиотеку для IVONA Speech Cloud API: http://github.com/jpadilla/ivona-go
[6] Скрипт: https://github.com/vitaly-zdanevich/ivona-tts
[7] бесплатно получить новые ключи тут: https://www.ivona.com/us/account/speechcloud/credentials
[8] Источник: https://habrahabr.ru/post/275587/
Нажмите здесь для печати.