-
-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1aa6124
commit c8ccd8c
Showing
2 changed files
with
120 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// Package ssml implements Speech Synthesis Markup Language. | ||
package ssml // import "github.com/SevereCloud/vksdk/v2/marusia/ssml" | ||
|
||
import ( | ||
"bytes" | ||
"strconv" | ||
"time" | ||
) | ||
|
||
// Builder SSML. | ||
type Builder struct { | ||
buf bytes.Buffer | ||
} | ||
|
||
// NewBuilder возвращает *Builder. | ||
func NewBuilder() *Builder { | ||
return &Builder{} | ||
} | ||
|
||
// Say используется для произношения слов. Пропускает теги внутрь. | ||
func (b *Builder) Say(s string) *Builder { | ||
_, _ = b.buf.WriteString(s) | ||
return b | ||
} | ||
|
||
// Paragraph используется для выделения абзацев. После абзаца ставится длинная интонационная пауза. | ||
func (b *Builder) Paragraph(s string) *Builder { | ||
return b.Say(`<p>`).Say(s).Say(`</p>`) | ||
} | ||
|
||
// Sentence используется для выделения предложений. Предложение будет | ||
// выделено интонационно, а в конце предложения будет пауза. | ||
func (b *Builder) Sentence(s string) *Builder { | ||
return b.Say(`<s>`).Say(s).Say(`</s>`) | ||
} | ||
|
||
// Break используется для вставки пауз между произносимым текстом. | ||
func (b *Builder) Break(duration time.Duration) *Builder { | ||
return b.Say(`<break time="`).Say(strconv.FormatInt(duration.Milliseconds(), 10)).Say(`ms"/>`) | ||
} | ||
|
||
// Speaker используется для вставки собственных аудиозаписей в текст. | ||
func (b *Builder) Speaker(s string) *Builder { | ||
return b.Say(`<speaker audio_vk_id="`).Say(s).Say(`"/>`) | ||
} | ||
|
||
// SpeakerFromLibrary используется для вставки звуков из библиотеки в текст. | ||
func (b *Builder) SpeakerFromLibrary(s string) *Builder { | ||
return b.Say(`<speaker audio="`).Say(s).Say(`"/>`) | ||
} | ||
|
||
// String возвращает SSML в виде строки. | ||
func (b Builder) String() string { | ||
return "<speak>" + b.buf.String() + "</speak>" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package ssml_test | ||
|
||
import ( | ||
"fmt" | ||
"time" | ||
|
||
"github.com/SevereCloud/vksdk/v2/marusia/ssml" | ||
) | ||
|
||
func ExampleNewBuilder() { | ||
b := ssml.NewBuilder() | ||
b.Say("Привет") | ||
b.Break(500 * time.Millisecond).Say("Я Маруся") | ||
|
||
fmt.Print(b) | ||
// Output: <speak>Привет<break time="500ms"/>Я Маруся</speak> | ||
} | ||
|
||
func ExampleBuilder_Say() { | ||
b := ssml.NewBuilder() | ||
b.Say("Привет") | ||
|
||
fmt.Print(b) | ||
// Output: <speak>Привет</speak> | ||
} | ||
|
||
func ExampleBuilder_Paragraph() { | ||
b := ssml.NewBuilder() | ||
b.Paragraph("Привет") | ||
|
||
fmt.Print(b) | ||
// Output: <speak><p>Привет</p></speak> | ||
} | ||
|
||
func ExampleBuilder_Sentence() { | ||
b := ssml.NewBuilder() | ||
b.Sentence("Привет") | ||
|
||
fmt.Print(b) | ||
// Output: <speak><s>Привет</s></speak> | ||
} | ||
|
||
func ExampleBuilder_Break() { | ||
b := ssml.NewBuilder() | ||
b.Say("Привет").Break(500 * time.Millisecond).Say("Я Маруся") | ||
|
||
fmt.Print(b) | ||
// Output: <speak>Привет<break time="500ms"/>Я Маруся</speak> | ||
} | ||
|
||
func ExampleBuilder_Speaker() { | ||
b := ssml.NewBuilder() | ||
b.Say("Угадайте, чей это голос?").Speaker("-2000000002_123456789") | ||
|
||
fmt.Print(b) | ||
// Output: <speak>Угадайте, чей это голос?<speaker audio_vk_id="-2000000002_123456789"/></speak> | ||
} | ||
|
||
func ExampleBuilder_SpeakerFromLibrary() { | ||
b := ssml.NewBuilder() | ||
b.Say("Так мычит корова").SpeakerFromLibrary("marusia-sounds/animals-cow-1") | ||
|
||
fmt.Print(b) | ||
// Output: <speak>Так мычит корова<speaker audio="marusia-sounds/animals-cow-1"/></speak> | ||
} |