class AozoraPolly::Builder
Attributes
mp3_builder[R]
Public Class Methods
new()
click to toggle source
# File lib/aozora_polly/builder.rb, line 9 def initialize @mp3_builder = Ssml2mp3::Builder.new end
Public Instance Methods
create_ssml(doc, ssml_body)
click to toggle source
# File lib/aozora_polly/builder.rb, line 48 def create_ssml(doc, ssml_body) <<-XML <?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="ja"> <p>#{doc.title}</p> <p>#{doc.author}</p> #{ssml_body} </speak> XML end
html2ssml(html)
click to toggle source
# File lib/aozora_polly/builder.rb, line 28 def html2ssml(html) doc = ::AozoraPolly::Document.parse(html.encode("utf-8")) main_ssml = html2ssml_fragment(doc.main_text) bib_ssml = html2ssml_fragment(doc.bibliography) create_ssml(doc, main_ssml + bib_ssml) end
html2ssml_fragment(fragment)
click to toggle source
# File lib/aozora_polly/builder.rb, line 36 def html2ssml_fragment(fragment) Sanitize. fragment(fragment, elements: %w(br ruby rb rp rt div h1 h2 h3 h4 h5)). gsub(%r(<br\s*/?>), '<break />'). gsub(%r(<(?:h\d|div)[^>]*>), '<p>'). gsub(%r(</(?:h\d|div)>), '</p>'). gsub(%r(</?ruby>), ''). gsub(%r(<rb>[^<]*</rb>), ''). gsub(%r(<rp>[^<]*</rp>), ''). gsub(%r(</?rt>), '') end
url2mp3(aozora_url, mp3_path)
click to toggle source
# File lib/aozora_polly/builder.rb, line 13 def url2mp3(aozora_url, mp3_path) ssml = url2ssml(aozora_url) basename = File.basename(mp3_path, ".mp3") File.open(mp3_path, "wb") do |output| mp3_builder.synthesize(ssml, basename, output) end end
url2ssml(aozora_url)
click to toggle source
# File lib/aozora_polly/builder.rb, line 22 def url2ssml(aozora_url) uri = URI.parse(aozora_url) html = Net::HTTP.get(uri).force_encoding("cp932") html2ssml(html) end