wavefile 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/LICENSE +1 -1
  2. data/README.markdown +29 -56
  3. data/Rakefile +6 -0
  4. data/lib/wavefile.rb +28 -452
  5. data/lib/wavefile/buffer.rb +147 -0
  6. data/lib/wavefile/format.rb +69 -0
  7. data/lib/wavefile/info.rb +53 -0
  8. data/lib/wavefile/reader.rb +296 -0
  9. data/lib/wavefile/writer.rb +128 -0
  10. data/test/buffer_test.rb +121 -0
  11. data/test/fixtures/actual_output/valid_mono_8_44100_with_padding_byte.wav +0 -0
  12. data/test/fixtures/expected_output/no_samples.wav +0 -0
  13. data/test/fixtures/expected_output/valid_mono_16_44100.wav +0 -0
  14. data/test/fixtures/expected_output/valid_mono_32_44100.wav +0 -0
  15. data/test/fixtures/expected_output/valid_mono_8_44100.wav +0 -0
  16. data/test/fixtures/expected_output/valid_mono_8_44100_with_padding_byte.wav +0 -0
  17. data/test/fixtures/expected_output/valid_stereo_16_44100.wav +0 -0
  18. data/test/fixtures/expected_output/valid_stereo_32_44100.wav +0 -0
  19. data/test/fixtures/expected_output/valid_stereo_8_44100.wav +0 -0
  20. data/test/fixtures/expected_output/valid_tri_16_44100.wav +0 -0
  21. data/test/fixtures/expected_output/valid_tri_32_44100.wav +0 -0
  22. data/test/fixtures/expected_output/valid_tri_8_44100.wav +0 -0
  23. data/test/fixtures/invalid/README.markdown +10 -0
  24. data/test/fixtures/invalid/bad_riff_header.wav +1 -0
  25. data/test/fixtures/invalid/bad_wavefile_format.wav +0 -0
  26. data/test/fixtures/invalid/empty.wav +0 -0
  27. data/test/fixtures/invalid/empty_format_chunk.wav +0 -0
  28. data/test/fixtures/invalid/incomplete_riff_header.wav +1 -0
  29. data/test/fixtures/invalid/insufficient_format_chunk.wav +0 -0
  30. data/test/fixtures/invalid/no_data_chunk.wav +0 -0
  31. data/test/fixtures/invalid/no_format_chunk.wav +0 -0
  32. data/test/fixtures/unsupported/README.markdown +6 -0
  33. data/test/fixtures/unsupported/bad_audio_format.wav +0 -0
  34. data/test/fixtures/unsupported/bad_channel_count.wav +0 -0
  35. data/test/fixtures/unsupported/bad_sample_rate.wav +0 -0
  36. data/test/fixtures/unsupported/unsupported_audio_format.wav +0 -0
  37. data/test/fixtures/unsupported/unsupported_bits_per_sample.wav +0 -0
  38. data/test/fixtures/valid/README.markdown +3 -0
  39. data/test/fixtures/valid/valid_mono_16_44100.wav +0 -0
  40. data/test/fixtures/valid/valid_mono_32_44100.wav +0 -0
  41. data/test/fixtures/valid/valid_mono_8_44100.wav +0 -0
  42. data/test/fixtures/valid/valid_mono_8_44100_with_padding_byte.wav +0 -0
  43. data/test/fixtures/valid/valid_stereo_16_44100.wav +0 -0
  44. data/test/fixtures/valid/valid_stereo_32_44100.wav +0 -0
  45. data/test/fixtures/valid/valid_stereo_8_44100.wav +0 -0
  46. data/test/fixtures/valid/valid_tri_16_44100.wav +0 -0
  47. data/test/fixtures/valid/valid_tri_32_44100.wav +0 -0
  48. data/test/fixtures/valid/valid_tri_8_44100.wav +0 -0
  49. data/test/format_test.rb +105 -0
  50. data/test/info_test.rb +60 -0
  51. data/test/reader_test.rb +222 -0
  52. data/test/wavefile_io_test_helper.rb +47 -0
  53. data/test/writer_test.rb +118 -0
  54. metadata +72 -33
  55. data/test/wavefile_test.rb +0 -339
metadata CHANGED
@@ -1,58 +1,97 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: wavefile
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Joel Strait
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2010-01-12 00:00:00 -05:00
13
- default_executable:
12
+ date: 2012-01-01 00:00:00.000000000 Z
14
13
  dependencies: []
15
-
16
14
  description:
17
- email: joel.strait at gmail.com
15
+ email: joel dot strait at Google's popular web mail service
18
16
  executables: []
19
-
20
17
  extensions: []
21
-
22
18
  extra_rdoc_files: []
23
-
24
- files:
19
+ files:
25
20
  - LICENSE
26
21
  - README.markdown
22
+ - Rakefile
23
+ - lib/wavefile/buffer.rb
24
+ - lib/wavefile/format.rb
25
+ - lib/wavefile/info.rb
26
+ - lib/wavefile/reader.rb
27
+ - lib/wavefile/writer.rb
27
28
  - lib/wavefile.rb
28
- - test/wavefile_test.rb
29
- has_rdoc: true
29
+ - test/buffer_test.rb
30
+ - test/fixtures/actual_output/valid_mono_8_44100_with_padding_byte.wav
31
+ - test/fixtures/expected_output/no_samples.wav
32
+ - test/fixtures/expected_output/valid_mono_16_44100.wav
33
+ - test/fixtures/expected_output/valid_mono_32_44100.wav
34
+ - test/fixtures/expected_output/valid_mono_8_44100.wav
35
+ - test/fixtures/expected_output/valid_mono_8_44100_with_padding_byte.wav
36
+ - test/fixtures/expected_output/valid_stereo_16_44100.wav
37
+ - test/fixtures/expected_output/valid_stereo_32_44100.wav
38
+ - test/fixtures/expected_output/valid_stereo_8_44100.wav
39
+ - test/fixtures/expected_output/valid_tri_16_44100.wav
40
+ - test/fixtures/expected_output/valid_tri_32_44100.wav
41
+ - test/fixtures/expected_output/valid_tri_8_44100.wav
42
+ - test/fixtures/invalid/bad_riff_header.wav
43
+ - test/fixtures/invalid/bad_wavefile_format.wav
44
+ - test/fixtures/invalid/empty.wav
45
+ - test/fixtures/invalid/empty_format_chunk.wav
46
+ - test/fixtures/invalid/incomplete_riff_header.wav
47
+ - test/fixtures/invalid/insufficient_format_chunk.wav
48
+ - test/fixtures/invalid/no_data_chunk.wav
49
+ - test/fixtures/invalid/no_format_chunk.wav
50
+ - test/fixtures/invalid/README.markdown
51
+ - test/fixtures/unsupported/bad_audio_format.wav
52
+ - test/fixtures/unsupported/bad_channel_count.wav
53
+ - test/fixtures/unsupported/bad_sample_rate.wav
54
+ - test/fixtures/unsupported/README.markdown
55
+ - test/fixtures/unsupported/unsupported_audio_format.wav
56
+ - test/fixtures/unsupported/unsupported_bits_per_sample.wav
57
+ - test/fixtures/valid/README.markdown
58
+ - test/fixtures/valid/valid_mono_16_44100.wav
59
+ - test/fixtures/valid/valid_mono_32_44100.wav
60
+ - test/fixtures/valid/valid_mono_8_44100.wav
61
+ - test/fixtures/valid/valid_mono_8_44100_with_padding_byte.wav
62
+ - test/fixtures/valid/valid_stereo_16_44100.wav
63
+ - test/fixtures/valid/valid_stereo_32_44100.wav
64
+ - test/fixtures/valid/valid_stereo_8_44100.wav
65
+ - test/fixtures/valid/valid_tri_16_44100.wav
66
+ - test/fixtures/valid/valid_tri_32_44100.wav
67
+ - test/fixtures/valid/valid_tri_8_44100.wav
68
+ - test/format_test.rb
69
+ - test/info_test.rb
70
+ - test/reader_test.rb
71
+ - test/wavefile_io_test_helper.rb
72
+ - test/writer_test.rb
30
73
  homepage: http://www.joelstrait.com/
31
74
  licenses: []
32
-
33
75
  post_install_message:
34
76
  rdoc_options: []
35
-
36
- require_paths:
77
+ require_paths:
37
78
  - lib
38
- required_ruby_version: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: "0"
43
- version:
44
- required_rubygems_version: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: "0"
49
- version:
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
50
91
  requirements: []
51
-
52
92
  rubyforge_project:
53
- rubygems_version: 1.3.5
93
+ rubygems_version: 1.8.10
54
94
  signing_key:
55
95
  specification_version: 3
56
96
  summary: A class for reading and writing Wave sound files (*.wav)
57
97
  test_files: []
58
-
@@ -1,339 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
-
3
- require 'test/unit'
4
- require 'wavefile'
5
-
6
- class WaveFileTest < Test::Unit::TestCase
7
- def test_initialize
8
-
9
- end
10
-
11
- def test_read_empty_file
12
- assert_raise(StandardError) { w = WaveFile.open("examples/invalid/empty.wav") }
13
- end
14
-
15
- def test_read_nonexistent_file
16
- assert_raise(Errno::ENOENT) { w = WaveFile.open("examples/invalid/nonexistent.wav") }
17
- end
18
-
19
- def test_read_valid_file
20
- # Mono file
21
- w = WaveFile.open("examples/valid/sine-mono-8bit.wav")
22
- assert_equal(w.num_channels, 1)
23
- assert_equal(w.mono?, true)
24
- assert_equal(w.stereo?, false)
25
- assert_equal(w.sample_rate, 44100)
26
- assert_equal(w.bits_per_sample, 8)
27
- assert_equal(w.byte_rate, 44100)
28
- assert_equal(w.block_align, 1)
29
- assert_equal(w.sample_data.length, 44100)
30
- # Test that sample array is in format [sample, sample ... sample]
31
- valid = true
32
- w.sample_data.each{|sample| valid &&= (sample.class == Fixnum)}
33
- assert_equal(valid, true)
34
-
35
- # Stereo file
36
- w = WaveFile.open("examples/valid/sine-stereo-8bit.wav")
37
- assert_equal(w.num_channels, 2)
38
- assert_equal(w.mono?, false)
39
- assert_equal(w.stereo?, true)
40
- assert_equal(w.sample_rate, 44100)
41
- assert_equal(w.bits_per_sample, 8)
42
- assert_equal(w.byte_rate, 88200)
43
- assert_equal(w.block_align, 2)
44
- assert_equal(w.sample_data.length, 44100)
45
- # Test that sample array is in format [[left, right], [left, right] ... [left,right]]
46
- valid = true
47
- w.sample_data.each{|sample| valid &&= (sample.class == Array) && (sample.length == 2)}
48
- assert_equal(valid, true)
49
- end
50
-
51
- def test_new_file
52
- # Mono
53
- w = WaveFile.new(1, 44100, 8)
54
- assert_equal(w.num_channels, 1)
55
- assert_equal(w.sample_rate, 44100)
56
- assert_equal(w.bits_per_sample, 8)
57
- assert_equal(w.byte_rate, 44100)
58
- assert_equal(w.block_align, 1)
59
-
60
- # Mono
61
- w = WaveFile.new(:mono, 44100, 8)
62
- assert_equal(w.num_channels, 1)
63
- assert_equal(w.sample_rate, 44100)
64
- assert_equal(w.bits_per_sample, 8)
65
- assert_equal(w.byte_rate, 44100)
66
- assert_equal(w.block_align, 1)
67
-
68
- # Stereo
69
- w = WaveFile.new(2, 44100, 16)
70
- assert_equal(w.num_channels, 2)
71
- assert_equal(w.sample_rate, 44100)
72
- assert_equal(w.bits_per_sample, 16)
73
- assert_equal(w.byte_rate, 176400)
74
- assert_equal(w.block_align, 4)
75
-
76
- # Stereo
77
- w = WaveFile.new(:stereo, 44100, 16)
78
- assert_equal(w.num_channels, 2)
79
- assert_equal(w.sample_rate, 44100)
80
- assert_equal(w.bits_per_sample, 16)
81
- assert_equal(w.byte_rate, 176400)
82
- assert_equal(w.block_align, 4)
83
-
84
- # Quad
85
- w = WaveFile.new(4, 44100, 16)
86
- assert_equal(w.num_channels, 4)
87
- assert_equal(w.sample_rate, 44100)
88
- assert_equal(w.bits_per_sample, 16)
89
- assert_equal(w.byte_rate, 352800)
90
- assert_equal(w.block_align, 8)
91
- end
92
-
93
- def test_normalized_sample_data
94
- # Mono 8-bit
95
- w = WaveFile.new(:mono, 44100, 8)
96
- w.sample_data = [0, 32, 64, 96, 128, 160, 192, 223, 255]
97
- assert_equal(w.normalized_sample_data, [-1.0, -0.75, -0.5, -0.25, 0.0,
98
- (32.0 / 127.0), (64.0 / 127.0), (95.0 / 127.0), 1.0])
99
-
100
- # Mono 16-bit
101
- w = WaveFile.new(:mono, 44100, 16)
102
- w.sample_data = [-32768, -24576, -16384, -8192, 0, 8192, 16383, 24575, 32767]
103
- assert_equal(w.normalized_sample_data, [-1.0, -0.75, -0.5, -0.25, 0.0,
104
- (8192.0 / 32767.0), (16383.0 / 32767.0), (24575.0 / 32767.0), 1.0])
105
-
106
- # Stereo 8-bit
107
- w = WaveFile.new(:stereo, 44100, 8)
108
- w.sample_data = [[0, 255], [32, 223], [64, 192], [96, 160], [128, 128], [160, 96], [192, 64], [223, 32], [255, 0]]
109
- assert_equal(w.normalized_sample_data, [[-1.0, 1.0],
110
- [-0.75, (95.0 / 127.0)],
111
- [-0.5, (64.0 / 127.0)],
112
- [-0.25, (32.0 / 127.0)],
113
- [0.0, 0.0],
114
- [(32.0 / 127.0), -0.25],
115
- [(64.0 / 127.0), -0.5],
116
- [(95.0 / 127.0), -0.75],
117
- [1.0, -1.0]])
118
-
119
- # Stereo 16-bit
120
- w = WaveFile.new(:stereo, 44100, 16)
121
- w.sample_data = [[-32768, 32767], [-24576, 24575], [-16384, 16384], [-8192, 8192], [0, 0], [8192, -8192], [16384, -16384], [24575, -24576], [32767, -32768]]
122
- assert_equal(w.normalized_sample_data, [[-1.0, 1.0],
123
- [-0.75, (24575.0 / 32767.0)],
124
- [-0.5, (16384.0 / 32767.0)],
125
- [-0.25, (8192.0 / 32767.0)],
126
- [0.0, 0.0],
127
- [(8192.0 / 32767.0), -0.25],
128
- [(16384.0 / 32767.0), -0.5],
129
- [(24575.0 / 32767.0), -0.75],
130
- [1.0, -1.0]])
131
- end
132
-
133
- def test_sample_data=
134
- # Mono 8-bit
135
- w = WaveFile.new(:mono, 44100, 8)
136
- w.sample_data = [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0]
137
- assert_equal(w.sample_data, [0, 32, 64, 96, 128, 160, 192, 223, 255])
138
-
139
- # Mono 16-bit
140
- w = WaveFile.new(:mono, 44100, 16)
141
- w.sample_data = [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0]
142
- assert_equal(w.sample_data, [-32768, -24576, -16384, -8192, 0, 8192, 16384, 24575, 32767])
143
-
144
- # Stereo 8-bit
145
- w = WaveFile.new(:stereo, 44100, 8)
146
- w.sample_data = [[-1.0, 1.0], [-0.75, 0.75], [-0.5, 0.5], [-0.25, 0.25], [0.0, 0.0],
147
- [0.25, -0.25], [0.5, -0.5], [0.75, -0.75], [1.0, -1.0]]
148
- assert_equal(w.sample_data, [[0, 255], [32, 223], [64, 192], [96, 160], [128, 128],
149
- [160, 96], [192, 64], [223, 32], [255, 0]])
150
-
151
- # Stereo 16-bit
152
- w = WaveFile.new(:stereo, 44100, 16)
153
- w.sample_data = [[-1.0, 1.0], [-0.75, 0.75], [-0.5, 0.5], [-0.25, 0.25], [0.0, 0.0],
154
- [0.25, -0.25], [0.5, -0.5], [0.75, -0.75], [1.0, -1.0]]
155
- assert_equal(w.sample_data, [[-32768, 32767], [-24576, 24575], [-16384, 16384], [-8192, 8192], [0, 0],
156
- [8192, -8192], [16384, -16384], [24575, -24576], [32767, -32768]])
157
- end
158
-
159
- def test_mono?
160
- w = WaveFile.new(1, 44100, 16)
161
- assert_equal(w.mono?, true)
162
-
163
- w = WaveFile.open("examples/valid/sine-mono-8bit.wav")
164
- assert_equal(w.mono?, true)
165
-
166
- w = WaveFile.new(2, 44100, 16)
167
- assert_equal(w.mono?, false)
168
-
169
- w = WaveFile.new(4, 44100, 16)
170
- assert_equal(w.mono?, false)
171
- end
172
-
173
- def test_stereo?
174
- w = WaveFile.new(1, 44100, 16)
175
- assert_equal(w.stereo?, false)
176
-
177
- w = WaveFile.open("examples/valid/sine-mono-8bit.wav")
178
- assert_equal(w.stereo?, false)
179
-
180
- w = WaveFile.new(2, 44100, 16)
181
- assert_equal(w.stereo?, true)
182
-
183
- w = WaveFile.new(4, 44100, 16)
184
- assert_equal(w.stereo?, false)
185
- end
186
-
187
- def test_reverse
188
- # Mono
189
- w = WaveFile.new(:mono, 44100, 16)
190
- w.sample_data = [1, 2, 3, 4, 5]
191
- w.reverse
192
- assert_equal(w.sample_data, [5, 4, 3, 2, 1])
193
-
194
- # Stereo
195
- w = WaveFile.new(:stereo, 44100, 16)
196
- w.sample_data = [[1, 9], [2, 8], [3, 7], [4, 6], [5, 5]]
197
- w.reverse
198
- assert_equal(w.sample_data, [[5, 5], [4, 6], [3, 7], [2, 8], [1, 9]])
199
- end
200
-
201
- def test_duration()
202
- sample_rate = 44100
203
-
204
- [30001, 22050, 44100].each {|bits_per_sample|
205
- [8, 16].each {|bits_per_sample|
206
- [:mono, :stereo].each {|num_channels|
207
- w = WaveFile.new(num_channels, sample_rate, bits_per_sample)
208
-
209
- w.sample_data = []
210
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 0, :milliseconds => 0})
211
- w.sample_data = get_duration_test_samples(num_channels, (sample_rate.to_f / 1000.0).floor)
212
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 0, :milliseconds => 0})
213
- w.sample_data = get_duration_test_samples(num_channels, (sample_rate.to_f / 1000.0).ceil)
214
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 0, :milliseconds => 1})
215
- w.sample_data = get_duration_test_samples(num_channels, sample_rate / 2)
216
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 0, :milliseconds => 500})
217
- w.sample_data = get_duration_test_samples(num_channels, sample_rate - 1)
218
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 0, :milliseconds => 999})
219
- w.sample_data = get_duration_test_samples(num_channels, sample_rate)
220
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 1, :milliseconds => 0})
221
- w.sample_data = get_duration_test_samples(num_channels, sample_rate * 2)
222
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 2, :milliseconds => 0})
223
- w.sample_data = get_duration_test_samples(num_channels, (sample_rate / 2) * 3)
224
- assert_equal(w.duration, {:hours => 0, :minutes => 0, :seconds => 1, :milliseconds => 500})
225
-
226
- # These tests currently take too long to run...
227
- #w.sample_data = [].fill(0.0, 0, sample_rate * 60)
228
- #assert_equal(w.duration, {:hours => 0, :minutes => 1, :seconds => 0, :milliseconds => 0})
229
- #w.sample_data = [].fill(0.0, 0, sample_rate * 60 * 60)
230
- #assert_equal(w.duration, {:hours => 1, :minutes => 0, :seconds => 0, :milliseconds => 0})
231
- }
232
- }
233
- }
234
- end
235
-
236
- def get_duration_test_samples(num_channels, num_samples)
237
- if num_channels == :mono || num_channels == 1
238
- return [].fill(0.0, 0, num_samples)
239
- elsif num_channels == :stereo || num_channels == 2
240
- return [].fill([0.0, 0.0], 0, num_samples)
241
- else
242
- return "error"
243
- end
244
- end
245
-
246
- def test_bits_per_sample=()
247
- # Set bits_per_sample to invalid value (non-8 or non-16)
248
- w = WaveFile.open("examples/valid/sine-mono-8bit.wav")
249
- assert_raise(StandardError) { w.bits_per_sample = 20 }
250
- w = WaveFile.new(:mono, 44100, 16)
251
- assert_raise(StandardError) { w.bits_per_sample = 4 }
252
-
253
- w_before = WaveFile.open("examples/valid/sine-mono-8bit.wav")
254
- w_after = WaveFile.open("examples/valid/sine-mono-8bit.wav")
255
- w_after.bits_per_sample = 8
256
- assert_equal(w_before.sample_data, w_after.sample_data)
257
-
258
- w_before = WaveFile.open("examples/valid/sine-stereo-8bit.wav")
259
- w_after = WaveFile.open("examples/valid/sine-stereo-8bit.wav")
260
- w_after.bits_per_sample = 8
261
- assert_equal(w_before.sample_data, w_after.sample_data)
262
-
263
- # Open mono 16 bit file, change to 16 bit, still the same
264
- # Open stereo 16 bit file, change to 16 bit, still the same
265
-
266
- # Open mono 8 bit file, convert to 16 bit
267
- w = WaveFile.new(:mono, 44100, 8)
268
- w.sample_data = [0, 32, 64, 96, 128, 160, 192, 223, 255]
269
- w.bits_per_sample = 16
270
- assert_equal(w.sample_data, [-32768, -24576, -16384, -8192, 0, 8256, 16513, 24511, 32767])
271
-
272
- # Open stereo 8 bit file, convert to 16 bit
273
- w = WaveFile.new(:stereo, 44100, 8)
274
- w.sample_data = [[0, 255], [32, 223], [64, 192], [96, 160], [128, 128],
275
- [160, 96], [192, 64], [223, 32], [255, 0]]
276
- w.bits_per_sample = 16
277
- assert_equal(w.sample_data, [[-32768, 32767], [-24576, 24511], [-16384, 16513], [-8192, 8256], [0, 0],
278
- [8256, -8192], [16513, -16384], [24511, -24576], [32767, -32768]])
279
-
280
- # Open mono 16 bit file, convert to 8 bit
281
- w = WaveFile.new(:mono, 44100, 16)
282
- w.sample_data = [-32768, -24576, -16384, -8192, 0, 8256, 16513, 24511, 32767]
283
- w.bits_per_sample = 8
284
- assert_equal(w.sample_data, [0, 32, 64, 96, 128, 160, 192, 223, 255])
285
-
286
- # Open stereo 16 bit file, convert to 8 bit, conversion successful
287
- w = WaveFile.new(:stereo, 44100, 16)
288
- w.sample_data = [[-32768, 32767], [-24576, 24511], [-16384, 16513], [-8192, 8256], [0, 0],
289
- [8256, -8192], [16513, -16384], [24511, -24576], [32767, -32768]]
290
- w.bits_per_sample = 8
291
- assert_equal(w.sample_data, [[0, 255], [32, 223], [64, 192], [96, 160], [128, 128],
292
- [160, 96], [192, 64], [223, 32], [255, 0]])
293
-
294
- # Open 8 bit mono, convert to 16 bit, back to 8 bit.
295
- w_before = WaveFile.open("examples/valid/sine-mono-8bit.wav")
296
- w_after = WaveFile.open("examples/valid/sine-mono-8bit.wav")
297
- w_after.bits_per_sample = 16
298
- assert_not_equal(w_before.sample_data, w_after.sample_data)
299
- w_after.bits_per_sample = 8
300
- assert_equal(w_before.sample_data, w_after.sample_data)
301
-
302
- # Open 8 bit stereo, convert to 16 bit, back to 8 bit.
303
- w_before = WaveFile.open("examples/valid/sine-stereo-8bit.wav")
304
- w_after = WaveFile.open("examples/valid/sine-stereo-8bit.wav")
305
- w_after.bits_per_sample = 16
306
- assert_not_equal(w_before.sample_data, w_after.sample_data)
307
- w_after.bits_per_sample = 8
308
- assert_equal(w_before.sample_data, w_after.sample_data)
309
-
310
- # Open 16 bit mono, convert to 8 bit, back to 16 bit.
311
- # Open 16 bit stereo, convert to 8 bit, back to 16 bit.
312
- end
313
-
314
- def test_num_channels=()
315
- w = WaveFile.new(:mono, 44100, 16)
316
- w.sample_data = [-32768, -24576, -16384, -8192, 0, 8256, 16513, 24511, 32767]
317
- w.num_channels = 2
318
- assert_equal(w.sample_data, [[-32768, -32768], [-24576, -24576], [-16384, -16384], [-8192, -8192], [0, 0],
319
- [8256, 8256], [16513, 16513], [24511, 24511], [32767, 32767]])
320
-
321
- w = WaveFile.new(:mono, 44100, 16)
322
- w.sample_data = [-32768, -24576, -16384, -8192, 0, 8256, 16513, 24511, 32767]
323
- w.num_channels = 3
324
- assert_equal(w.sample_data, [[-32768, -32768, -32768], [-24576, -24576, -24576], [-16384, -16384, -16384], [-8192, -8192, -8192], [0, 0, 0],
325
- [8256, 8256, 8256], [16513, 16513, 16513], [24511, 24511, 24511], [32767, 32767, 32767]])
326
-
327
- w = WaveFile.new(:stereo, 44100, 16)
328
- w.sample_data = [[-32768, -32768], [-24576, -24576], [-16384, -16384], [-8192, -8192], [0, 0],
329
- [8256, 8256], [16513, 16513], [24511, 24511], [32767, 32767]]
330
- w.num_channels = 1
331
- assert_equal(w.sample_data, [-32768, -24576, -16384, -8192, 0, 8256, 16513, 24511, 32767])
332
-
333
- w = WaveFile.new(3, 44100, 16)
334
- w.sample_data = [[-32768, -32768, -32768], [-24576, -24576, -24576], [-16384, -16384, -16384], [-8192, -8192, -8192], [0, 0, 0],
335
- [8256, 8256, 8256], [16513, 16513, 16513], [24511, 24511, 24511], [32767, 32767, 32767]]
336
- w.num_channels = 1
337
- assert_equal(w.sample_data, [-32768, -24576, -16384, -8192, 0, 8256, 16513, 24511, 32767])
338
- end
339
- end