fest 0.0.3 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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:
|