ruby-audio 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/test_sndfile.rb DELETED
@@ -1,191 +0,0 @@
1
- require 'test/unit'
2
- require 'audio/sndfile'
3
- require 'narray'
4
-
5
- class SndfileTest < Test::Unit::TestCase
6
- include Sndfile
7
- TEST_WAV='test/what.wav'
8
- STEREO_TEST_WAV='test/what2.wav'
9
-
10
- def setup
11
- raise "Invalid test wav" unless File.readable?(TEST_WAV)
12
- @inf = SF_INFO.new
13
- @sf = sf_open(TEST_WAV,SFM_RDWR,@inf)
14
- raise "Couldn't open #{TEST_WAV}: #{sf_strerror(@sf)}" if @sf.nil?
15
- end
16
-
17
- def teardown
18
- sf_close(@sf)
19
- end
20
-
21
- def test_enums
22
- enums = {
23
- SF_FORMAT_WAV => 0x010000,
24
- SF_FORMAT_AIFF => 0x020000,
25
- SF_FORMAT_AU => 0x030000,
26
- SF_FORMAT_RAW => 0x040000,
27
- SF_FORMAT_PAF => 0x050000,
28
- SF_FORMAT_SVX => 0x060000,
29
- SF_FORMAT_NIST => 0x070000,
30
- SF_FORMAT_VOC => 0x080000,
31
- SF_FORMAT_IRCAM => 0x0A0000,
32
- SF_FORMAT_W64 => 0x0B0000,
33
- SF_FORMAT_MAT4 => 0x0C0000,
34
- SF_FORMAT_MAT5 => 0x0D0000,
35
- SF_FORMAT_PVF => 0x0E0000,
36
- SF_FORMAT_XI => 0x0F0000,
37
- SF_FORMAT_HTK => 0x100000,
38
- SF_FORMAT_SDS => 0x110000,
39
- SF_FORMAT_AVR => 0x120000,
40
- SF_FORMAT_WAVEX => 0x130000,
41
- SF_FORMAT_SD2 => 0x160000,
42
- SF_FORMAT_FLAC => 0x170000,
43
- SF_FORMAT_CAF => 0x180000,
44
- SF_FORMAT_PCM_S8 => 0x0001,
45
- SF_FORMAT_PCM_16 => 0x0002,
46
- SF_FORMAT_PCM_24 => 0x0003,
47
- SF_FORMAT_PCM_32 => 0x0004,
48
- SF_FORMAT_PCM_U8 => 0x0005,
49
- SF_FORMAT_FLOAT => 0x0006,
50
- SF_FORMAT_DOUBLE => 0x0007,
51
- SF_FORMAT_ULAW => 0x0010,
52
- SF_FORMAT_ALAW => 0x0011,
53
- SF_FORMAT_IMA_ADPCM => 0x0012,
54
- SF_FORMAT_MS_ADPCM => 0x0013,
55
- SF_FORMAT_GSM610 => 0x0020,
56
- SF_FORMAT_VOX_ADPCM => 0x0021,
57
- SF_FORMAT_G721_32 => 0x0030,
58
- SF_FORMAT_G723_24 => 0x0031,
59
- SF_FORMAT_G723_40 => 0x0032,
60
- SF_FORMAT_DWVW_12 => 0x0040,
61
- SF_FORMAT_DWVW_16 => 0x0041,
62
- SF_FORMAT_DWVW_24 => 0x0042,
63
- SF_FORMAT_DWVW_N => 0x0043,
64
- SF_FORMAT_DPCM_8 => 0x0050,
65
- SF_FORMAT_DPCM_16 => 0x0051,
66
- SF_ENDIAN_FILE => 0x00000000,
67
- SF_ENDIAN_LITTLE => 0x10000000,
68
- SF_ENDIAN_BIG => 0x20000000,
69
- SF_ENDIAN_CPU => 0x30000000,
70
- SF_FORMAT_SUBMASK => 0x0000FFFF,
71
- SF_FORMAT_TYPEMASK => 0x0FFF0000,
72
- SF_FORMAT_ENDMASK => 0x30000000
73
- }
74
-
75
- enums.each_pair do |k,v|
76
- assert_equal k,v
77
- end
78
- assert_equal SF_ERR_UNSUPPORTED_ENCODING, 4
79
- end
80
-
81
- def test_info
82
- assert ! sf_format_check(SF_INFO.new)
83
- assert @inf.frames > 0
84
- assert_equal 16000, @inf.samplerate
85
- assert_equal 1, @inf.channels
86
- assert_equal SF_FORMAT_WAV|SF_FORMAT_PCM_16, @inf.format
87
- assert_equal 1, @inf.sections
88
- #assert_equal true, @inf.seekable
89
- assert sf_format_check(@inf)
90
- end
91
-
92
- def test_error
93
- File.delete('bogus.wav') if File.exist?('bogus.wav')
94
- s = sf_open('bogus.wav',SFM_READ,SF_INFO.new)
95
- assert_nil s
96
- # on some systems (or versions?) libsndfile gives either
97
- # SF_ERR_UNRECOGNIZED_FORMAT or SF_ERR_SYSTEM, so we just check that there
98
- # was _some_ error.
99
- assert_not_equal SF_ERR_NO_ERROR, sf_error(nil)
100
- sf_close(s)
101
- assert_equal SF_ERR_NO_ERROR, sf_error(@sf)
102
- assert_equal 'No Error.', sf_strerror(@sf)
103
- assert_kind_of String, sf_error_number(1)
104
- end
105
-
106
- def test_file
107
- s = sf_open(TEST_WAV,SFM_READ,SF_INFO.new)
108
- assert_not_nil s
109
- assert_equal 0, sf_close(s)
110
- end
111
-
112
- def test_read
113
- a = NArray.float(1000)
114
- sf_read_double(@sf, a)
115
- assert a.max > 0
116
- end
117
-
118
- def test_write
119
- a = NArray.float(1000)
120
- sf_read_double(@sf, a)
121
- sf2 = nil
122
- assert_nothing_raised do
123
- sf2 = sf_open('bogus.wav',SFM_RDWR, @inf)
124
- sf_write_double(sf2, a)
125
- end
126
- b = NArray.float(1000)
127
- sf_seek(sf2, 0, SEEK_SET)
128
- sf_read_double(sf2, b)
129
- assert a == b
130
- sf_close(sf2)
131
- File.delete('bogus.wav') if File.exist?('bogus.wav')
132
- end
133
-
134
- def test_string
135
- assert_nil sf_get_string(@sf,SF_STR_COMMENT)
136
- end
137
-
138
- def test_magical_open
139
- sf = Audio::Soundfile.open(TEST_WAV)
140
- assert_instance_of Audio::Soundfile, sf
141
- assert sf.format_check
142
- assert_equal Audio::Soundfile::SF_FORMAT_WAV, 0x010000
143
- sf.close
144
- end
145
-
146
- def test_magical_read
147
- Audio::Soundfile.open(TEST_WAV) do |sf|
148
- a = sf.read_float(100)
149
- assert_instance_of Audio::Sound, a
150
- assert_equal :float, a.type
151
- assert_equal 4, a.typecode
152
- assert a.size <= 100
153
- assert_equal sf.channels, a.channels
154
-
155
- n = sf.read_float(a)
156
- assert n <= a.size
157
- n = sf.read(a)
158
- assert n <= a.size
159
- end
160
- Audio::Soundfile.open(STEREO_TEST_WAV) do |sf|
161
- a = sf.read_float(100)
162
- assert a.size <= 100
163
- assert_equal sf.channels, a.channels
164
-
165
- n = sf.read_float(a)
166
- assert n <= a.size
167
- n = sf.read(a)
168
- assert n <= a.size
169
- end
170
- end
171
-
172
- def test_magical_write
173
- Audio::Soundfile.open(TEST_WAV) do |sf|
174
- # Read data
175
- a = sf.read_float(1000)
176
-
177
- # Test magical write
178
- sf2 = Audio::Soundfile.open('bogus.wav', 'rw', sf.info)
179
- sf2.write(a)
180
-
181
- # Check that read data matches written data
182
- sf2.seek(0, SEEK_SET)
183
- b = sf2.read_float(1000)
184
- assert a == b
185
-
186
- # Clean up
187
- sf2.close
188
- File.delete('bogus.wav') if File.exist?('bogus.wav')
189
- end
190
- end
191
- end