ruby_speech 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +15 -0
- data/README.md +108 -14
- data/lib/ruby_speech/generic_element.rb +71 -10
- data/lib/ruby_speech/grxml.rb +4 -1
- data/lib/ruby_speech/grxml/element.rb +4 -0
- data/lib/ruby_speech/grxml/grammar.rb +177 -46
- data/lib/ruby_speech/grxml/item.rb +12 -11
- data/lib/ruby_speech/grxml/match.rb +16 -0
- data/lib/ruby_speech/grxml/no_match.rb +10 -0
- data/lib/ruby_speech/grxml/one_of.rb +4 -11
- data/lib/ruby_speech/grxml/rule.rb +0 -11
- data/lib/ruby_speech/grxml/ruleref.rb +0 -11
- data/lib/ruby_speech/grxml/tag.rb +0 -11
- data/lib/ruby_speech/grxml/token.rb +8 -11
- data/lib/ruby_speech/ssml.rb +6 -0
- data/lib/ruby_speech/ssml/audio.rb +1 -12
- data/lib/ruby_speech/ssml/break.rb +0 -11
- data/lib/ruby_speech/ssml/desc.rb +24 -0
- data/lib/ruby_speech/ssml/emphasis.rb +1 -12
- data/lib/ruby_speech/ssml/mark.rb +43 -0
- data/lib/ruby_speech/ssml/p.rb +25 -0
- data/lib/ruby_speech/ssml/phoneme.rb +72 -0
- data/lib/ruby_speech/ssml/prosody.rb +1 -12
- data/lib/ruby_speech/ssml/s.rb +25 -0
- data/lib/ruby_speech/ssml/say_as.rb +0 -11
- data/lib/ruby_speech/ssml/speak.rb +2 -44
- data/lib/ruby_speech/ssml/sub.rb +42 -0
- data/lib/ruby_speech/ssml/voice.rb +1 -12
- data/lib/ruby_speech/version.rb +1 -1
- data/spec/ruby_speech/grxml/grammar_spec.rb +478 -35
- data/spec/ruby_speech/grxml/item_spec.rb +5 -2
- data/spec/ruby_speech/grxml/match_spec.rb +49 -0
- data/spec/ruby_speech/grxml/no_match_spec.rb +17 -0
- data/spec/ruby_speech/grxml/one_of_spec.rb +1 -1
- data/spec/ruby_speech/grxml/rule_spec.rb +1 -1
- data/spec/ruby_speech/grxml/ruleref_spec.rb +1 -1
- data/spec/ruby_speech/grxml/tag_spec.rb +1 -1
- data/spec/ruby_speech/grxml/token_spec.rb +11 -1
- data/spec/ruby_speech/grxml_spec.rb +64 -5
- data/spec/ruby_speech/ssml/audio_spec.rb +5 -6
- data/spec/ruby_speech/ssml/break_spec.rb +1 -1
- data/spec/ruby_speech/ssml/desc_spec.rb +57 -0
- data/spec/ruby_speech/ssml/emphasis_spec.rb +1 -4
- data/spec/ruby_speech/ssml/mark_spec.rb +53 -0
- data/spec/ruby_speech/ssml/p_spec.rb +96 -0
- data/spec/ruby_speech/ssml/phoneme_spec.rb +65 -0
- data/spec/ruby_speech/ssml/prosody_spec.rb +9 -4
- data/spec/ruby_speech/ssml/s_spec.rb +92 -0
- data/spec/ruby_speech/ssml/say_as_spec.rb +1 -1
- data/spec/ruby_speech/ssml/speak_spec.rb +1 -6
- data/spec/ruby_speech/ssml/sub_spec.rb +57 -0
- data/spec/ruby_speech/ssml/voice_spec.rb +1 -6
- data/spec/spec_helper.rb +0 -4
- data/spec/support/matchers.rb +13 -53
- metadata +200 -113
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RubySpeech
|
4
|
+
module SSML
|
5
|
+
describe P do
|
6
|
+
its(:name) { should == 'p' }
|
7
|
+
|
8
|
+
describe "setting options in initializers" do
|
9
|
+
subject { P.new :language => 'jp' }
|
10
|
+
|
11
|
+
its(:language) { should == 'jp' }
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'registers itself' do
|
15
|
+
Element.class_from_registration(:p).should == P
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "from a document" do
|
19
|
+
let(:document) { '<p>foo</p>' }
|
20
|
+
|
21
|
+
subject { Element.import document }
|
22
|
+
|
23
|
+
it { should be_instance_of P }
|
24
|
+
its(:content) { should == 'foo' }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "comparing objects" do
|
28
|
+
it "should be equal if the content and language are the same" do
|
29
|
+
P.new(:language => 'jp', :content => "Hello there").should == P.new(:language => 'jp', :content => "Hello there")
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "when the content is different" do
|
33
|
+
it "should not be equal" do
|
34
|
+
P.new(:content => "Hello").should_not == P.new(:content => "Hello there")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "when the language is different" do
|
39
|
+
it "should not be equal" do
|
40
|
+
P.new(:language => 'jp').should_not == P.new(:language => 'en')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "<<" do
|
46
|
+
it "should accept String" do
|
47
|
+
lambda { subject << 'anything' }.should_not raise_error
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should accept Audio" do
|
51
|
+
lambda { subject << Audio.new }.should_not raise_error
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should accept Break" do
|
55
|
+
lambda { subject << Break.new }.should_not raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should accept Emphasis" do
|
59
|
+
lambda { subject << Emphasis.new }.should_not raise_error
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should accept Mark" do
|
63
|
+
lambda { subject << Mark.new }.should_not raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should accept Phoneme" do
|
67
|
+
lambda { subject << Phoneme.new }.should_not raise_error
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should accept Prosody" do
|
71
|
+
lambda { subject << Prosody.new }.should_not raise_error
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should accept SayAs" do
|
75
|
+
lambda { subject << SayAs.new(:interpret_as => :foo) }.should_not raise_error
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should accept Sub" do
|
79
|
+
lambda { subject << Sub.new }.should_not raise_error
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should accept S" do
|
83
|
+
lambda { subject << S.new }.should_not raise_error
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should accept Voice" do
|
87
|
+
lambda { subject << Voice.new }.should_not raise_error
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should raise InvalidChildError with non-acceptable objects" do
|
91
|
+
lambda { subject << 1 }.should raise_error(InvalidChildError, "A P can only accept String, Audio, Break, Emphasis, Mark, Phoneme, Prosody, SayAs, Sub, S, Voice as children")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end # P
|
95
|
+
end # SSML
|
96
|
+
end # RubySpeech
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RubySpeech
|
4
|
+
module SSML
|
5
|
+
describe Phoneme do
|
6
|
+
its(:name) { should == 'phoneme' }
|
7
|
+
|
8
|
+
describe "setting options in initializers" do
|
9
|
+
subject { Phoneme.new :alphabet => 'foo', :ph => 'bar' }
|
10
|
+
|
11
|
+
its(:alphabet) { should == 'foo' }
|
12
|
+
its(:ph) { should == 'bar' }
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'registers itself' do
|
16
|
+
Element.class_from_registration(:phoneme).should == Phoneme
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "from a document" do
|
20
|
+
let(:document) { '<phoneme alphabet="foo" ph="bar"/>' }
|
21
|
+
|
22
|
+
subject { Element.import document }
|
23
|
+
|
24
|
+
it { should be_instance_of Phoneme }
|
25
|
+
|
26
|
+
its(:alphabet) { should == 'foo' }
|
27
|
+
its(:ph) { should == 'bar' }
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "comparing objects" do
|
31
|
+
it "should be equal if the content, ph and alphabet are the same" do
|
32
|
+
Phoneme.new(:alphabet => 'jp', :ph => 'foo', :content => "Hello there").should == Phoneme.new(:alphabet => 'jp', :ph => 'foo', :content => "Hello there")
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "when the content is different" do
|
36
|
+
it "should not be equal" do
|
37
|
+
Phoneme.new(:content => "Hello").should_not == Phoneme.new(:content => "Hello there")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "when the ph is different" do
|
42
|
+
it "should not be equal" do
|
43
|
+
Phoneme.new(:ph => 'jp').should_not == Phoneme.new(:ph => 'en')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "when the alphabet is different" do
|
48
|
+
it "should not be equal" do
|
49
|
+
Phoneme.new(:alphabet => 'jp').should_not == Phoneme.new(:alphabet => 'en')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "<<" do
|
55
|
+
it "should accept String" do
|
56
|
+
lambda { subject << 'anything' }.should_not raise_error
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should raise InvalidChildError with non-acceptable objects" do
|
60
|
+
lambda { subject << Voice.new }.should raise_error(InvalidChildError, "A Phoneme can only accept Strings as children")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end # Desc
|
64
|
+
end # SSML
|
65
|
+
end # RubySpeech
|
@@ -23,7 +23,7 @@ module RubySpeech
|
|
23
23
|
describe "from a document" do
|
24
24
|
let(:document) { '<prosody pitch="medium" contour="something" range="20Hz" rate="2" duration="10" volume="loud"/>' }
|
25
25
|
|
26
|
-
subject { Element.import
|
26
|
+
subject { Element.import document }
|
27
27
|
|
28
28
|
it { should be_instance_of Prosody }
|
29
29
|
|
@@ -269,12 +269,14 @@ module RubySpeech
|
|
269
269
|
end
|
270
270
|
|
271
271
|
it "should accept Mark" do
|
272
|
-
pending
|
273
272
|
lambda { subject << Mark.new }.should_not raise_error
|
274
273
|
end
|
275
274
|
|
275
|
+
it "should accept P" do
|
276
|
+
lambda { subject << P.new }.should_not raise_error
|
277
|
+
end
|
278
|
+
|
276
279
|
it "should accept Phoneme" do
|
277
|
-
pending
|
278
280
|
lambda { subject << Phoneme.new }.should_not raise_error
|
279
281
|
end
|
280
282
|
|
@@ -282,12 +284,15 @@ module RubySpeech
|
|
282
284
|
lambda { subject << Prosody.new }.should_not raise_error
|
283
285
|
end
|
284
286
|
|
287
|
+
it "should accept S" do
|
288
|
+
lambda { subject << S.new }.should_not raise_error
|
289
|
+
end
|
290
|
+
|
285
291
|
it "should accept SayAs" do
|
286
292
|
lambda { subject << SayAs.new(:interpret_as => :foo) }.should_not raise_error
|
287
293
|
end
|
288
294
|
|
289
295
|
it "should accept Sub" do
|
290
|
-
pending
|
291
296
|
lambda { subject << Sub.new }.should_not raise_error
|
292
297
|
end
|
293
298
|
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RubySpeech
|
4
|
+
module SSML
|
5
|
+
describe S do
|
6
|
+
its(:name) { should == 's' }
|
7
|
+
|
8
|
+
describe "setting options in initializers" do
|
9
|
+
subject { S.new :language => 'jp' }
|
10
|
+
|
11
|
+
its(:language) { should == 'jp' }
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'registers itself' do
|
15
|
+
Element.class_from_registration(:s).should == S
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "from a document" do
|
19
|
+
let(:document) { '<s>foo</s>' }
|
20
|
+
|
21
|
+
subject { Element.import document }
|
22
|
+
|
23
|
+
it { should be_instance_of S }
|
24
|
+
its(:content) { should == 'foo' }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "comparing objects" do
|
28
|
+
it "should be equal if the content and language are the same" do
|
29
|
+
S.new(:language => 'jp', :content => "Hello there").should == S.new(:language => 'jp', :content => "Hello there")
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "when the content is different" do
|
33
|
+
it "should not be equal" do
|
34
|
+
S.new(:content => "Hello").should_not == S.new(:content => "Hello there")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "when the language is different" do
|
39
|
+
it "should not be equal" do
|
40
|
+
S.new(:language => 'jp').should_not == S.new(:language => 'en')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "<<" do
|
46
|
+
it "should accept String" do
|
47
|
+
lambda { subject << 'anything' }.should_not raise_error
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should accept Audio" do
|
51
|
+
lambda { subject << Audio.new }.should_not raise_error
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should accept Break" do
|
55
|
+
lambda { subject << Break.new }.should_not raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should accept Emphasis" do
|
59
|
+
lambda { subject << Emphasis.new }.should_not raise_error
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should accept Mark" do
|
63
|
+
lambda { subject << Mark.new }.should_not raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should accept Phoneme" do
|
67
|
+
lambda { subject << Phoneme.new }.should_not raise_error
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should accept Prosody" do
|
71
|
+
lambda { subject << Prosody.new }.should_not raise_error
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should accept SayAs" do
|
75
|
+
lambda { subject << SayAs.new(:interpret_as => :foo) }.should_not raise_error
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should accept Sub" do
|
79
|
+
lambda { subject << Sub.new }.should_not raise_error
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should accept Voice" do
|
83
|
+
lambda { subject << Voice.new }.should_not raise_error
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should raise InvalidChildError with non-acceptable objects" do
|
87
|
+
lambda { subject << 1 }.should raise_error(InvalidChildError, "An S can only accept String, Audio, Break, Emphasis, Mark, Phoneme, Prosody, SayAs, Sub, Voice as children")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end # S
|
91
|
+
end # SSML
|
92
|
+
end # RubySpeech
|
@@ -18,7 +18,7 @@ module RubySpeech
|
|
18
18
|
describe "from a document" do
|
19
19
|
let(:document) { '<say-as interpret-as="one" format="two" detail="three"/>' }
|
20
20
|
|
21
|
-
subject { Element.import
|
21
|
+
subject { Element.import document }
|
22
22
|
|
23
23
|
it { should be_instance_of SayAs }
|
24
24
|
|
@@ -22,7 +22,7 @@ module RubySpeech
|
|
22
22
|
describe "from a document" do
|
23
23
|
let(:document) { '<speak xmlns="http://www.w3.org/2001/10/synthesis" version="1.0" xml:lang="jp" xml:base="blah"/>' }
|
24
24
|
|
25
|
-
subject { Element.import
|
25
|
+
subject { Element.import document }
|
26
26
|
|
27
27
|
it { should be_instance_of Speak }
|
28
28
|
|
@@ -103,17 +103,14 @@ module RubySpeech
|
|
103
103
|
end
|
104
104
|
|
105
105
|
it "should accept Mark" do
|
106
|
-
pending
|
107
106
|
lambda { subject << Mark.new }.should_not raise_error
|
108
107
|
end
|
109
108
|
|
110
109
|
it "should accept P" do
|
111
|
-
pending
|
112
110
|
lambda { subject << P.new }.should_not raise_error
|
113
111
|
end
|
114
112
|
|
115
113
|
it "should accept Phoneme" do
|
116
|
-
pending
|
117
114
|
lambda { subject << Phoneme.new }.should_not raise_error
|
118
115
|
end
|
119
116
|
|
@@ -126,12 +123,10 @@ module RubySpeech
|
|
126
123
|
end
|
127
124
|
|
128
125
|
it "should accept Sub" do
|
129
|
-
pending
|
130
126
|
lambda { subject << Sub.new }.should_not raise_error
|
131
127
|
end
|
132
128
|
|
133
129
|
it "should accept S" do
|
134
|
-
pending
|
135
130
|
lambda { subject << S.new }.should_not raise_error
|
136
131
|
end
|
137
132
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RubySpeech
|
4
|
+
module SSML
|
5
|
+
describe Sub do
|
6
|
+
its(:name) { should == 'sub' }
|
7
|
+
|
8
|
+
describe "setting options in initializers" do
|
9
|
+
subject { Sub.new :alias => 'foo' }
|
10
|
+
|
11
|
+
its(:alias) { should == 'foo' }
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'registers itself' do
|
15
|
+
Element.class_from_registration(:sub).should == Sub
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "from a document" do
|
19
|
+
let(:document) { '<sub alias="foo"/>' }
|
20
|
+
|
21
|
+
subject { Element.import document }
|
22
|
+
|
23
|
+
it { should be_instance_of Sub }
|
24
|
+
|
25
|
+
its(:alias) { should == 'foo' }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "comparing objects" do
|
29
|
+
it "should be equal if the content and alias are the same" do
|
30
|
+
Sub.new(:alias => 'jp', :content => "Hello there").should == Sub.new(:alias => 'jp', :content => "Hello there")
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "when the content is different" do
|
34
|
+
it "should not be equal" do
|
35
|
+
Sub.new(:content => "Hello").should_not == Sub.new(:content => "Hello there")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "when the alias is different" do
|
40
|
+
it "should not be equal" do
|
41
|
+
Sub.new(:alias => 'jp').should_not == Sub.new(:alias => 'en')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "<<" do
|
47
|
+
it "should accept String" do
|
48
|
+
lambda { subject << 'anything' }.should_not raise_error
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should raise InvalidChildError with non-acceptable objects" do
|
52
|
+
lambda { subject << Voice.new }.should raise_error(InvalidChildError, "A Sub can only accept Strings as children")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end # Desc
|
56
|
+
end # SSML
|
57
|
+
end # RubySpeech
|
@@ -23,7 +23,7 @@ module RubySpeech
|
|
23
23
|
describe "from a document" do
|
24
24
|
let(:document) { '<voice xml:lang="jp" gender="male" age="25" variant="2" name="paul"/>' }
|
25
25
|
|
26
|
-
subject { Element.import
|
26
|
+
subject { Element.import document }
|
27
27
|
|
28
28
|
it { should be_instance_of Voice }
|
29
29
|
|
@@ -160,17 +160,14 @@ module RubySpeech
|
|
160
160
|
end
|
161
161
|
|
162
162
|
it "should accept Mark" do
|
163
|
-
pending
|
164
163
|
lambda { subject << Mark.new }.should_not raise_error
|
165
164
|
end
|
166
165
|
|
167
166
|
it "should accept P" do
|
168
|
-
pending
|
169
167
|
lambda { subject << P.new }.should_not raise_error
|
170
168
|
end
|
171
169
|
|
172
170
|
it "should accept Phoneme" do
|
173
|
-
pending
|
174
171
|
lambda { subject << Phoneme.new }.should_not raise_error
|
175
172
|
end
|
176
173
|
|
@@ -183,12 +180,10 @@ module RubySpeech
|
|
183
180
|
end
|
184
181
|
|
185
182
|
it "should accept Sub" do
|
186
|
-
pending
|
187
183
|
lambda { subject << Sub.new }.should_not raise_error
|
188
184
|
end
|
189
185
|
|
190
186
|
it "should accept S" do
|
191
|
-
pending
|
192
187
|
lambda { subject << S.new }.should_not raise_error
|
193
188
|
end
|
194
189
|
|