fest 0.0.3 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.org +27 -17
- data/changelog.org +4 -1
- data/fest.gemspec +3 -2
- data/lib/fest.rb +51 -38
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26879c197839ab9149a6a17cf977b3c5541585db
|
4
|
+
data.tar.gz: 84cb74a1f0f2a5c0dcf34430375d8871f59b8b78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e46a0f829b8e333c5acc579313ba5dcc95c7a2036b7b697af22accfd3de61e45e246818d9820effdede245a26eda2be009968f0c9527dd08438994dd7a846cd
|
7
|
+
data.tar.gz: 8f3f7389f316015352bf41551bbc789942c41ca2e093d9747b3878585044497722c9206a6a16fd8baf12c2fd406bdb9058f2b70a82722b368ce8dbb83fa05909
|
data/README.org
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
** FEST
|
2
2
|
FEST - Ruby-адаптер, использующий [[https://wiki.archlinux.org/index.php/Festival_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29][Festival]], для озвучки текста и скриптов...
|
3
3
|
** Установка
|
4
|
-
|
4
|
+
Требуется:
|
5
|
+
- *nix* or OS X ...
|
6
|
+
- [[https://wiki.archlinux.org/index.php/Festival_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29][Festival]] и нужные языки...
|
7
|
+
- [[https://wiki.archlinux.org/index.php/PulseAudio_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29][Pulseaudio]]
|
8
|
+
- xbacklight ([[https://wiki.archlinux.org/index.php/Backlight_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29][backlight]])
|
5
9
|
#+begin_src ruby
|
6
10
|
# Gemfile
|
7
11
|
gem 'fest'
|
@@ -22,52 +26,58 @@ text = "Пример"
|
|
22
26
|
# => Произнесёт "Пример"
|
23
27
|
|
24
28
|
# Расширенный вариант
|
25
|
-
params = {:
|
29
|
+
params = {:language => "cmu_us_slt_arctic_hts"}
|
26
30
|
text = "This is an example"
|
27
31
|
@fest.say(text, params)
|
28
|
-
# => Произнесёт "This is an example"
|
32
|
+
# => Произнесёт "This is an example" ...
|
29
33
|
|
30
34
|
# Все параметры
|
31
35
|
# params || default value
|
32
|
-
params[:
|
33
|
-
params[:
|
34
|
-
params[:
|
35
|
-
params[:lang] || "voice_msu_ru_nsh_clunits"
|
36
|
+
params[:path] || "/tmp"
|
37
|
+
params[:down_volume] || 7
|
38
|
+
params[:language] || "voice_msu_ru_nsh_clunits"
|
36
39
|
|
37
40
|
# Склонение
|
38
|
-
|
39
|
-
arr = ["Сообщение", "Сообщения", "Сообщений"]
|
40
|
-
text = @fest.pluraform(num, arr)
|
41
|
+
text = @fest.pluraform(2, ["Сообщение", "Сообщения", "Сообщений"])
|
41
42
|
puts text
|
42
43
|
# => "Сообщения"
|
43
44
|
#+end_src
|
44
45
|
|
45
46
|
** Кастомизация
|
46
47
|
#+begin_src ruby
|
47
|
-
@fest.init(params
|
48
|
-
# Узнает текущую громкость... @
|
48
|
+
@fest.init(params)
|
49
|
+
# Узнает текущую громкость... @path, @index ...
|
50
|
+
|
51
|
+
@fest.check_optimal_volume
|
52
|
+
# @volume = @current_volume - @down_volume
|
53
|
+
# Вычитает из текущей громкости @down_volume
|
49
54
|
|
50
55
|
@fest.check_light # (with xbacklight)
|
51
56
|
# Проверяет яркость не равна ли нулю... если равна выходит...
|
52
57
|
# Можно сделать свою проверку ...
|
53
58
|
|
54
59
|
@fest.check_say_wav
|
55
|
-
# Проверяем на max @
|
60
|
+
# Проверяем на max @index ... если нету @index = 1 ...
|
56
61
|
# Требуется чтобы сообщения не затирались до проигрывания...
|
57
62
|
|
58
63
|
@fest.make_wav(text)
|
59
|
-
# Создаём wav с определённым языком ... с учётом @
|
64
|
+
# Создаём wav с определённым языком ... с учётом @index...
|
60
65
|
|
61
|
-
@fest.set_volume(
|
62
|
-
# Ставит
|
66
|
+
@fest.set_volume(volume)
|
67
|
+
# Ставит громкость текущую громкость
|
63
68
|
|
64
69
|
@fest.expect_if_aplay_now
|
65
70
|
# Ожидает, если проигрывается сообщение ...
|
66
71
|
|
72
|
+
@fest.turn_down_volume
|
73
|
+
# Получает список входящих каналов @inputs
|
74
|
+
# Понижает громкость на @down_volume ...
|
75
|
+
|
67
76
|
@fest.play_wav
|
68
77
|
# Проигрывает wav ...
|
69
78
|
|
70
|
-
@fest.return_current_volume
|
79
|
+
@fest.return_current_volume
|
80
|
+
# Возращает громкость на каналах @inputs ...
|
71
81
|
# Возращает громкость до проигрывания ...
|
72
82
|
|
73
83
|
@fest.delete_wav
|
data/changelog.org
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
**
|
1
|
+
** 1.0.3 (2015-01-03 Сб)
|
2
|
+
- Добавлена плавающая громкость
|
3
|
+
- Понижение громкости у всех других источников (pulseaudio)
|
4
|
+
** 0.0.3 (2015-01-01 Чт)
|
2
5
|
- Фикс получения @current_volume
|
3
6
|
- :lang = "voice_msu_ru_nsh_clunits" (без скобок)
|
4
7
|
** 0.0.2 (2015-01-01 Чт)
|
data/fest.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "fest"
|
3
|
-
s.version = "
|
3
|
+
s.version = "1.0.3"
|
4
4
|
s.authors = ["Alexsey Ermolaev"]
|
5
5
|
s.email = %q{afay.zangetsu@gmail.com}
|
6
6
|
s.homepage = %q{https://github.com/AfsmNGhr/fest}
|
@@ -11,5 +11,6 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.files = `git ls-files`.split("\n")
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
|
14
|
-
s.requirements
|
14
|
+
s.requirements = ['*nix* or OS X', 'Pulseaudio sound server',
|
15
|
+
'Festival speech engine', 'xbacklight']
|
15
16
|
end
|
data/lib/fest.rb
CHANGED
@@ -2,22 +2,34 @@
|
|
2
2
|
|
3
3
|
class Fest
|
4
4
|
|
5
|
-
def say(
|
5
|
+
def say(string, params={})
|
6
6
|
init(params={})
|
7
|
+
check_optimal_volume
|
7
8
|
check_light
|
8
|
-
@
|
9
|
-
make_wav(
|
10
|
-
set_volume(params={})
|
9
|
+
@index = check_say_wav
|
10
|
+
make_wav(string)
|
11
11
|
expect_if_aplay_now
|
12
|
+
turn_down_volume
|
12
13
|
play_wav
|
13
|
-
return_current_volume
|
14
|
+
return_current_volume
|
14
15
|
delete_wav
|
15
16
|
end
|
16
17
|
|
17
|
-
def init(params
|
18
|
-
@
|
18
|
+
def init(params)
|
19
|
+
@params = params
|
20
|
+
@path = @params[:path] || "/tmp"
|
19
21
|
@current_volume = `amixer | grep -o '[0-9]*' | sed "5 ! d"`.to_i
|
20
|
-
@
|
22
|
+
@index = `ls -r #{@path} | grep -o '[0-9]*' | sed "1 ! d"`.to_i
|
23
|
+
end
|
24
|
+
|
25
|
+
def check_optimal_volume
|
26
|
+
if @params[:down_volume].nil?
|
27
|
+
@down_volume = 7
|
28
|
+
@volume = @current_volume - @down_volume
|
29
|
+
else
|
30
|
+
@down_volume = @params[:down_volume]
|
31
|
+
@volume = @current_volume - @down_volume
|
32
|
+
end
|
21
33
|
end
|
22
34
|
|
23
35
|
def check_light
|
@@ -26,23 +38,21 @@ class Fest
|
|
26
38
|
end
|
27
39
|
|
28
40
|
def check_say_wav
|
29
|
-
if @
|
30
|
-
@
|
41
|
+
if @index > 0
|
42
|
+
@index += 1
|
31
43
|
else
|
32
|
-
@
|
44
|
+
@index = 1
|
33
45
|
end
|
34
46
|
end
|
35
47
|
|
36
|
-
def make_wav(
|
37
|
-
|
38
|
-
system("echo '#{
|
39
|
-
-eval '(#{
|
48
|
+
def make_wav(string)
|
49
|
+
language = @params[:language] || "voice_msu_ru_nsh_clunits"
|
50
|
+
system("echo '#{string}' | text2wave -o #{@path}/say_#{@index}.wav \
|
51
|
+
-eval '(#{language})' > /dev/null 2>&1")
|
40
52
|
end
|
41
53
|
|
42
|
-
def set_volume(
|
43
|
-
|
44
|
-
sound = params[:sound] || "alsa"
|
45
|
-
set_volume_sound_system(volume, params={})
|
54
|
+
def set_volume(volume)
|
55
|
+
system("amixer set Master #{volume}% > /dev/null 2>&1")
|
46
56
|
end
|
47
57
|
|
48
58
|
def expect_if_aplay_now
|
@@ -52,41 +62,44 @@ class Fest
|
|
52
62
|
end
|
53
63
|
end
|
54
64
|
|
55
|
-
def
|
56
|
-
|
65
|
+
def turn_down_volume
|
66
|
+
@inputs = `pactl list sink-inputs | grep № | grep -o '[0-9]*'`.split("\n")
|
67
|
+
@new_volume = @volume * 655
|
68
|
+
@inputs.each do |input|
|
69
|
+
system("pactl set-sink-input-volume #{input} '#{@new_volume}'")
|
70
|
+
end
|
57
71
|
end
|
58
72
|
|
59
|
-
def
|
60
|
-
|
61
|
-
set_volume_sound_system(@current_volume, params={})
|
62
|
-
end
|
73
|
+
def play_wav
|
74
|
+
system("aplay #{@path}/say_#{@index}.wav > /dev/null 2>&1")
|
63
75
|
end
|
64
76
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
77
|
+
def return_current_volume
|
78
|
+
if `ps -el | grep aplay | wc -l`.to_i == 0
|
79
|
+
@inputs.each do |input|
|
80
|
+
volume = @current_volume * 655
|
81
|
+
system("pactl set-sink-input-volume #{input} '#{volume}'")
|
82
|
+
end
|
83
|
+
set_volume(@current_volume)
|
71
84
|
end
|
72
85
|
end
|
73
86
|
|
74
87
|
def delete_wav
|
75
|
-
system("rm -f #{@
|
88
|
+
system("rm -f #{@path}/say_#{@index}.wav")
|
76
89
|
end
|
77
90
|
|
78
|
-
def pluralform(
|
79
|
-
n =
|
91
|
+
def pluralform(number, array)
|
92
|
+
n = number % 100
|
80
93
|
m = n % 10
|
81
94
|
|
82
95
|
if n > 10 && n < 20
|
83
|
-
return
|
96
|
+
return array[2]
|
84
97
|
elsif m > 1 && m < 5
|
85
|
-
return
|
98
|
+
return array[1]
|
86
99
|
elsif m == 1
|
87
|
-
return
|
100
|
+
return array[0]
|
88
101
|
else
|
89
|
-
return
|
102
|
+
return array[2]
|
90
103
|
end
|
91
104
|
end
|
92
105
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexsey Ermolaev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ruby wrapper for festival scripts
|
14
14
|
email: afay.zangetsu@gmail.com
|
@@ -42,7 +42,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '0'
|
44
44
|
requirements:
|
45
|
+
- "*nix* or OS X"
|
46
|
+
- Pulseaudio sound server
|
45
47
|
- Festival speech engine
|
48
|
+
- xbacklight
|
46
49
|
rubyforge_project:
|
47
50
|
rubygems_version: 2.2.2
|
48
51
|
signing_key:
|