ruby-audio 0.2.1 → 1.0.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.
- data/README.rdoc +7 -6
- data/Rakefile +14 -21
- data/ext/extconf.rb +12 -0
- data/ext/ra_buffer.c +277 -0
- data/ext/ra_buffer.h +39 -0
- data/ext/ra_sound.c +274 -0
- data/ext/ra_sound.h +37 -0
- data/ext/ra_soundinfo.c +165 -0
- data/ext/ra_soundinfo.h +25 -0
- data/ext/rubyaudio_ext.c +91 -0
- data/lib/ruby-audio.rb +4 -0
- data/lib/ruby-audio/buffer.rb +17 -0
- data/lib/ruby-audio/sound.rb +85 -0
- data/lib/ruby-audio/sound_info.rb +40 -0
- data/spec/buffer_spec.rb +50 -0
- data/spec/data/what.mp3 +0 -0
- data/{test → spec/data}/what.wav +0 -0
- data/{test → spec/data}/what2.wav +0 -0
- data/spec/sound_info_spec.rb +39 -0
- data/spec/sound_spec.rb +147 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +12 -0
- metadata +37 -31
- data/TODO +0 -5
- data/examples/load_samples.rb +0 -27
- data/examples/t.rb +0 -10
- data/ext/sndfile/extconf.rb +0 -31
- data/ext/sndfile/sndfile.i +0 -90
- data/lib/audio.rb +0 -134
- data/lib/audio/sndfile.rb +0 -156
- data/test/test_audio.rb +0 -82
- data/test/test_sndfile.rb +0 -191
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
|