tts 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Yiling Cao
1
+ Copyright (c) 2011 Yiling Cao / Charlie Revett
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,27 +1,19 @@
1
1
  = tts
2
2
 
3
- Google translate TTS (text to speech) so farhas most available languages and reasonable synthesizer.
3
+ Using the Google Translate service as the speech engine, this gem generates a .mp3 voice file from any given string.
4
4
 
5
- This TTS is using it as the speech engine. submit your sentance and specified language to google and download the mp3 voice file.
5
+ == Usage
6
+ # Will download "Hello World!.mp3" to your current directory
7
+ # Supported languages: ["zh", "en", "it", "fr"]
8
+ "Hello World!".to_file "en"
6
9
 
7
- == install
8
- gem install tts
10
+ # Save the file to a specific location
11
+ "Light rain with highs of 5 degrees".to_file "en", "~/weather.mp3"
9
12
 
10
- == usage
11
- This will download the correspoding files to your excuting directory.
12
- "hello world!".to_file "en"
13
-
14
- "人民代表代表人民".to_file "zh"
15
-
16
-
17
- You can also save the file with the path/filename you desired:
18
-
19
- "ruby is awesome".to_file "en", "~/rubyyyy.mp3"
20
-
21
- === 0.3.0 new ability to add 3rd party server, to Config server url
22
- If you have problem to visit original google tts url, you can set a another tts server url, for example:
23
- Tts.server_url "http://www.3rdparty.com/translate_tts"
13
+ # Supports large text files, as the gem will batch up the requests to Google (as each request max 100 chars)
14
+ text = "People living on the east coast of England have been warned to stay away from their homes because of further high tides expected later. The tidal surge that hit the UK is said to have been the worst for 60 years, with thousands abandoning their homes."
15
+ text.to_file "en"
24
16
 
25
17
  == Copyright
26
18
 
27
- Copyright (c) 2011 Yiling Cao. Check LICENSE.txt
19
+ Copyright (c) 2011 Yiling Cao / Charlie Revett. Check LICENSE.txt
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/lib/tts.rb CHANGED
@@ -1,46 +1,80 @@
1
1
  # encoding: utf-8
2
-
3
- def to_valid_fn fn
4
- fn.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_')
5
- end
6
-
2
+ require 'open-uri'
3
+ require 'uri'
7
4
 
8
5
  module Tts
9
6
  @@default_url = "http://translate.google.com/translate_tts"
10
- def self.server_url url=nil
11
- return @@default_url if url.nil?
12
- @@default_url = url
7
+ @@user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24"
8
+
9
+ def to_file lang, file_name=nil
10
+ parts = validate_text_length(self)
11
+ file_name = generate_file_name(self[0..20]) if file_name.nil?
12
+ parts.each do |part|
13
+ url = part.to_url(lang)
14
+ fetch_mp3(url, file_name)
15
+ end
16
+ end
17
+
18
+ def validate_text_length text
19
+ if text.length > 100
20
+ chunk_text(text)
21
+ else
22
+ [text]
23
+ end
24
+ end
25
+
26
+ def chunk_text text
27
+ chunks = []
28
+ words = split_into_words(text)
29
+ chunk = ''
30
+ words.each do |word|
31
+ if (chunk.length + word.length) > 100
32
+ chunks << chunk.strip!
33
+ chunk = ''
34
+ end
35
+ chunk += "#{word} "
36
+ end
37
+ chunks << chunk.strip!
38
+ end
39
+
40
+ def split_into_words text
41
+ text.gsub(/\s+/m, ' ').strip.split(" ")
42
+ end
43
+
44
+ def generate_file_name text
45
+ to_valid_fn(text + ".mp3")
46
+ end
47
+
48
+ def to_valid_fn fn
49
+ fn.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_')
13
50
  end
14
51
 
15
52
  def to_url lang
16
- require 'uri'
17
53
  langs = ["zh", "en", "it", "fr"]
18
- #raise "Not accepted language, accpeted are #{langs * ","}" unless langs.include? lang
54
+ raise "Not accepted language, accpeted are #{langs * ","}" unless langs.include? lang
19
55
  base = "#{Tts.server_url}?tl=#{lang}&q=#{URI.escape self}"
20
56
  end
21
57
 
22
- def to_file lang, file_name=nil
23
- require 'open-uri'
24
- file_name = to_valid_fn(self +".mp3") if file_name.nil?
25
- url = self.to_url(lang)
26
- ua = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24"
27
- begin
28
- content = open(url, "User-Agent" => ua).read
29
-
30
- File.open(file_name, "wb") do |f|
58
+ def fetch_mp3 url, file_name
59
+ begin
60
+ content = open(url, "User-Agent" => @@user_agent).read
61
+
62
+ File.open("temp.mp3", "wb") do |f|
31
63
  f.puts content
32
64
  end
33
- rescue Exception => error
34
- $stderr.puts("Internet error! #{error.message}")
65
+ merge_mp3_file(file_name)
66
+ rescue => e
67
+ $stderr.puts("Internet error! #{e.message}")
35
68
  exit(1)
36
69
  end
70
+ end
37
71
 
72
+ def merge_mp3_file file_name
73
+ `cat temp.mp3 >> "#{file_name}" && rm temp.mp3`
38
74
  end
75
+
39
76
  end
40
77
 
41
78
  class String
42
-
43
-
44
-
45
79
  include Tts
46
80
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "tts"
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Yiling Cao"]
12
- s.date = "2011-10-31"
12
+ s.date = "2014-01-14"
13
13
  s.description = "easy way to generate a voice file based on text prvoided."
14
14
  s.email = "yiling.cao@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -24,15 +24,13 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/tts.rb",
27
- "pkg/tts-.gem",
28
- "pkg/tts-0.0.1.gem",
29
27
  "spec/tts_spec.rb",
30
28
  "tts.gemspec"
31
29
  ]
32
30
  s.homepage = "http://github.com/c2h2/tts"
33
31
  s.licenses = ["MIT"]
34
32
  s.require_paths = ["lib"]
35
- s.rubygems_version = "1.8.10"
33
+ s.rubygems_version = "1.8.23"
36
34
  s.summary = "a text to speech file tool"
37
35
 
38
36
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-31 00:00:00.000000000 Z
12
+ date: 2014-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &18123600 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '2.6'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *18123600
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.6'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bundler
27
- requirement: &18122120 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 1.0.0
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *18122120
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: jeweler
38
- requirement: &18119340 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 1.6.2
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *18119340
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.6.2
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rcov
49
- requirement: &18511900 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,7 +69,12 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *18511900
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  description: easy way to generate a voice file based on text prvoided.
59
79
  email: yiling.cao@gmail.com
60
80
  executables: []
@@ -70,8 +90,6 @@ files:
70
90
  - Rakefile
71
91
  - VERSION
72
92
  - lib/tts.rb
73
- - pkg/tts-.gem
74
- - pkg/tts-0.0.1.gem
75
93
  - spec/tts_spec.rb
76
94
  - tts.gemspec
77
95
  homepage: http://github.com/c2h2/tts
@@ -89,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
107
  version: '0'
90
108
  segments:
91
109
  - 0
92
- hash: 194095336930749900
110
+ hash: -1651896032879588070
93
111
  required_rubygems_version: !ruby/object:Gem::Requirement
94
112
  none: false
95
113
  requirements:
@@ -98,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
116
  version: '0'
99
117
  requirements: []
100
118
  rubyforge_project:
101
- rubygems_version: 1.8.10
119
+ rubygems_version: 1.8.23
102
120
  signing_key:
103
121
  specification_version: 3
104
122
  summary: a text to speech file tool
Binary file
Binary file