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.
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: