fast_osc 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/fast_osc/fast_osc_wrapper.c +16 -3
- data/lib/fast_osc/version.rb +1 -1
- data/test/fast_osc_test.rb +28 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 268fcf3a70da8309727ef032b0434db61b8e6e23
|
4
|
+
data.tar.gz: 3df91b74cce13e82a908aadcd9f951bbb2ff39ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68be3a880de29bfe9e0d4870389cb75bb8f3c92a4dc174bb0ffe918ff5545525d9d08fa42d71aaa7f579ae37de49821aa48b7ad147a731fc780292f01752f426
|
7
|
+
data.tar.gz: 97ad3ab5853cbfa9424a16611e4c0a2a15198fdccbff61de897543f534cacc30d10401fad8be3044eeda41174ce4feaf9ea01bcf38e74182aa3b72f6e2d99704
|
@@ -118,7 +118,7 @@ VALUE method_fast_osc_encode_single_message(int argc, VALUE* argv, VALUE self) {
|
|
118
118
|
int no_of_args = NUM2INT(LONG2NUM(RARRAY_LEN(args)));
|
119
119
|
int i;
|
120
120
|
int max_buffer_size = 0;
|
121
|
-
VALUE current_arg;
|
121
|
+
VALUE current_arg, strval;
|
122
122
|
|
123
123
|
//output tags and args list
|
124
124
|
VALUE tagstring = rb_str_new2(""); //rtosc will handle comma
|
@@ -154,6 +154,16 @@ VALUE method_fast_osc_encode_single_message(int argc, VALUE* argv, VALUE self) {
|
|
154
154
|
rb_str_concat(tagstring, rb_str_new2("s"));
|
155
155
|
output_args[i].s = StringValueCStr(current_arg);
|
156
156
|
break;
|
157
|
+
case T_SYMBOL:
|
158
|
+
// now align to 4 byte boundary for sizing output buffer
|
159
|
+
strval = rb_sym_to_s(current_arg);
|
160
|
+
max_buffer_size += buffer_size_for_ruby_string(strval);
|
161
|
+
|
162
|
+
// encode as a string because not all implementation understand S as
|
163
|
+
// alternative string tag
|
164
|
+
rb_str_concat(tagstring, rb_str_new2("s"));
|
165
|
+
output_args[i].s = StringValueCStr(strval);
|
166
|
+
break;
|
157
167
|
}
|
158
168
|
}
|
159
169
|
|
@@ -200,9 +210,12 @@ uint64_t ruby_time_to_osc_timetag(VALUE rubytime) {
|
|
200
210
|
// convert Time object to ntp
|
201
211
|
floattime = JAN_1970 + NUM2DBL(rb_funcall(rubytime, rb_intern("to_f"), 0));
|
202
212
|
|
203
|
-
sec =
|
204
|
-
frac = (
|
213
|
+
sec = floor(floattime);
|
214
|
+
frac = (uint32_t)(fmod(floattime, 1.0) * 4294967296); // * (2 ** 32)
|
215
|
+
/* printf("\nsec: %04x\n", sec); */
|
216
|
+
/* printf("\nfrac: %04x\n", frac); */
|
205
217
|
timetag = (uint64_t)((uint64_t)sec << 32 | (uint64_t)frac);
|
218
|
+
/* printf("\ntimetag: %08llx\n", timetag); */
|
206
219
|
break;
|
207
220
|
}
|
208
221
|
|
data/lib/fast_osc/version.rb
CHANGED
data/test/fast_osc_test.rb
CHANGED
@@ -5,7 +5,7 @@ require 'date'
|
|
5
5
|
class FastOscTest < Minitest::Test
|
6
6
|
def setup
|
7
7
|
@path = "/thisisatest"
|
8
|
-
@args = ["", 1, 2.0, "baz"
|
8
|
+
@args = ["", 1, 2.0, "baz"]
|
9
9
|
@timestamp = Date.parse("1st Jan 1990").to_time
|
10
10
|
|
11
11
|
@msg0 = OSC::Message.new(@path).encode
|
@@ -64,4 +64,31 @@ class FastOscTest < Minitest::Test
|
|
64
64
|
|
65
65
|
assert_equal bundle1, bundle2
|
66
66
|
end
|
67
|
+
|
68
|
+
def test_that_it_encodes_and_decodes_messages_with_symbols
|
69
|
+
path = "/s_new"
|
70
|
+
args = ["sonic-pi-basic_mixer", 10, 0, 2, :amp, 1, :amp_slide, 0.1, :amp_slide_shape, 1, :amp_slide_curve, 0, "in_bus", 12, "amp", 0.3 , "out_bus", 10]
|
71
|
+
outpath, outargs = FastOsc.decode_single_message(FastOsc.encode_single_message(path, args))
|
72
|
+
|
73
|
+
assert_equal path, outpath
|
74
|
+
# normalize symbols to strings, round floats to 5 places
|
75
|
+
assert_equal args.map {|x| x.is_a?(Symbol) ? x.to_s : x}, outargs.map {|x| x.is_a?(Float) ? x.round(5) : x }
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_that_encoded_timestamps_line_up
|
79
|
+
# this test is a bit convoluted but I found that fractional
|
80
|
+
# seconds weren't working when I plugged this into Sonic Pi
|
81
|
+
# This test ensures that the timestamp encoding matches to
|
82
|
+
# at least a tolerance of 0.001 seconds which should catch any
|
83
|
+
# major issues.
|
84
|
+
start = Time.at(1463234577.4387462) - 1.0
|
85
|
+
# assert_in_delta is 0.001 by default
|
86
|
+
assert_in_delta 1.25, Time.at(OSC::OSCPacket.messages_from_network(FastOsc.encode_single_bundle(1463234577.688746, "/foo", []), []).first.time - 2208988800) - start
|
87
|
+
assert_in_delta 1.5, Time.at(OSC::OSCPacket.messages_from_network(FastOsc.encode_single_bundle(1463234577.9387462, "/foo", []), []).first.time - 2208988800) - start
|
88
|
+
assert_in_delta 1.75, Time.at(OSC::OSCPacket.messages_from_network(FastOsc.encode_single_bundle(1463234578.188746, "/foo", []), []).first.time - 2208988800) - start
|
89
|
+
assert_in_delta 2.0, Time.at(OSC::OSCPacket.messages_from_network(FastOsc.encode_single_bundle(1463234578.4387462, "/foo", []), []).first.time - 2208988800) - start
|
90
|
+
assert_in_delta 2.25, Time.at(OSC::OSCPacket.messages_from_network(FastOsc.encode_single_bundle(1463234578.688746, "/foo", []), []).first.time - 2208988800) - start
|
91
|
+
assert_in_delta 2.5, Time.at(OSC::OSCPacket.messages_from_network(FastOsc.encode_single_bundle(1463234578.9387462, "/foo", []), []).first.time - 2208988800) - start
|
92
|
+
assert_in_delta 2.75, Time.at(OSC::OSCPacket.messages_from_network(FastOsc.encode_single_bundle(1463234579.188746, "/foo", []), []).first.time - 2208988800) - start
|
93
|
+
end
|
67
94
|
end
|
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.9
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|