fest 0.0.3 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README.org +27 -17
  3. data/changelog.org +4 -1
  4. data/fest.gemspec +3 -2
  5. data/lib/fest.rb +51 -38
  6. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ddb7bb72b3d6162f6f96e699f518efeedd318d3
4
- data.tar.gz: f43fd0731e082af74e7153d685bbe5fb90af8ca8
3
+ metadata.gz: 26879c197839ab9149a6a17cf977b3c5541585db
4
+ data.tar.gz: 84cb74a1f0f2a5c0dcf34430375d8871f59b8b78
5
5
  SHA512:
6
- metadata.gz: 77c387f32f33c4409e92a3f61801685d80cb0c0e9be2d76907bd7fbc87facf98e58f728c0e16ee6c402a4b0b6c0368ae8a5fe9df1f2c5d745beae327b171c0dc
7
- data.tar.gz: 2b71f4246c62bc47136d40ffacedd4d3d0b7d96f1f0555eef3ff94b2e8c16df01c700d31ad018621189420c2fa6dfa55698ac86f8bd97f1086d26301b184e6d9
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
- Требуется установить [[https://wiki.archlinux.org/index.php/Festival_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29][Festival]] и нужные языки...
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 = {:lang => "cmu_us_slt_arctic_hts", :volume => 60}
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" поставив 60% громкости...
32
+ # => Произнесёт "This is an example" ...
29
33
 
30
34
  # Все параметры
31
35
  # params || default value
32
- params[:data] || "/tmp"
33
- params[:volume] || 70
34
- params[:sound] || "alsa"
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
- num = 2
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
- # Узнает текущую громкость... @data, @i ...
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 @i ... если нету @i = 1 ...
60
+ # Проверяем на max @index ... если нету @index = 1 ...
56
61
  # Требуется чтобы сообщения не затирались до проигрывания...
57
62
 
58
63
  @fest.make_wav(text)
59
- # Создаём wav с определённым языком ... с учётом @i...
64
+ # Создаём wav с определённым языком ... с учётом @index...
60
65
 
61
- @fest.set_volume(params={})
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(params={})
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
- ** 0.0.3 2015-01-01 Чт
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 = "0.0.3"
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 << 'Festival speech engine'
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(str, params={})
5
+ def say(string, params={})
6
6
  init(params={})
7
+ check_optimal_volume
7
8
  check_light
8
- @i = check_say_wav
9
- make_wav(str, params={})
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(params={})
14
+ return_current_volume
14
15
  delete_wav
15
16
  end
16
17
 
17
- def init(params={})
18
- @data = params[:data] || "/tmp"
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
- @i = `ls -r #{@data} | grep -o '[0-9]*' | sed "1 ! d"`.to_i
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 @i > 0
30
- @i += 1
41
+ if @index > 0
42
+ @index += 1
31
43
  else
32
- @i = 1
44
+ @index = 1
33
45
  end
34
46
  end
35
47
 
36
- def make_wav(str, params={})
37
- lang = params[:lang] || "voice_msu_ru_nsh_clunits"
38
- system("echo '#{str}' | text2wave -o #{@data}/say_#{@i}.wav \
39
- -eval '(#{lang})' > /dev/null 2>&1")
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(params={})
43
- volume = params[:volume] || 70
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 play_wav
56
- system("aplay #{@data}/say_#{@i}.wav > /dev/null 2>&1")
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 return_current_volume(params={})
60
- if `ps -el | grep aplay | wc -l`.to_i == 0
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 set_volume_sound_system(volume, params={})
66
- sound = params[:sound] || "alsa"
67
- if sound == "alsa"
68
- system("amixer set Master #{volume}% > /dev/null 2>&1")
69
- else
70
- system("amixer -D pulse set Master #{volume}% > /dev/null 2>&1")
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 #{@data}/say_#{@i}.wav")
88
+ system("rm -f #{@path}/say_#{@index}.wav")
76
89
  end
77
90
 
78
- def pluralform(num, arr)
79
- n = num % 100
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 arr[2]
96
+ return array[2]
84
97
  elsif m > 1 && m < 5
85
- return arr[1]
98
+ return array[1]
86
99
  elsif m == 1
87
- return arr[0]
100
+ return array[0]
88
101
  else
89
- return arr[2]
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: 0.0.3
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-01 00:00:00.000000000 Z
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: