fast_osc 0.0.5 → 0.0.6
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/README.md +13 -3
- data/Rakefile +9 -0
- data/ext/fast_osc/fast_osc_wrapper.c +27 -2
- data/fast_osc.gemspec +2 -0
- data/lib/fast_osc/version.rb +1 -1
- data/test/fast_osc_test.rb +59 -0
- data/test/test_helper.rb +5 -0
- metadata +35 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f284e9a9b81cb84245fbf2d9a1c7631fb670696d
|
4
|
+
data.tar.gz: 40f36cc032625bc34a9bd4811127fe0d1cae7c49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ca15f55e91996ed3435a378985667afe7ffe31156d257873a2d26c68cc5eb295845d025b21339233a7068abc27fc19da2f5e7e1527eb9f54bff6c77d21e1fde
|
7
|
+
data.tar.gz: 3ae9debfc8cfc11bb415ffe052c7346e161bef20e3abd1add9466d174401ebd240fe2ca7deef3f649a7d8cb63169e24fc190865a396c198a404b454d7dcd3edb
|
data/README.md
CHANGED
@@ -18,8 +18,6 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
$ gem install fast_osc
|
20
20
|
|
21
|
-
This will only work on a mac at the moment as that's what the `librtosc.a` was compiled on.
|
22
|
-
|
23
21
|
## Is it fast?
|
24
22
|
|
25
23
|
Let's see...
|
@@ -74,10 +72,22 @@ I'll include a better test in the repo in time.
|
|
74
72
|
=> "#bundle\x00\x00\x00\x00\x00W*1\x7F\x00\x00\x00\x1C/foo\x00\x00\x00\x00,sif\x00\x00\x00\x00baz\x00\x00\x00\x00\x01@\x00\x00\x00"
|
75
73
|
```
|
76
74
|
|
75
|
+
See the test suite for additional methods regarding bundles with timestamps. Bundles are only supported with a single message at present. A timestamp of `nil` is a special case meaning "immediately".
|
76
|
+
|
77
|
+
## Running the test suite
|
78
|
+
|
79
|
+
```
|
80
|
+
$ gem install minitest # or bundle install
|
81
|
+
$ rake clean && rake clobber && rake compile && rake test
|
82
|
+
```
|
83
|
+
|
77
84
|
## Still todo
|
78
85
|
|
79
86
|
* Implement more types
|
80
|
-
*
|
87
|
+
* Bring benchmarks into the repo
|
88
|
+
* Implement multi message/nested bundles
|
89
|
+
* Documentation
|
90
|
+
* Travis
|
81
91
|
|
82
92
|
## Development notes
|
83
93
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
|
3
|
+
require "rake/testtask"
|
4
|
+
Rake::TestTask.new(:test) do |t|
|
5
|
+
t.libs << "test"
|
6
|
+
t.libs << "lib"
|
7
|
+
t.test_files = FileList['test/**/*_test.rb']
|
8
|
+
end
|
9
|
+
|
10
|
+
task :default => :spec
|
11
|
+
|
3
12
|
require 'rake/extensiontask'
|
4
13
|
spec = Gem::Specification.load('fast_osc.gemspec')
|
5
14
|
Rake::ExtensionTask.new('fast_osc') do |ext|
|
@@ -166,11 +166,36 @@ VALUE method_fast_osc_encode_single_message(VALUE self, VALUE address, VALUE arg
|
|
166
166
|
return output;
|
167
167
|
}
|
168
168
|
|
169
|
-
|
169
|
+
#define JAN_1970 2208988800.0 /* 2208988800 time from 1900 to 1970 in seconds */
|
170
|
+
|
171
|
+
uint64_t ruby_time_to_osc_timetag(VALUE rubytime) {
|
172
|
+
uint64_t timetag;
|
173
|
+
double floattime;
|
174
|
+
uint32_t sec;
|
175
|
+
uint32_t frac;
|
176
|
+
|
177
|
+
switch(TYPE(rubytime)) {
|
178
|
+
case T_NIL:
|
179
|
+
timetag = 1;
|
180
|
+
break;
|
181
|
+
default:
|
182
|
+
// convert Time object to ntp
|
183
|
+
floattime = JAN_1970 + NUM2DBL(rb_funcall(rubytime, rb_intern("to_f"), 0));
|
184
|
+
|
185
|
+
sec = NUM2UINT(DBL2NUM(floattime));
|
186
|
+
frac = (int)(fmod(floattime, 1.0) * 4294967296); // * (2 ** 32)
|
187
|
+
timetag = (uint64_t)((uint64_t)sec << 32 | (uint64_t)frac);
|
188
|
+
break;
|
189
|
+
}
|
190
|
+
|
191
|
+
return timetag;
|
192
|
+
}
|
193
|
+
|
194
|
+
VALUE method_fast_osc_encode_single_bundle(VALUE self, VALUE timetag, VALUE address, VALUE args) {
|
170
195
|
VALUE message = method_fast_osc_encode_single_message(self, address, args);
|
171
196
|
int bufsize = buffer_size_for_ruby_string(message) + 16;
|
172
197
|
int no_of_elems = 1;
|
173
|
-
uint64_t tt =
|
198
|
+
uint64_t tt = ruby_time_to_osc_timetag(timetag);
|
174
199
|
char output_buffer[bufsize];
|
175
200
|
|
176
201
|
int len = rtosc_bundle(output_buffer, bufsize, tt, no_of_elems, StringValuePtr(message));
|
data/fast_osc.gemspec
CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.5"
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "rake-compiler"
|
26
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
27
|
+
spec.add_development_dependency "osc-ruby", "~> 1.1.1"
|
26
28
|
end
|
data/lib/fast_osc/version.rb
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'osc-ruby'
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
class FastOscTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@path = "/thisisatest"
|
8
|
+
@args = [1, 2.0, "baz"]
|
9
|
+
@timestamp = Date.parse("1st Jan 1990").to_time
|
10
|
+
|
11
|
+
@msg1 = OSC::Message.new(@path, *@args).encode
|
12
|
+
@encoded_msg1 = @msg1.encode
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_that_it_has_a_version_number
|
16
|
+
refute_nil ::FastOsc::VERSION
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_that_it_encodes_a_single_message
|
20
|
+
msg = FastOsc.encode_single_message(@path, @args)
|
21
|
+
|
22
|
+
assert msg == @encoded_msg1
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_that_it_decodes_a_single_message
|
26
|
+
path, args = FastOsc.decode_single_message(@encoded_msg1)
|
27
|
+
|
28
|
+
assert path == @path
|
29
|
+
assert args == @args
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_that_it_encodes_a_single_bundle
|
33
|
+
bundle1 = OSC::Bundle.new(@timestamp, @msg1).encode
|
34
|
+
bundle2 = FastOsc.encode_single_bundle(@timestamp, @path, @args)
|
35
|
+
|
36
|
+
assert_equal bundle1, bundle2
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_that_it_encodes_a_single_bundle_with_fractional_time
|
40
|
+
bundle1 = OSC::Bundle.new(@timestamp + 0.33, @msg1).encode
|
41
|
+
bundle2 = FastOsc.encode_single_bundle(@timestamp + 0.33, @path, @args)
|
42
|
+
|
43
|
+
assert_equal bundle1, bundle2
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_that_it_encodes_a_single_bundle_with_fractional_time
|
47
|
+
bundle1 = OSC::Bundle.new(@timestamp + 0.3343215, @msg1).encode
|
48
|
+
bundle2 = FastOsc.encode_single_bundle(@timestamp + 0.3343215, @path, @args)
|
49
|
+
|
50
|
+
assert_equal bundle1, bundle2
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_that_it_encodes_a_single_bundle_with_special_immediate_time
|
54
|
+
bundle1 = OSC::Bundle.new(nil, @msg1).encode
|
55
|
+
bundle2 = FastOsc.encode_single_bundle(nil, @path, @args)
|
56
|
+
|
57
|
+
assert_equal bundle1, bundle2
|
58
|
+
end
|
59
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_osc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xavier Riley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: osc-ruby
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.1.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.1.1
|
55
83
|
description: Serialize and deserialize Open Sound Control messages using rtosc
|
56
84
|
email:
|
57
85
|
- xavriley@hotmail.com
|
@@ -72,6 +100,8 @@ files:
|
|
72
100
|
- fast_osc.gemspec
|
73
101
|
- lib/fast_osc.rb
|
74
102
|
- lib/fast_osc/version.rb
|
103
|
+
- test/fast_osc_test.rb
|
104
|
+
- test/test_helper.rb
|
75
105
|
homepage: https://github.com/xavriley/fast_osc
|
76
106
|
licenses:
|
77
107
|
- MIT
|
@@ -97,4 +127,6 @@ rubygems_version: 2.4.6
|
|
97
127
|
signing_key:
|
98
128
|
specification_version: 4
|
99
129
|
summary: Serialize and deserialize Open Sound Control messages
|
100
|
-
test_files:
|
130
|
+
test_files:
|
131
|
+
- test/fast_osc_test.rb
|
132
|
+
- test/test_helper.rb
|