ncode-syosetu-polly 0.2.3 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d6c5e17b36bcefc1d7a2559dd3b2619073ac9838
4
- data.tar.gz: '02924fb6a6f8f1b4764acbfd6a71ce40efe59125'
2
+ SHA256:
3
+ metadata.gz: 14cfc3c992304e8cac46f0c87aa0eec896b2b7c3bb65716392b3061e2227a0cb
4
+ data.tar.gz: d2589c5ef1a1b8d4119ee43f357358edb1d86121f822028054c9a3094f1d40c3
5
5
  SHA512:
6
- metadata.gz: d42577ac4af37db8cfbf165a64ec0688774b1527f38b98bc38238a5f67bee27af49e510526d4d1941f31a1f804e1f374a71d868c5a9f8de569d49a895674a23c
7
- data.tar.gz: dbb644bc7909aec123656210e871d7322a64349ed81938b1e2fd73bc9ed8bf10aad369cc68ed7b838e32061a0f943e5571f2ce60e22d451d765919de85c82118
6
+ metadata.gz: 2532d601545d51572c31135ebd3b88d1c48f655c4d2afe11b3a77d6c0aa3c70abdbffdb73d0a948a71d221fbd58e722bc820e26f877ff2663002850c44ea21fe
7
+ data.tar.gz: e129b3f21a1eb52622cf17430838f084335bbe863416f9b0893afc191ecbf191cc374b1d239c997fe8297980c2d438110a63e014264d45abfa1732c96205262f
data/exe/ncode2mp3 CHANGED
@@ -8,9 +8,10 @@ if ARGV.size == 0
8
8
  exit
9
9
  end
10
10
 
11
- ncode, episode_number = ARGV
11
+ arg, episode_number = ARGV
12
+ parsed = NcodeSyosetu.parse_url(arg)
12
13
 
13
- episode = NcodeSyosetu.client.get_episode(ncode, "dummy_title", episode_number)
14
+ episode = NcodeSyosetu.client(host: parsed[:host]).get_episode(parsed[:ncode], "dummy_title", episode_number)
14
15
 
15
16
  builder = NcodeSyosetu::Builder::Polly.new(logger: Logger.new(STDOUT))
16
- builder.write_episode(episode, "#{ncode}-#{episode_number}.mp3")
17
+ builder.write_episode(episode, "#{parsed[:ncode]}-#{episode_number}.mp3")
@@ -1,8 +1,6 @@
1
1
  require "aws-sdk-polly"
2
2
  require "sanitize"
3
3
  require "nokogiri"
4
- require "expeditor"
5
- require "concurrent"
6
4
  require "htmlentities"
7
5
 
8
6
  module NcodeSyosetu
@@ -10,7 +8,7 @@ module NcodeSyosetu
10
8
  class Polly
11
9
  POLLY_TEXT_LENGTH_LIMIT = 1000
12
10
 
13
- attr_reader :sample_rate, :client, :logger, :service
11
+ attr_reader :sample_rate, :client, :logger
14
12
 
15
13
  def initialize(options={})
16
14
  options[:region] ||= "us-west-2"
@@ -19,51 +17,56 @@ module NcodeSyosetu
19
17
  @max_threads = options.delete(:max_threads) || 10
20
18
  @client = Aws::Polly::Client.new(options)
21
19
  @htmlentities = HTMLEntities.new
22
- @service = Expeditor::Service.new(
23
- executor: Concurrent::ThreadPoolExecutor.new(
24
- min_threads: 0,
25
- max_threads: @max_threads,
26
- )
27
- )
28
20
  end
29
21
 
30
22
  def write_episode(episode, path)
31
23
  tmp_files = []
32
24
  ssmls = split_ssml(episode.body_ssml.gsub("\n", "")).map{|body_ssml| create_ssml(body_ssml) }
33
25
 
34
- commands = []
35
-
36
26
  dirname = File.dirname(path)
37
27
  basename = File.basename(path, ".mp3")
38
28
  tmpdir = File.join(dirname, basename)
39
29
  FileUtils.mkdir_p(tmpdir)
40
30
 
31
+ queue = Queue.new
32
+ errors = Queue.new
33
+
41
34
  ssmls.each_with_index do |ssml, i|
42
35
  tmp_ssml_path = File.join(tmpdir, "#{basename}-#{i}.ssml")
43
36
  File.write(tmp_ssml_path, ssml)
44
37
  tmp_path = File.join(tmpdir, "#{basename}-#{i}.mp3")
45
- command = Expeditor::Command.new(service: service) do
46
- logger.info("#{tmp_path}...") if logger
47
- begin
48
- client.synthesize_speech(
49
- response_target: tmp_path,
50
- output_format: "mp3",
51
- sample_rate: sample_rate,
52
- text: ssml,
53
- text_type: "ssml",
54
- voice_id: "Mizuki",
55
- )
56
- rescue => e
57
- logger.error("#{e.message}\n#{ssml}")
58
- logger.error("#{e.message}: #{tmp_ssml_path}\n#{ssml}")
59
- raise e
38
+ queue << [ssml, tmp_ssml_path, tmp_path]
39
+ tmp_files << tmp_path
40
+ end
41
+
42
+ workers_count = [@max_threads, queue.size].min
43
+ workers_count.times { queue << nil }
44
+
45
+ workers = workers_count.times.map do
46
+ Thread.new do
47
+ while (item = queue.pop)
48
+ ssml, tmp_ssml_path, tmp_path = item
49
+ logger.info("#{tmp_path}...") if logger
50
+ begin
51
+ client.synthesize_speech(
52
+ response_target: tmp_path,
53
+ output_format: "mp3",
54
+ sample_rate: sample_rate,
55
+ text: ssml,
56
+ text_type: "ssml",
57
+ voice_id: "Mizuki",
58
+ )
59
+ rescue => e
60
+ logger.error("#{e.message}: #{tmp_ssml_path}\n#{ssml}") if logger
61
+ errors << e
62
+ end
60
63
  end
61
64
  end
62
- command.start
63
- commands << command
64
- tmp_files << tmp_path
65
65
  end
66
- commands.each{|command| command.get }
66
+ workers.each(&:join)
67
+
68
+ raise errors.pop unless errors.empty?
69
+
67
70
  File.open(path, "wb") do |file|
68
71
  tmp_files.each do |tmp_path|
69
72
  File.open(tmp_path, "rb") do |tmp_file|
@@ -20,14 +20,11 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "ncode-syosetu-core", GEM_VERSION
22
22
  spec.add_dependency "ncode-syosetu-ssml", GEM_VERSION
23
- spec.add_dependency "aws-sdk-polly", "1.0.0.rc2"
24
- spec.add_dependency "sanitize", "~> 4.4"
23
+ spec.add_dependency "aws-sdk-polly", "~> 1.122"
24
+ spec.add_dependency "sanitize", "~> 7.0"
25
25
  spec.add_dependency "nokogiri", ">= 1.6"
26
- spec.add_dependency "expeditor", "~> 0.5.0"
27
26
  spec.add_dependency "htmlentities"
28
27
 
29
- spec.add_development_dependency "bundler", "~> 1.13"
30
- spec.add_development_dependency "rake", "~> 10.0"
31
- spec.add_development_dependency "rspec", "~> 3.0"
32
- spec.add_development_dependency "pry"
28
+ spec.add_development_dependency "rake"
29
+ spec.add_development_dependency "rspec", "~> 3.13"
33
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ncode-syosetu-polly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hogelog
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-14 00:00:00.000000000 Z
11
+ date: 2026-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ncode-syosetu-core
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.3
19
+ version: 0.3.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.3
26
+ version: 0.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ncode-syosetu-ssml
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.3
33
+ version: 0.3.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.3
40
+ version: 0.3.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: aws-sdk-polly
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.0.rc2
47
+ version: '1.122'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.0.rc2
54
+ version: '1.122'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sanitize
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '4.4'
61
+ version: '7.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '4.4'
68
+ version: '7.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: nokogiri
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.6'
83
- - !ruby/object:Gem::Dependency
84
- name: expeditor
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.5.0
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.5.0
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: htmlentities
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,63 +94,35 @@ dependencies:
108
94
  - - ">="
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: bundler
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '1.13'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '1.13'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: rake
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
- - - "~>"
101
+ - - ">="
130
102
  - !ruby/object:Gem::Version
131
- version: '10.0'
103
+ version: '0'
132
104
  type: :development
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
136
- - - "~>"
108
+ - - ">="
137
109
  - !ruby/object:Gem::Version
138
- version: '10.0'
110
+ version: '0'
139
111
  - !ruby/object:Gem::Dependency
140
112
  name: rspec
141
113
  requirement: !ruby/object:Gem::Requirement
142
114
  requirements:
143
115
  - - "~>"
144
116
  - !ruby/object:Gem::Version
145
- version: '3.0'
117
+ version: '3.13'
146
118
  type: :development
147
119
  prerelease: false
148
120
  version_requirements: !ruby/object:Gem::Requirement
149
121
  requirements:
150
122
  - - "~>"
151
123
  - !ruby/object:Gem::Version
152
- version: '3.0'
153
- - !ruby/object:Gem::Dependency
154
- name: pry
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- description:
124
+ version: '3.13'
125
+ description:
168
126
  email:
169
127
  - konbu.komuro@gmail.com
170
128
  executables:
@@ -186,7 +144,7 @@ homepage: https://github.com/hogelog/ncode-syosetu
186
144
  licenses:
187
145
  - MIT
188
146
  metadata: {}
189
- post_install_message:
147
+ post_install_message:
190
148
  rdoc_options: []
191
149
  require_paths:
192
150
  - lib
@@ -201,9 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
201
159
  - !ruby/object:Gem::Version
202
160
  version: '0'
203
161
  requirements: []
204
- rubyforge_project:
205
- rubygems_version: 2.6.8
206
- signing_key:
162
+ rubygems_version: 3.5.22
163
+ signing_key:
207
164
  specification_version: 4
208
165
  summary: Ncode syosetu to speech by Amazon Polly
209
166
  test_files: []