wavefile 0.6.0 → 0.7.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 +4 -4
- data/LICENSE +1 -1
- data/README.markdown +16 -12
- data/lib/wavefile.rb +4 -5
- data/lib/wavefile/chunk_readers.rb +6 -0
- data/lib/wavefile/chunk_readers/header_reader.rb +163 -0
- data/lib/wavefile/format.rb +15 -18
- data/lib/wavefile/reader.rb +45 -178
- data/lib/wavefile/unvalidated_format.rb +23 -0
- data/lib/wavefile/writer.rb +21 -20
- data/test/buffer_test.rb +3 -3
- data/test/duration_test.rb +2 -2
- data/test/fixtures/actual_output/no_samples.wav +0 -0
- data/test/format_test.rb +6 -6
- data/test/reader_test.rb +59 -14
- data/test/unvalidated_format_test.rb +24 -0
- data/test/writer_test.rb +3 -3
- metadata +22 -25
- data/lib/wavefile/info.rb +0 -50
- data/test/buffer_test.rbc +0 -19560
- data/test/duration_test.rbc +0 -1536
- data/test/fixtures/actual_output/valid_mono_pcm_8_44100_with_padding_byte.wav +0 -0
- data/test/format_test.rbc +0 -5325
- data/test/info_test.rb +0 -32
- data/test/info_test.rbc +0 -759
- data/test/reader_test.rbc +0 -7927
- data/test/wavefile_io_test_helper.rbc +0 -2013
- data/test/writer_test.rbc +0 -6105
@@ -0,0 +1,23 @@
|
|
1
|
+
module WaveFile
|
2
|
+
# Represents information about the data format for a Wave file, such as number of
|
3
|
+
# channels, bits per sample, sample rate, and so forth. A Format instance is used
|
4
|
+
# by Reader to indicate what format to read samples out as, and by Writer to
|
5
|
+
# indicate what format to write samples as.
|
6
|
+
#
|
7
|
+
# This class is immutable - once a new Format is constructed, it can't be modified.
|
8
|
+
class UnvalidatedFormat < Format # :nodoc:
|
9
|
+
# Constructs a new immutable UnvalidatedFormat.
|
10
|
+
def initialize(fields)
|
11
|
+
@audio_format = fields[:audio_format]
|
12
|
+
@channels = fields[:channels]
|
13
|
+
@sample_rate = fields[:sample_rate]
|
14
|
+
@byte_rate = fields[:byte_rate]
|
15
|
+
@block_align = fields[:block_align]
|
16
|
+
@bits_per_sample = fields[:bits_per_sample]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns a number indicating the sample format, such as 1 (PCM) or 3 (Float)
|
20
|
+
attr_reader :audio_format
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/lib/wavefile/writer.rb
CHANGED
@@ -16,25 +16,6 @@ module WaveFile
|
|
16
16
|
# writer.close
|
17
17
|
class Writer
|
18
18
|
|
19
|
-
# Padding value written to the end of chunks whose payload is an odd number of bytes. The RIFF
|
20
|
-
# specification requires that each chunk be aligned to an even number of bytes, even if the byte
|
21
|
-
# count is an odd number.
|
22
|
-
#
|
23
|
-
# See http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf, page 11.
|
24
|
-
EMPTY_BYTE = "\000" # :nodoc:
|
25
|
-
|
26
|
-
# The number of bytes at the beginning of a wave file before the sample data in the data chunk
|
27
|
-
# starts, assuming this canonical format:
|
28
|
-
#
|
29
|
-
# RIFF Chunk Header (12 bytes)
|
30
|
-
# Format Chunk (16 bytes for PCM, 18 bytes for floating point)
|
31
|
-
# FACT Chunk (0 bytes for PCM, 12 bytes for floating point)
|
32
|
-
# Data Chunk Header (8 bytes)
|
33
|
-
#
|
34
|
-
# All wave files written by Writer use this canonical format.
|
35
|
-
CANONICAL_HEADER_BYTE_LENGTH = {:pcm => 36, :float => 50} # :nodoc:
|
36
|
-
|
37
|
-
|
38
19
|
# Returns a constructed Writer object which is available for writing sample data to the specified
|
39
20
|
# file (via the write method). When all sample data has been written, the Writer should be closed.
|
40
21
|
# Note that the wave file being written to will NOT be valid (and playable in other programs) until
|
@@ -76,7 +57,7 @@ module WaveFile
|
|
76
57
|
|
77
58
|
if @format.bits_per_sample == 24 && @format.sample_format == :pcm
|
78
59
|
samples.flatten.each do |sample|
|
79
|
-
@file.syswrite([sample].pack("
|
60
|
+
@file.syswrite([sample].pack("l<X"))
|
80
61
|
end
|
81
62
|
else
|
82
63
|
@file.syswrite(samples.flatten.pack(@pack_code))
|
@@ -141,6 +122,26 @@ module WaveFile
|
|
141
122
|
|
142
123
|
private
|
143
124
|
|
125
|
+
# Padding value written to the end of chunks whose payload is an odd number of bytes. The RIFF
|
126
|
+
# specification requires that each chunk be aligned to an even number of bytes, even if the byte
|
127
|
+
# count is an odd number.
|
128
|
+
#
|
129
|
+
# See http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf, page 11.
|
130
|
+
EMPTY_BYTE = "\000" # :nodoc:
|
131
|
+
|
132
|
+
# The number of bytes at the beginning of a wave file before the sample data in the data chunk
|
133
|
+
# starts, assuming this canonical format:
|
134
|
+
#
|
135
|
+
# RIFF Chunk Header (12 bytes)
|
136
|
+
# Format Chunk (16 bytes for PCM, 18 bytes for floating point)
|
137
|
+
# FACT Chunk (0 bytes for PCM, 12 bytes for floating point)
|
138
|
+
# Data Chunk Header (8 bytes)
|
139
|
+
#
|
140
|
+
# All wave files written by Writer use this canonical format.
|
141
|
+
CANONICAL_HEADER_BYTE_LENGTH = {:pcm => 36, :float => 50} # :nodoc:
|
142
|
+
|
143
|
+
FORMAT_CHUNK_BYTE_LENGTH = {:pcm => 16, :float => 18} # :nodoc:
|
144
|
+
|
144
145
|
# Writes the RIFF chunk header, format chunk, and the header for the data chunk. After this
|
145
146
|
# method is called the file will be "queued up" and ready for writing actual sample data.
|
146
147
|
def write_header(sample_frame_count)
|
data/test/buffer_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'wavefile.rb'
|
3
3
|
|
4
4
|
include WaveFile
|
5
5
|
|
6
|
-
class BufferTest <
|
6
|
+
class BufferTest < MiniTest::Unit::TestCase
|
7
7
|
def test_convert
|
8
8
|
old_format = Format.new(:mono, :pcm_16, 44100)
|
9
9
|
new_format = Format.new(:stereo, :pcm_16, 22050)
|
@@ -75,7 +75,7 @@ class BufferTest < Test::Unit::TestCase
|
|
75
75
|
# Unsupported conversion (4-channel => 3-channel)
|
76
76
|
b = Buffer.new([[-100, 200, -300, 400], [1, 2, 3, 4]],
|
77
77
|
Format.new(4, bits_per_sample, sample_rate))
|
78
|
-
|
78
|
+
assert_raises(BufferConversionError) { b.convert!(Format.new(3, bits_per_sample, sample_rate)) }
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
data/test/duration_test.rb
CHANGED
Binary file
|
data/test/format_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'wavefile.rb'
|
3
3
|
|
4
4
|
include WaveFile
|
5
5
|
|
6
|
-
class FormatTest <
|
6
|
+
class FormatTest < MiniTest::Unit::TestCase
|
7
7
|
def test_valid_channels
|
8
8
|
[1, 2, 3, 4, 65535].each do |valid_channels|
|
9
9
|
assert_equal(valid_channels, Format.new(valid_channels, :pcm_16, 44100).channels)
|
@@ -15,7 +15,7 @@ class FormatTest < Test::Unit::TestCase
|
|
15
15
|
|
16
16
|
def test_invalid_channels
|
17
17
|
["dsfsfsdf", :foo, 0, -1, 65536].each do |invalid_channels|
|
18
|
-
|
18
|
+
assert_raises(InvalidFormatError) { Format.new(invalid_channels, :pcm_16, 44100) }
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -35,7 +35,7 @@ class FormatTest < Test::Unit::TestCase
|
|
35
35
|
|
36
36
|
def test_invalid_sample_format
|
37
37
|
["dsfsfsdf", :foo, 12, :pcm_14, :float_20].each do |invalid_sample_format|
|
38
|
-
|
38
|
+
assert_raises(InvalidFormatError) { Format.new(:mono, invalid_sample_format, 44100) }
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -55,7 +55,7 @@ class FormatTest < Test::Unit::TestCase
|
|
55
55
|
|
56
56
|
def test_invalid_bits_per_sample
|
57
57
|
["dsfsfsdf", :foo, :pcm, 0, 12, :pcm_14, :pcm_abc, :float_40].each do |invalid_sample_format|
|
58
|
-
|
58
|
+
assert_raises(InvalidFormatError) { Format.new(:mono, invalid_sample_format, 44100) }
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -67,7 +67,7 @@ class FormatTest < Test::Unit::TestCase
|
|
67
67
|
|
68
68
|
def test_invalid_sample_rate
|
69
69
|
["dsfsfsdf", :foo, 0, -1, 4294967297].each do |invalid_sample_rate|
|
70
|
-
|
70
|
+
assert_raises(InvalidFormatError) { Format.new(:mono, :pcm_16, invalid_sample_rate) }
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
data/test/reader_test.rb
CHANGED
@@ -1,19 +1,17 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'wavefile.rb'
|
3
3
|
require 'wavefile_io_test_helper.rb'
|
4
4
|
|
5
5
|
include WaveFile
|
6
6
|
|
7
|
-
class ReaderTest <
|
7
|
+
class ReaderTest < MiniTest::Unit::TestCase
|
8
8
|
include WaveFileIOTestHelper
|
9
9
|
|
10
10
|
FIXTURE_ROOT_PATH = "test/fixtures"
|
11
11
|
|
12
12
|
|
13
13
|
def test_nonexistent_file
|
14
|
-
|
15
|
-
|
16
|
-
assert_raise(Errno::ENOENT) { Reader.info(fixture("i_do_not_exist.wav")) }
|
14
|
+
assert_raises(Errno::ENOENT) { Reader.new(fixture("i_do_not_exist.wav")) }
|
17
15
|
end
|
18
16
|
|
19
17
|
def test_invalid_formats
|
@@ -45,10 +43,8 @@ class ReaderTest < Test::Unit::TestCase
|
|
45
43
|
|
46
44
|
# Reader.new and Reader.info should raise the same errors for invalid files,
|
47
45
|
# so run the tests for both methods.
|
48
|
-
|
49
|
-
|
50
|
-
assert_raise(InvalidFormatError) { Reader.send(method_name, fixture(fixture_name)) }
|
51
|
-
end
|
46
|
+
invalid_fixtures.each do |fixture_name|
|
47
|
+
assert_raises(InvalidFormatError) { Reader.new(fixture(fixture_name)) }
|
52
48
|
end
|
53
49
|
end
|
54
50
|
|
@@ -68,18 +64,58 @@ class ReaderTest < Test::Unit::TestCase
|
|
68
64
|
]
|
69
65
|
|
70
66
|
unsupported_fixtures.each do |fixture_name|
|
71
|
-
|
67
|
+
reader = Reader.new(fixture(fixture_name))
|
68
|
+
assert_equal(false, reader.readable_format?)
|
69
|
+
assert_raises(UnsupportedFormatError) { reader.read(1024) }
|
70
|
+
assert_raises(UnsupportedFormatError) { reader.each_buffer(1024) {|buffer| buffer } }
|
72
71
|
end
|
73
72
|
end
|
74
73
|
|
74
|
+
def test_initialize_unsupported_format
|
75
|
+
file_name = fixture("unsupported/unsupported_bits_per_sample.wav")
|
76
|
+
|
77
|
+
# Unsupported format, no read format given
|
78
|
+
reader = Reader.new(file_name)
|
79
|
+
assert_equal(2, reader.native_format.channels)
|
80
|
+
assert_equal(20, reader.native_format.bits_per_sample)
|
81
|
+
assert_equal(44100, reader.native_format.sample_rate)
|
82
|
+
assert_equal(2, reader.format.channels)
|
83
|
+
assert_equal(20, reader.format.bits_per_sample)
|
84
|
+
assert_equal(44100, reader.format.sample_rate)
|
85
|
+
assert_equal(false, reader.closed?)
|
86
|
+
assert_equal(file_name, reader.file_name)
|
87
|
+
assert_equal(0, reader.current_sample_frame)
|
88
|
+
assert_equal(2240, reader.total_sample_frames)
|
89
|
+
assert_equal(false, reader.readable_format?)
|
90
|
+
reader.close
|
91
|
+
|
92
|
+
# Unsupported format, different read format given
|
93
|
+
reader = Reader.new(file_name, Format.new(:mono, :pcm_16, 22050))
|
94
|
+
assert_equal(2, reader.native_format.channels)
|
95
|
+
assert_equal(20, reader.native_format.bits_per_sample)
|
96
|
+
assert_equal(44100, reader.native_format.sample_rate)
|
97
|
+
assert_equal(1, reader.format.channels)
|
98
|
+
assert_equal(16, reader.format.bits_per_sample)
|
99
|
+
assert_equal(22050, reader.format.sample_rate)
|
100
|
+
assert_equal(false, reader.closed?)
|
101
|
+
assert_equal(file_name, reader.file_name)
|
102
|
+
assert_equal(0, reader.current_sample_frame)
|
103
|
+
assert_equal(2240, reader.total_sample_frames)
|
104
|
+
assert_equal(false, reader.readable_format?)
|
105
|
+
reader.close
|
106
|
+
end
|
107
|
+
|
75
108
|
def test_initialize
|
76
109
|
format = Format.new(:stereo, :pcm_16, 22050)
|
77
110
|
|
78
111
|
exhaustively_test do |channels, sample_format|
|
79
112
|
file_name = fixture("valid/valid_#{channels}_#{sample_format}_44100.wav")
|
80
113
|
|
81
|
-
#
|
114
|
+
# Native format
|
82
115
|
reader = Reader.new(file_name)
|
116
|
+
assert_equal(CHANNEL_ALIAS[channels], reader.native_format.channels)
|
117
|
+
assert_equal(extract_bits_per_sample(sample_format), reader.native_format.bits_per_sample)
|
118
|
+
assert_equal(44100, reader.native_format.sample_rate)
|
83
119
|
assert_equal(CHANNEL_ALIAS[channels], reader.format.channels)
|
84
120
|
assert_equal(extract_bits_per_sample(sample_format), reader.format.bits_per_sample)
|
85
121
|
assert_equal(44100, reader.format.sample_rate)
|
@@ -87,10 +123,14 @@ class ReaderTest < Test::Unit::TestCase
|
|
87
123
|
assert_equal(file_name, reader.file_name)
|
88
124
|
assert_equal(0, reader.current_sample_frame)
|
89
125
|
assert_equal(2240, reader.total_sample_frames)
|
126
|
+
assert_equal(true, reader.readable_format?)
|
90
127
|
reader.close
|
91
128
|
|
92
|
-
#
|
129
|
+
# Non-native format
|
93
130
|
reader = Reader.new(file_name, format)
|
131
|
+
assert_equal(CHANNEL_ALIAS[channels], reader.native_format.channels)
|
132
|
+
assert_equal(extract_bits_per_sample(sample_format), reader.native_format.bits_per_sample)
|
133
|
+
assert_equal(44100, reader.native_format.sample_rate)
|
94
134
|
assert_equal(2, reader.format.channels)
|
95
135
|
assert_equal(16, reader.format.bits_per_sample)
|
96
136
|
assert_equal(22050, reader.format.sample_rate)
|
@@ -98,10 +138,14 @@ class ReaderTest < Test::Unit::TestCase
|
|
98
138
|
assert_equal(file_name, reader.file_name)
|
99
139
|
assert_equal(0, reader.current_sample_frame)
|
100
140
|
assert_equal(2240, reader.total_sample_frames)
|
141
|
+
assert_equal(true, reader.readable_format?)
|
101
142
|
reader.close
|
102
143
|
|
103
144
|
# Block is given.
|
104
145
|
reader = Reader.new(file_name) {|reader| reader.read(1024) }
|
146
|
+
assert_equal(CHANNEL_ALIAS[channels], reader.native_format.channels)
|
147
|
+
assert_equal(extract_bits_per_sample(sample_format), reader.native_format.bits_per_sample)
|
148
|
+
assert_equal(44100, reader.native_format.sample_rate)
|
105
149
|
assert_equal(CHANNEL_ALIAS[channels], reader.format.channels)
|
106
150
|
assert_equal(extract_bits_per_sample(sample_format), reader.format.bits_per_sample)
|
107
151
|
assert_equal(44100, reader.format.sample_rate)
|
@@ -109,6 +153,7 @@ class ReaderTest < Test::Unit::TestCase
|
|
109
153
|
assert_equal(file_name, reader.file_name)
|
110
154
|
assert_equal(1024, reader.current_sample_frame)
|
111
155
|
assert_equal(2240, reader.total_sample_frames)
|
156
|
+
assert_equal(true, reader.readable_format?)
|
112
157
|
end
|
113
158
|
end
|
114
159
|
|
@@ -147,7 +192,7 @@ class ReaderTest < Test::Unit::TestCase
|
|
147
192
|
|
148
193
|
def test_each_buffer_no_block_given
|
149
194
|
reader = Reader.new(fixture("valid/valid_mono_pcm_16_44100.wav"))
|
150
|
-
|
195
|
+
assert_raises(LocalJumpError) { reader.each_buffer(1024) }
|
151
196
|
end
|
152
197
|
|
153
198
|
def test_each_buffer_native_format
|
@@ -231,7 +276,7 @@ class ReaderTest < Test::Unit::TestCase
|
|
231
276
|
reader = Reader.new(fixture("valid/valid_mono_pcm_16_44100.wav"))
|
232
277
|
buffer = reader.read(1024)
|
233
278
|
reader.close
|
234
|
-
|
279
|
+
assert_raises(IOError) { reader.read(1024) }
|
235
280
|
end
|
236
281
|
|
237
282
|
def test_sample_counts_manual_reads
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'wavefile.rb'
|
3
|
+
|
4
|
+
include WaveFile
|
5
|
+
|
6
|
+
class UnvalidatedFormatTest < MiniTest::Unit::TestCase
|
7
|
+
def test_initialize
|
8
|
+
format = UnvalidatedFormat.new({:audio_format => 1,
|
9
|
+
:channels => 2,
|
10
|
+
:sample_rate => 44100,
|
11
|
+
:byte_rate => 176400,
|
12
|
+
:block_align => 4,
|
13
|
+
:bits_per_sample => 16})
|
14
|
+
|
15
|
+
assert_equal(1, format.audio_format)
|
16
|
+
assert_equal(2, format.channels)
|
17
|
+
assert_equal(false, format.mono?)
|
18
|
+
assert_equal(true, format.stereo?)
|
19
|
+
assert_equal(44100, format.sample_rate)
|
20
|
+
assert_equal(176400, format.byte_rate)
|
21
|
+
assert_equal(4, format.block_align)
|
22
|
+
assert_equal(16, format.bits_per_sample)
|
23
|
+
end
|
24
|
+
end
|
data/test/writer_test.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'wavefile.rb'
|
3
3
|
require 'wavefile_io_test_helper.rb'
|
4
4
|
|
5
5
|
include WaveFile
|
6
6
|
|
7
|
-
class WriterTest <
|
7
|
+
class WriterTest < MiniTest::Unit::TestCase
|
8
8
|
include WaveFileIOTestHelper
|
9
9
|
|
10
10
|
OUTPUT_FOLDER = "test/fixtures/actual_output"
|
@@ -103,7 +103,7 @@ class WriterTest < Test::Unit::TestCase
|
|
103
103
|
writer.write(Buffer.new([1, 2, 3, 4], format))
|
104
104
|
writer.close
|
105
105
|
|
106
|
-
|
106
|
+
assert_raises(IOError) { writer.write(Buffer.new([5, 6, 7, 8], format)) }
|
107
107
|
end
|
108
108
|
|
109
109
|
def test_total_duration
|
metadata
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wavefile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Strait
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: You can use this gem to create Ruby programs that
|
14
|
-
|
15
|
-
use it without having to compile
|
13
|
+
description: You can use this gem to create Ruby programs that work with audio, by
|
14
|
+
reading and writing Wave sound files (*.wav). Since it is written in pure Ruby (as
|
15
|
+
opposed to wrapping an existing C library), you can use it without having to compile
|
16
|
+
a separate extension.
|
16
17
|
email: joel dot strait at Google's popular web mail service
|
17
18
|
executables: []
|
18
19
|
extensions: []
|
@@ -21,18 +22,19 @@ files:
|
|
21
22
|
- LICENSE
|
22
23
|
- README.markdown
|
23
24
|
- Rakefile
|
25
|
+
- lib/wavefile.rb
|
24
26
|
- lib/wavefile/buffer.rb
|
27
|
+
- lib/wavefile/chunk_readers.rb
|
28
|
+
- lib/wavefile/chunk_readers/header_reader.rb
|
25
29
|
- lib/wavefile/duration.rb
|
26
30
|
- lib/wavefile/format.rb
|
27
|
-
- lib/wavefile/info.rb
|
28
31
|
- lib/wavefile/reader.rb
|
32
|
+
- lib/wavefile/unvalidated_format.rb
|
29
33
|
- lib/wavefile/writer.rb
|
30
|
-
- lib/wavefile.rb
|
31
34
|
- test/buffer_test.rb
|
32
|
-
- test/buffer_test.rbc
|
33
35
|
- test/duration_test.rb
|
34
|
-
- test/
|
35
|
-
- test/fixtures/
|
36
|
+
- test/fixtures/actual_output/no_samples.wav
|
37
|
+
- test/fixtures/invalid/README.markdown
|
36
38
|
- test/fixtures/invalid/bad_riff_header.wav
|
37
39
|
- test/fixtures/invalid/bad_wavefile_format.wav
|
38
40
|
- test/fixtures/invalid/empty.wav
|
@@ -41,15 +43,14 @@ files:
|
|
41
43
|
- test/fixtures/invalid/insufficient_format_chunk.wav
|
42
44
|
- test/fixtures/invalid/no_data_chunk.wav
|
43
45
|
- test/fixtures/invalid/no_format_chunk.wav
|
44
|
-
- test/fixtures/
|
46
|
+
- test/fixtures/unsupported/README.markdown
|
45
47
|
- test/fixtures/unsupported/bad_audio_format.wav
|
46
48
|
- test/fixtures/unsupported/bad_channel_count.wav
|
47
49
|
- test/fixtures/unsupported/bad_sample_rate.wav
|
48
|
-
- test/fixtures/unsupported/README.markdown
|
49
50
|
- test/fixtures/unsupported/unsupported_audio_format.wav
|
50
51
|
- test/fixtures/unsupported/unsupported_bits_per_sample.wav
|
51
|
-
- test/fixtures/valid/no_samples.wav
|
52
52
|
- test/fixtures/valid/README.markdown
|
53
|
+
- test/fixtures/valid/no_samples.wav
|
53
54
|
- test/fixtures/valid/valid_mono_float_32_44100.wav
|
54
55
|
- test/fixtures/valid/valid_mono_float_64_44100.wav
|
55
56
|
- test/fixtures/valid/valid_mono_pcm_16_44100.wav
|
@@ -71,17 +72,13 @@ files:
|
|
71
72
|
- test/fixtures/valid/valid_tri_pcm_32_44100.wav
|
72
73
|
- test/fixtures/valid/valid_tri_pcm_8_44100.wav
|
73
74
|
- test/format_test.rb
|
74
|
-
- test/format_test.rbc
|
75
|
-
- test/info_test.rb
|
76
|
-
- test/info_test.rbc
|
77
75
|
- test/reader_test.rb
|
78
|
-
- test/
|
76
|
+
- test/unvalidated_format_test.rb
|
79
77
|
- test/wavefile_io_test_helper.rb
|
80
|
-
- test/wavefile_io_test_helper.rbc
|
81
78
|
- test/writer_test.rb
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
homepage: http://wavefilegem.com/
|
80
|
+
licenses:
|
81
|
+
- MIT
|
85
82
|
metadata: {}
|
86
83
|
post_install_message:
|
87
84
|
rdoc_options: []
|
@@ -89,17 +86,17 @@ require_paths:
|
|
89
86
|
- lib
|
90
87
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
88
|
requirements:
|
92
|
-
- -
|
89
|
+
- - ">="
|
93
90
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
91
|
+
version: 1.9.3
|
95
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
93
|
requirements:
|
97
|
-
- -
|
94
|
+
- - ">="
|
98
95
|
- !ruby/object:Gem::Version
|
99
96
|
version: '0'
|
100
97
|
requirements: []
|
101
98
|
rubyforge_project:
|
102
|
-
rubygems_version: 2.1
|
99
|
+
rubygems_version: 2.6.1
|
103
100
|
signing_key:
|
104
101
|
specification_version: 4
|
105
102
|
summary: A pure Ruby library for reading and writing Wave sound files (*.wav)
|