fest 1.0.5 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.org +7 -7
- data/changelog.org +4 -0
- data/fest.gemspec +1 -1
- data/lib/fest.rb +31 -50
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 007d77826bbe60048b450b36fb760c932f23a8f4
|
4
|
+
data.tar.gz: 6c6afb39d04586cd1992371d02d362e7b7c44c38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34697b9fe1f6d4c0be0fda8c46b28cb8f3559c8f08514796dbac142fe5d01a9b08472d221099eaa9f3cb6f7f2a74da5a0dd3a20716b85e4e3f8c05ed7f5b92df
|
7
|
+
data.tar.gz: 5ee36535af1631ac42d6c800f3c738979d662349a98aaa1146df3d4d7e7f0b19e5c2963eaa734abd1fb6e66d0a1091b0c2e4e496da05faa98e50fb81f15a5908
|
data/README.org
CHANGED
@@ -1,7 +1,6 @@
|
|
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
|
-
Требуется:
|
5
4
|
- *nix* or OS X ...
|
6
5
|
- [[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
6
|
- [[https://wiki.archlinux.org/index.php/PulseAudio_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29][Pulseaudio]]
|
@@ -34,12 +33,12 @@ text = "This is an example"
|
|
34
33
|
# Все параметры
|
35
34
|
# params || default value
|
36
35
|
params[:path] || "/tmp"
|
37
|
-
params[:down_volume] || [20,60,4] #[min, max, step]
|
36
|
+
params[:down_volume] || [20,60,4] # [min, max, step]
|
38
37
|
params[:backlight] || nil # отменить проверку подсветки
|
39
38
|
params[:language] || "voice_msu_ru_nsh_clunits"
|
40
39
|
|
41
40
|
# Склонение
|
42
|
-
text = @fest.pluraform(2,
|
41
|
+
text = @fest.pluraform(2, %w(Сообщение Сообщения Сообщений))
|
43
42
|
puts text
|
44
43
|
# => "Сообщения"
|
45
44
|
#+end_src
|
@@ -47,7 +46,8 @@ puts text
|
|
47
46
|
** Кастомизация
|
48
47
|
#+begin_src ruby
|
49
48
|
@fest.init(params)
|
50
|
-
# Узнает текущую громкость...
|
49
|
+
# Узнает текущую громкость...
|
50
|
+
# @path, @index, @min_volume, @max_volume ...
|
51
51
|
|
52
52
|
@fest.check_optimal_volume
|
53
53
|
# @volume = @current_volume - @down_volume
|
@@ -55,7 +55,6 @@ puts text
|
|
55
55
|
|
56
56
|
@fest.optimize_min_and_max_volume(min_volume, max_volume)
|
57
57
|
# Проверяет громкость и ставит min или max ...
|
58
|
-
# выполняет turn_down_volume
|
59
58
|
|
60
59
|
@fest.check_light # (with xbacklight)
|
61
60
|
# Проверяет яркость не равна ли нулю... если равна выходит...
|
@@ -68,7 +67,7 @@ puts text
|
|
68
67
|
@fest.make_wav(text)
|
69
68
|
# Создаём wav с определённым языком ... с учётом @index...
|
70
69
|
|
71
|
-
@fest.
|
70
|
+
@fest.change_volume(volume)
|
72
71
|
# Ставит громкость ...
|
73
72
|
|
74
73
|
@fest.expect_if_aplay_now
|
@@ -76,11 +75,12 @@ puts text
|
|
76
75
|
|
77
76
|
@fest.turn_down_volume
|
78
77
|
# Получает список входящих каналов @inputs
|
78
|
+
# Понижает громкость на @down_volume ...
|
79
79
|
# @down_volume = @current_volume / 10 * 4
|
80
80
|
# @down_volume = @current_volume / 10 * @params[:down_volume[2]]
|
81
|
-
# Понижает громкость на @down_volume ...
|
82
81
|
|
83
82
|
@fest.play_wav
|
83
|
+
# выполняет turn_down_volume
|
84
84
|
# Проигрывает wav ...
|
85
85
|
|
86
86
|
@fest.return_current_volume
|
data/changelog.org
CHANGED
data/fest.gemspec
CHANGED
data/lib/fest.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
2
|
+
#
|
3
3
|
class Fest
|
4
|
-
|
5
|
-
|
6
|
-
init(params={})
|
4
|
+
def say(string, params = {})
|
5
|
+
init(params)
|
7
6
|
check_light
|
8
7
|
@index = check_say_wav
|
9
8
|
make_wav(string)
|
@@ -16,87 +15,76 @@ class Fest
|
|
16
15
|
|
17
16
|
def init(params)
|
18
17
|
@params = params
|
19
|
-
@path = @params[:path] ||
|
18
|
+
@path = @params[:path] || '/tmp'
|
20
19
|
@current_volume = `amixer | grep -o '[0-9]*' | sed "5 ! d"`.to_i
|
21
20
|
@index = `ls -r #{@path} | grep -o '[0-9]*' | sed "1 ! d"`.to_i
|
21
|
+
@min_volume = @params[:down_volume[0]] || 20
|
22
|
+
@max_volume = @params[:down_volume[1]] || 60
|
22
23
|
end
|
23
24
|
|
24
25
|
def check_optimal_volume
|
25
26
|
if @params[:down_volume].nil?
|
26
27
|
@down_volume = @current_volume / 10 * 4
|
27
28
|
@volume = @current_volume - @down_volume
|
28
|
-
optimize_min_and_max_volume(20, 60)
|
29
29
|
else
|
30
30
|
@down_volume = @current_volume / 10 * @params[:down_volume[2]]
|
31
31
|
@volume = @current_volume - @down_volume
|
32
|
-
optimize_min_and_max_volume(@params[:down_volume[0]],
|
33
|
-
@params[:down_volume[1]])
|
34
32
|
end
|
33
|
+
optimize_min_and_max_volume
|
35
34
|
end
|
36
35
|
|
37
|
-
def optimize_min_and_max_volume
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
36
|
+
def optimize_min_and_max_volume
|
37
|
+
change_volume(
|
38
|
+
if @current_volume > @max_volume
|
39
|
+
@max_volume
|
40
|
+
elsif @current_volume < @min_volume
|
41
|
+
@min_volume
|
42
|
+
else
|
43
|
+
@current_volume
|
44
|
+
end
|
45
|
+
)
|
46
46
|
end
|
47
47
|
|
48
48
|
def check_light
|
49
|
-
if @params[:backlight].nil?
|
50
|
-
light = `xbacklight`.to_i
|
51
|
-
exit if light == 0
|
52
|
-
end
|
49
|
+
exit if @params[:backlight].nil? && `xbacklight`.to_i == 0
|
53
50
|
end
|
54
51
|
|
55
52
|
def check_say_wav
|
56
|
-
|
57
|
-
@index += 1
|
58
|
-
else
|
59
|
-
@index = 1
|
60
|
-
end
|
53
|
+
@index > 0 ? @index += 1 : @index = 1
|
61
54
|
end
|
62
55
|
|
63
56
|
def make_wav(string)
|
64
|
-
language = @params[:language] || "voice_msu_ru_nsh_clunits"
|
65
57
|
system("echo '#{string}' | text2wave -o #{@path}/say_#{@index}.wav \
|
66
|
-
-eval '(#{language})'
|
58
|
+
-eval '(#{@params[:language] || 'voice_msu_ru_nsh_clunits'})' \
|
59
|
+
> /dev/null 2>&1")
|
67
60
|
end
|
68
61
|
|
69
|
-
def
|
62
|
+
def change_volume(volume)
|
70
63
|
system("amixer set Master #{volume}% > /dev/null 2>&1")
|
71
64
|
end
|
72
65
|
|
73
66
|
def expect_if_aplay_now
|
74
|
-
|
67
|
+
loop do
|
75
68
|
sleep 1
|
76
|
-
|
77
|
-
break if aplay == 0
|
69
|
+
break if `ps -el | grep aplay | wc -l`.to_i == 0
|
78
70
|
end
|
79
71
|
end
|
80
72
|
|
81
73
|
def turn_down_volume
|
82
74
|
@inputs = `pactl list sink-inputs | grep № | grep -o '[0-9]*'`.split("\n")
|
83
|
-
new_volume = @volume * 655
|
84
75
|
@inputs.each do |input|
|
85
|
-
system("pactl set-sink-input-volume #{input} '#{
|
76
|
+
system("pactl set-sink-input-volume #{input} '#{@volume * 655}'")
|
86
77
|
end
|
87
78
|
end
|
88
79
|
|
89
80
|
def play_wav
|
81
|
+
turn_down_volume
|
90
82
|
system("aplay #{@path}/say_#{@index}.wav > /dev/null 2>&1")
|
91
83
|
end
|
92
84
|
|
93
85
|
def return_current_volume
|
94
|
-
|
95
|
-
@
|
96
|
-
volume = @current_volume * 655
|
97
|
-
system("pactl set-sink-input-volume #{input} '#{volume}'")
|
98
|
-
end
|
99
|
-
set_volume(@current_volume)
|
86
|
+
@inputs.each do |input|
|
87
|
+
system("pactl set-sink-input-volume #{input} '#{@current_volume * 655}'")
|
100
88
|
end
|
101
89
|
end
|
102
90
|
|
@@ -108,15 +96,8 @@ class Fest
|
|
108
96
|
n = number % 100
|
109
97
|
m = n % 10
|
110
98
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
return array[1]
|
115
|
-
elsif m == 1
|
116
|
-
return array[0]
|
117
|
-
else
|
118
|
-
return array[2]
|
119
|
-
end
|
99
|
+
n > 10 && n < 20 ? array[2] :
|
100
|
+
m > 1 && m < 20 ? array[1] :
|
101
|
+
m == 1 ? array[0] : array[2]
|
120
102
|
end
|
121
|
-
|
122
103
|
end
|
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: 1.0.
|
4
|
+
version: 1.0.7
|
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-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ruby wrapper for festival scripts
|
14
14
|
email: afay.zangetsu@gmail.com
|