ruby-audio 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +8 -1
- data/ext/extconf.rb +3 -0
- data/ext/rubyaudio_ext.c +56 -55
- data/lib/ruby-audio/sound_info.rb +26 -0
- data/spec/sound_info_spec.rb +10 -0
- metadata +12 -5
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'spec/rake/spectask'
|
|
6
6
|
|
7
7
|
spec = Gem::Specification.new do |s|
|
8
8
|
s.name = 'ruby-audio'
|
9
|
-
s.version = '1.
|
9
|
+
s.version = '1.3.0'
|
10
10
|
s.summary = 'ruby-audio wraps around libsndfile to provide simplified sound reading and writing support to ruby programs'
|
11
11
|
s.authors = ['Stephen Augenstein']
|
12
12
|
s.email = 'perl.programmer@gmail.com'
|
@@ -28,6 +28,13 @@ task :default => :spec
|
|
28
28
|
# Rake gem & package routines
|
29
29
|
Rake::GemPackageTask.new(spec).define
|
30
30
|
|
31
|
+
desc 'Generate a gemspec file'
|
32
|
+
task :gemspec do
|
33
|
+
File.open("#{spec.name}.gemspec", 'w') do |f|
|
34
|
+
f.write spec.to_ruby
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
31
38
|
desc "Generate documentation"
|
32
39
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
33
40
|
rdoc.rdoc_dir = 'rdoc'
|
data/ext/extconf.rb
CHANGED
data/ext/rubyaudio_ext.c
CHANGED
@@ -27,65 +27,66 @@ void Init_rubyaudio_ext() {
|
|
27
27
|
|
28
28
|
// Export libsndfile constants
|
29
29
|
// Major formats
|
30
|
-
rb_define_const(mRubyAudio, "FORMAT_WAV", INT2FIX(SF_FORMAT_WAV));
|
31
|
-
rb_define_const(mRubyAudio, "FORMAT_AIFF", INT2FIX(SF_FORMAT_AIFF));
|
32
|
-
rb_define_const(mRubyAudio, "FORMAT_AU", INT2FIX(SF_FORMAT_AU));
|
33
|
-
rb_define_const(mRubyAudio, "FORMAT_RAW", INT2FIX(SF_FORMAT_RAW));
|
34
|
-
rb_define_const(mRubyAudio, "FORMAT_PAF", INT2FIX(SF_FORMAT_PAF));
|
35
|
-
rb_define_const(mRubyAudio, "FORMAT_SVX", INT2FIX(SF_FORMAT_SVX));
|
36
|
-
rb_define_const(mRubyAudio, "FORMAT_NIST", INT2FIX(SF_FORMAT_NIST));
|
37
|
-
rb_define_const(mRubyAudio, "FORMAT_VOC", INT2FIX(SF_FORMAT_VOC));
|
38
|
-
rb_define_const(mRubyAudio, "FORMAT_IRCAM", INT2FIX(SF_FORMAT_IRCAM));
|
39
|
-
rb_define_const(mRubyAudio, "FORMAT_W64", INT2FIX(SF_FORMAT_W64));
|
40
|
-
rb_define_const(mRubyAudio, "FORMAT_MAT4", INT2FIX(SF_FORMAT_MAT4));
|
41
|
-
rb_define_const(mRubyAudio, "FORMAT_MAT5", INT2FIX(SF_FORMAT_MAT5));
|
42
|
-
rb_define_const(mRubyAudio, "FORMAT_PVF", INT2FIX(SF_FORMAT_PVF));
|
43
|
-
rb_define_const(mRubyAudio, "FORMAT_XI", INT2FIX(SF_FORMAT_XI));
|
44
|
-
rb_define_const(mRubyAudio, "FORMAT_HTK", INT2FIX(SF_FORMAT_HTK));
|
45
|
-
rb_define_const(mRubyAudio, "FORMAT_SDS", INT2FIX(SF_FORMAT_SDS));
|
46
|
-
rb_define_const(mRubyAudio, "FORMAT_AVR", INT2FIX(SF_FORMAT_AVR));
|
47
|
-
rb_define_const(mRubyAudio, "FORMAT_WAVEX", INT2FIX(SF_FORMAT_WAVEX));
|
48
|
-
rb_define_const(mRubyAudio, "FORMAT_SD2", INT2FIX(SF_FORMAT_SD2));
|
49
|
-
rb_define_const(mRubyAudio, "FORMAT_FLAC", INT2FIX(SF_FORMAT_FLAC));
|
50
|
-
rb_define_const(mRubyAudio, "FORMAT_CAF", INT2FIX(SF_FORMAT_CAF));
|
51
|
-
|
52
|
-
rb_define_const(mRubyAudio, "FORMAT_OGG", INT2FIX(SF_FORMAT_OGG));
|
53
|
-
|
54
|
-
rb_define_const(mRubyAudio, "FORMAT_RF64", INT2FIX(SF_FORMAT_RF64));
|
30
|
+
rb_define_const(mRubyAudio, "FORMAT_WAV", /* 0x010000 */ INT2FIX(SF_FORMAT_WAV));
|
31
|
+
rb_define_const(mRubyAudio, "FORMAT_AIFF", /* 0x020000 */ INT2FIX(SF_FORMAT_AIFF));
|
32
|
+
rb_define_const(mRubyAudio, "FORMAT_AU", /* 0x030000 */ INT2FIX(SF_FORMAT_AU));
|
33
|
+
rb_define_const(mRubyAudio, "FORMAT_RAW", /* 0x040000 */ INT2FIX(SF_FORMAT_RAW));
|
34
|
+
rb_define_const(mRubyAudio, "FORMAT_PAF", /* 0x050000 */ INT2FIX(SF_FORMAT_PAF));
|
35
|
+
rb_define_const(mRubyAudio, "FORMAT_SVX", /* 0x060000 */ INT2FIX(SF_FORMAT_SVX));
|
36
|
+
rb_define_const(mRubyAudio, "FORMAT_NIST", /* 0x070000 */ INT2FIX(SF_FORMAT_NIST));
|
37
|
+
rb_define_const(mRubyAudio, "FORMAT_VOC", /* 0x080000 */ INT2FIX(SF_FORMAT_VOC));
|
38
|
+
rb_define_const(mRubyAudio, "FORMAT_IRCAM", /* 0x0A0000 */ INT2FIX(SF_FORMAT_IRCAM));
|
39
|
+
rb_define_const(mRubyAudio, "FORMAT_W64", /* 0x0B0000 */ INT2FIX(SF_FORMAT_W64));
|
40
|
+
rb_define_const(mRubyAudio, "FORMAT_MAT4", /* 0x0C0000 */ INT2FIX(SF_FORMAT_MAT4));
|
41
|
+
rb_define_const(mRubyAudio, "FORMAT_MAT5", /* 0x0D0000 */ INT2FIX(SF_FORMAT_MAT5));
|
42
|
+
rb_define_const(mRubyAudio, "FORMAT_PVF", /* 0x0E0000 */ INT2FIX(SF_FORMAT_PVF));
|
43
|
+
rb_define_const(mRubyAudio, "FORMAT_XI", /* 0x0F0000 */ INT2FIX(SF_FORMAT_XI));
|
44
|
+
rb_define_const(mRubyAudio, "FORMAT_HTK", /* 0x100000 */ INT2FIX(SF_FORMAT_HTK));
|
45
|
+
rb_define_const(mRubyAudio, "FORMAT_SDS", /* 0x110000 */ INT2FIX(SF_FORMAT_SDS));
|
46
|
+
rb_define_const(mRubyAudio, "FORMAT_AVR", /* 0x120000 */ INT2FIX(SF_FORMAT_AVR));
|
47
|
+
rb_define_const(mRubyAudio, "FORMAT_WAVEX", /* 0x130000 */ INT2FIX(SF_FORMAT_WAVEX));
|
48
|
+
rb_define_const(mRubyAudio, "FORMAT_SD2", /* 0x160000 */ INT2FIX(SF_FORMAT_SD2));
|
49
|
+
rb_define_const(mRubyAudio, "FORMAT_FLAC", /* 0x170000 */ INT2FIX(SF_FORMAT_FLAC));
|
50
|
+
rb_define_const(mRubyAudio, "FORMAT_CAF", /* 0x180000 */ INT2FIX(SF_FORMAT_CAF));
|
51
|
+
#ifdef HAVE_CONST_SF_FORMAT_OGG
|
52
|
+
rb_define_const(mRubyAudio, "FORMAT_OGG", /* 0x200000 */ INT2FIX(SF_FORMAT_OGG));
|
53
|
+
#endif
|
55
54
|
|
56
55
|
// Subtypes from here on
|
57
|
-
rb_define_const(mRubyAudio, "FORMAT_PCM_S8", INT2FIX(SF_FORMAT_PCM_S8));
|
58
|
-
rb_define_const(mRubyAudio, "FORMAT_PCM_16", INT2FIX(SF_FORMAT_PCM_16));
|
59
|
-
rb_define_const(mRubyAudio, "FORMAT_PCM_24", INT2FIX(SF_FORMAT_PCM_24));
|
60
|
-
rb_define_const(mRubyAudio, "FORMAT_PCM_32", INT2FIX(SF_FORMAT_PCM_32));
|
61
|
-
rb_define_const(mRubyAudio, "FORMAT_PCM_U8", INT2FIX(SF_FORMAT_PCM_U8));
|
62
|
-
rb_define_const(mRubyAudio, "FORMAT_FLOAT", INT2FIX(SF_FORMAT_FLOAT));
|
63
|
-
rb_define_const(mRubyAudio, "FORMAT_DOUBLE", INT2FIX(SF_FORMAT_DOUBLE));
|
64
|
-
rb_define_const(mRubyAudio, "FORMAT_ULAW", INT2FIX(SF_FORMAT_ULAW));
|
65
|
-
rb_define_const(mRubyAudio, "FORMAT_ALAW", INT2FIX(SF_FORMAT_ALAW));
|
66
|
-
rb_define_const(mRubyAudio, "FORMAT_IMA_ADPCM", INT2FIX(SF_FORMAT_IMA_ADPCM));
|
67
|
-
rb_define_const(mRubyAudio, "FORMAT_MS_ADPCM", INT2FIX(SF_FORMAT_MS_ADPCM));
|
68
|
-
rb_define_const(mRubyAudio, "FORMAT_GSM610", INT2FIX(SF_FORMAT_GSM610));
|
69
|
-
rb_define_const(mRubyAudio, "FORMAT_VOX_ADPCM", INT2FIX(SF_FORMAT_VOX_ADPCM));
|
70
|
-
rb_define_const(mRubyAudio, "FORMAT_G721_32", INT2FIX(SF_FORMAT_G721_32));
|
71
|
-
rb_define_const(mRubyAudio, "FORMAT_G723_24", INT2FIX(SF_FORMAT_G723_24));
|
72
|
-
rb_define_const(mRubyAudio, "FORMAT_G723_40", INT2FIX(SF_FORMAT_G723_40));
|
73
|
-
rb_define_const(mRubyAudio, "FORMAT_DWVW_12", INT2FIX(SF_FORMAT_DWVW_12));
|
74
|
-
rb_define_const(mRubyAudio, "FORMAT_DWVW_16", INT2FIX(SF_FORMAT_DWVW_16));
|
75
|
-
rb_define_const(mRubyAudio, "FORMAT_DWVW_24", INT2FIX(SF_FORMAT_DWVW_24));
|
76
|
-
rb_define_const(mRubyAudio, "FORMAT_DWVW_N", INT2FIX(SF_FORMAT_DWVW_N));
|
77
|
-
rb_define_const(mRubyAudio, "FORMAT_DPCM_8", INT2FIX(SF_FORMAT_DPCM_8));
|
78
|
-
rb_define_const(mRubyAudio, "FORMAT_DPCM_16", INT2FIX(SF_FORMAT_DPCM_16));
|
79
|
-
|
56
|
+
rb_define_const(mRubyAudio, "FORMAT_PCM_S8", /* 0x0001 */ INT2FIX(SF_FORMAT_PCM_S8));
|
57
|
+
rb_define_const(mRubyAudio, "FORMAT_PCM_16", /* 0x0002 */ INT2FIX(SF_FORMAT_PCM_16));
|
58
|
+
rb_define_const(mRubyAudio, "FORMAT_PCM_24", /* 0x0003 */ INT2FIX(SF_FORMAT_PCM_24));
|
59
|
+
rb_define_const(mRubyAudio, "FORMAT_PCM_32", /* 0x0004 */ INT2FIX(SF_FORMAT_PCM_32));
|
60
|
+
rb_define_const(mRubyAudio, "FORMAT_PCM_U8", /* 0x0005 */ INT2FIX(SF_FORMAT_PCM_U8));
|
61
|
+
rb_define_const(mRubyAudio, "FORMAT_FLOAT", /* 0x0006 */ INT2FIX(SF_FORMAT_FLOAT));
|
62
|
+
rb_define_const(mRubyAudio, "FORMAT_DOUBLE", /* 0x0007 */ INT2FIX(SF_FORMAT_DOUBLE));
|
63
|
+
rb_define_const(mRubyAudio, "FORMAT_ULAW", /* 0x0010 */ INT2FIX(SF_FORMAT_ULAW));
|
64
|
+
rb_define_const(mRubyAudio, "FORMAT_ALAW", /* 0x0011 */ INT2FIX(SF_FORMAT_ALAW));
|
65
|
+
rb_define_const(mRubyAudio, "FORMAT_IMA_ADPCM", /* 0x0012 */ INT2FIX(SF_FORMAT_IMA_ADPCM));
|
66
|
+
rb_define_const(mRubyAudio, "FORMAT_MS_ADPCM", /* 0x0013 */ INT2FIX(SF_FORMAT_MS_ADPCM));
|
67
|
+
rb_define_const(mRubyAudio, "FORMAT_GSM610", /* 0x0020 */ INT2FIX(SF_FORMAT_GSM610));
|
68
|
+
rb_define_const(mRubyAudio, "FORMAT_VOX_ADPCM", /* 0x0021 */ INT2FIX(SF_FORMAT_VOX_ADPCM));
|
69
|
+
rb_define_const(mRubyAudio, "FORMAT_G721_32", /* 0x0030 */ INT2FIX(SF_FORMAT_G721_32));
|
70
|
+
rb_define_const(mRubyAudio, "FORMAT_G723_24", /* 0x0031 */ INT2FIX(SF_FORMAT_G723_24));
|
71
|
+
rb_define_const(mRubyAudio, "FORMAT_G723_40", /* 0x0032 */ INT2FIX(SF_FORMAT_G723_40));
|
72
|
+
rb_define_const(mRubyAudio, "FORMAT_DWVW_12", /* 0x0040 */ INT2FIX(SF_FORMAT_DWVW_12));
|
73
|
+
rb_define_const(mRubyAudio, "FORMAT_DWVW_16", /* 0x0041 */ INT2FIX(SF_FORMAT_DWVW_16));
|
74
|
+
rb_define_const(mRubyAudio, "FORMAT_DWVW_24", /* 0x0042 */ INT2FIX(SF_FORMAT_DWVW_24));
|
75
|
+
rb_define_const(mRubyAudio, "FORMAT_DWVW_N", /* 0x0043 */ INT2FIX(SF_FORMAT_DWVW_N));
|
76
|
+
rb_define_const(mRubyAudio, "FORMAT_DPCM_8", /* 0x0050 */ INT2FIX(SF_FORMAT_DPCM_8));
|
77
|
+
rb_define_const(mRubyAudio, "FORMAT_DPCM_16", /* 0x0051 */ INT2FIX(SF_FORMAT_DPCM_16));
|
78
|
+
#ifdef HAVE_CONST_SF_FORMAT_OGG
|
79
|
+
rb_define_const(mRubyAudio, "FORMAT_VORBIS", /* 0x0060 */ INT2FIX(SF_FORMAT_VORBIS));
|
80
|
+
#endif
|
80
81
|
|
81
82
|
// Endian-ness options
|
82
|
-
rb_define_const(mRubyAudio, "ENDIAN_FILE", INT2FIX(SF_ENDIAN_FILE));
|
83
|
-
rb_define_const(mRubyAudio, "ENDIAN_LITTLE", INT2FIX(SF_ENDIAN_LITTLE));
|
84
|
-
rb_define_const(mRubyAudio, "ENDIAN_BIG", INT2FIX(SF_ENDIAN_BIG));
|
85
|
-
rb_define_const(mRubyAudio, "ENDIAN_CPU", INT2FIX(SF_ENDIAN_CPU));
|
83
|
+
rb_define_const(mRubyAudio, "ENDIAN_FILE", /* 0x00000000 */ INT2FIX(SF_ENDIAN_FILE));
|
84
|
+
rb_define_const(mRubyAudio, "ENDIAN_LITTLE", /* 0x10000000 */ INT2FIX(SF_ENDIAN_LITTLE));
|
85
|
+
rb_define_const(mRubyAudio, "ENDIAN_BIG", /* 0x20000000 */ INT2FIX(SF_ENDIAN_BIG));
|
86
|
+
rb_define_const(mRubyAudio, "ENDIAN_CPU", /* 0x30000000 */ INT2FIX(SF_ENDIAN_CPU));
|
86
87
|
|
87
88
|
// Format masks
|
88
|
-
rb_define_const(mRubyAudio, "FORMAT_SUBMASK", INT2FIX(SF_FORMAT_SUBMASK));
|
89
|
-
rb_define_const(mRubyAudio, "FORMAT_TYPEMASK", INT2FIX(SF_FORMAT_TYPEMASK));
|
90
|
-
rb_define_const(mRubyAudio, "FORMAT_ENDMASK", INT2FIX(SF_FORMAT_ENDMASK));
|
89
|
+
rb_define_const(mRubyAudio, "FORMAT_SUBMASK", /* 0x0000FFFF */ INT2FIX(SF_FORMAT_SUBMASK));
|
90
|
+
rb_define_const(mRubyAudio, "FORMAT_TYPEMASK", /* 0x0FFF0000 */ INT2FIX(SF_FORMAT_TYPEMASK));
|
91
|
+
rb_define_const(mRubyAudio, "FORMAT_ENDMASK", /* 0x30000000 */ INT2FIX(SF_FORMAT_ENDMASK));
|
91
92
|
}
|
@@ -36,5 +36,31 @@ module RubyAudio
|
|
36
36
|
end
|
37
37
|
|
38
38
|
alias_method :seekable?, :seekable
|
39
|
+
|
40
|
+
def main_format
|
41
|
+
calculate_format if @main_format.nil?
|
42
|
+
@main_format
|
43
|
+
end
|
44
|
+
|
45
|
+
def sub_format
|
46
|
+
calculate_format if @sub_format.nil?
|
47
|
+
@sub_format
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def calculate_format
|
52
|
+
RubyAudio.constants.grep(/FORMAT_/).each do |f|
|
53
|
+
next if f.include?('MASK') # Skip mask constants
|
54
|
+
|
55
|
+
val = RubyAudio.const_get(f)
|
56
|
+
if val > RubyAudio::FORMAT_SUBMASK
|
57
|
+
# Main format
|
58
|
+
@main_format = f if format & RubyAudio::FORMAT_TYPEMASK == val
|
59
|
+
else
|
60
|
+
# Sub format
|
61
|
+
@sub_format = f if format & RubyAudio::FORMAT_SUBMASK == val
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
39
65
|
end
|
40
66
|
end
|
data/spec/sound_info_spec.rb
CHANGED
@@ -36,4 +36,14 @@ describe RubyAudio::SoundInfo do
|
|
36
36
|
info.samplerate.should == info2.samplerate
|
37
37
|
info.format.should == info2.format
|
38
38
|
end
|
39
|
+
|
40
|
+
it "should calculate main and sub format from format" do
|
41
|
+
info = RubyAudio::SoundInfo.new(:format => RubyAudio::FORMAT_WAV|RubyAudio::FORMAT_PCM_16)
|
42
|
+
info.main_format.should == "FORMAT_WAV"
|
43
|
+
info.sub_format.should == "FORMAT_PCM_16"
|
44
|
+
|
45
|
+
info = RubyAudio::SoundInfo.new(:format => RubyAudio::FORMAT_WAVEX|RubyAudio::FORMAT_MS_ADPCM)
|
46
|
+
info.main_format.should == "FORMAT_WAVEX"
|
47
|
+
info.sub_format.should == "FORMAT_MS_ADPCM"
|
48
|
+
end
|
39
49
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-audio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 1.3.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Stephen Augenstein
|
@@ -9,7 +14,7 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-05-29 00:00:00 -04:00
|
13
18
|
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
@@ -65,18 +70,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
70
|
requirements:
|
66
71
|
- - ">="
|
67
72
|
- !ruby/object:Gem::Version
|
73
|
+
segments:
|
74
|
+
- 0
|
68
75
|
version: "0"
|
69
|
-
version:
|
70
76
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
77
|
requirements:
|
72
78
|
- - ">="
|
73
79
|
- !ruby/object:Gem::Version
|
80
|
+
segments:
|
81
|
+
- 0
|
74
82
|
version: "0"
|
75
|
-
version:
|
76
83
|
requirements:
|
77
84
|
- libsndfile (http://www.mega-nerd.com/libsndfile/)
|
78
85
|
rubyforge_project:
|
79
|
-
rubygems_version: 1.3.
|
86
|
+
rubygems_version: 1.3.6
|
80
87
|
signing_key:
|
81
88
|
specification_version: 3
|
82
89
|
summary: ruby-audio wraps around libsndfile to provide simplified sound reading and writing support to ruby programs
|