vdsp 1.7.0 → 1.8.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.
- checksums.yaml +4 -4
- data/ext/vdsp/vdsp.c +156 -7
- data/lib/vdsp/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a9bf55ee5ee1699cdd8b6c0ccba7b2a56de452e49a1baf748b446c80c3c2eae
|
4
|
+
data.tar.gz: a3c3fc40011f79420eec38be24a689db3648915a2fadba7c7e05c5013ec37e85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fad7199ff86511a3c3155ed0719fb9240a8fbce9b858694a15186c54b1aabe65a8537a4aa61715a883d7099a8e1321728d0e29f74bd3aa517022d98093dccc35
|
7
|
+
data.tar.gz: 22ef33d7cdb7fbb4dfb59333d58144b01dd0d9efc230eec3736dfa5d5967ed8baaeb14f8ff6f82c964bad5101ad8e8da1c9234bc1cf6b0c247a6ac0339c1ea58
|
data/ext/vdsp/vdsp.c
CHANGED
@@ -423,6 +423,100 @@ VALUE rb_double_array_coerce(VALUE self, VALUE other)
|
|
423
423
|
return rb_assoc_new(other, self);
|
424
424
|
}
|
425
425
|
|
426
|
+
VALUE rb_double_array_slice(int argc, const VALUE *argv, VALUE self)
|
427
|
+
{
|
428
|
+
rb_check_arity(argc, 1, 2);
|
429
|
+
|
430
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
431
|
+
long alen = _a->length;
|
432
|
+
|
433
|
+
long beg = 0;
|
434
|
+
long len = 0;
|
435
|
+
|
436
|
+
if (argc==2) {
|
437
|
+
beg = NUM2LONG(argv[0]);
|
438
|
+
len = NUM2LONG(argv[1]);
|
439
|
+
} else if (FIXNUM_P(argv[0])){
|
440
|
+
len = FIX2LONG(argv[0]);
|
441
|
+
} else {
|
442
|
+
switch (rb_range_beg_len(argv[0], &beg, &len, alen, 0)) {
|
443
|
+
case Qfalse:
|
444
|
+
case Qnil:
|
445
|
+
return Qnil;
|
446
|
+
default:
|
447
|
+
break;
|
448
|
+
}
|
449
|
+
}
|
450
|
+
|
451
|
+
if (beg > alen) return Qnil;
|
452
|
+
if (beg < 0 || len < 0) return Qnil;
|
453
|
+
|
454
|
+
if (alen < len || alen < beg + len) {
|
455
|
+
len = alen - beg;
|
456
|
+
}
|
457
|
+
|
458
|
+
VALUE lenv = LONG2NUM(len);
|
459
|
+
VALUE c = rb_class_new_instance(1, &lenv, rb_cDoubleArray);
|
460
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
461
|
+
memcpy(_c->v.d, _a->v.d+beg, sizeof(double) * len);
|
462
|
+
|
463
|
+
return c;
|
464
|
+
}
|
465
|
+
|
466
|
+
void double_array_resize(VdspArrayNativeResource *_a, unsigned long len)
|
467
|
+
{
|
468
|
+
if (_a->length!=len) {
|
469
|
+
void *new_v = realloc(_a->v.ptr, (_a->length + len) * sizeof(double));
|
470
|
+
if (!new_v) {
|
471
|
+
rb_raise(rb_eRuntimeError, "memory allocation error");
|
472
|
+
}
|
473
|
+
_a->v.ptr = new_v;
|
474
|
+
|
475
|
+
if (_a->length<len) {
|
476
|
+
memset(_a->v.d+_a->length, 0, (len-_a->length) * sizeof(double));
|
477
|
+
}
|
478
|
+
}
|
479
|
+
}
|
480
|
+
|
481
|
+
VALUE rb_double_array_resize(VALUE self, VALUE size)
|
482
|
+
{
|
483
|
+
unsigned long len = NUM2LONG(size);
|
484
|
+
|
485
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
486
|
+
double_array_resize(_a, len);
|
487
|
+
_a->length = len;
|
488
|
+
|
489
|
+
return self;
|
490
|
+
}
|
491
|
+
|
492
|
+
VALUE rb_double_array_concat(int argc, const VALUE *argv, VALUE self)
|
493
|
+
{
|
494
|
+
rb_check_frozen(self);
|
495
|
+
|
496
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
497
|
+
VdspArrayNativeResource *_argv[argc];
|
498
|
+
|
499
|
+
unsigned long len = _a->length;
|
500
|
+
unsigned long new_len = len;
|
501
|
+
for (long i=0; i<argc; i++) {
|
502
|
+
VALUE arg = rb_funcall(argv[i], rb_intern("to_da"), 0);
|
503
|
+
_argv[i] = get_vdsp_array_native_resource(arg);
|
504
|
+
new_len += _argv[i]->length;
|
505
|
+
}
|
506
|
+
|
507
|
+
double_array_resize(_a, new_len);
|
508
|
+
|
509
|
+
new_len = len;
|
510
|
+
for (long i=0; i<argc; i++) {
|
511
|
+
VdspArrayNativeResource *_b = _argv[i];
|
512
|
+
memcpy(_a->v.d+new_len, _b->v.d, _b->length * sizeof(double));
|
513
|
+
new_len += _b->length;
|
514
|
+
}
|
515
|
+
_a->length = new_len;
|
516
|
+
|
517
|
+
return self;
|
518
|
+
}
|
519
|
+
|
426
520
|
VALUE rb_double_array_abs(VALUE self)
|
427
521
|
{
|
428
522
|
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
@@ -517,7 +611,7 @@ VALUE rb_double_array_vgen(VALUE cls, VALUE a, VALUE b, VALUE n)
|
|
517
611
|
return c;
|
518
612
|
}
|
519
613
|
|
520
|
-
VALUE rb_double_array_blkman_window(int argc, VALUE *argv, VALUE cls)
|
614
|
+
VALUE rb_double_array_blkman_window(int argc, const VALUE *argv, VALUE cls)
|
521
615
|
{
|
522
616
|
if (argc<1 || 2<argc) {
|
523
617
|
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 1..2)", argc);
|
@@ -538,7 +632,7 @@ VALUE rb_double_array_blkman_window(int argc, VALUE *argv, VALUE cls)
|
|
538
632
|
return c;
|
539
633
|
}
|
540
634
|
|
541
|
-
VALUE rb_double_array_hamm_window(int argc, VALUE *argv, VALUE cls)
|
635
|
+
VALUE rb_double_array_hamm_window(int argc, const VALUE *argv, VALUE cls)
|
542
636
|
{
|
543
637
|
if (argc<1 || 2<argc) {
|
544
638
|
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 1..2)", argc);
|
@@ -559,7 +653,7 @@ VALUE rb_double_array_hamm_window(int argc, VALUE *argv, VALUE cls)
|
|
559
653
|
return c;
|
560
654
|
}
|
561
655
|
|
562
|
-
VALUE rb_double_array_hann_window(int argc, VALUE *argv, VALUE cls)
|
656
|
+
VALUE rb_double_array_hann_window(int argc, const VALUE *argv, VALUE cls)
|
563
657
|
{
|
564
658
|
if (argc<1 || 2<argc) {
|
565
659
|
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 1..2)", argc);
|
@@ -1364,7 +1458,7 @@ VALUE rb_double_vsmsma(
|
|
1364
1458
|
}
|
1365
1459
|
|
1366
1460
|
// e[i] = (a[i] + b[i]) * (c[i] + d[i])
|
1367
|
-
VALUE rb_double_vaam(int argc, VALUE *argv, VALUE cls)
|
1461
|
+
VALUE rb_double_vaam(int argc, const VALUE *argv, VALUE cls)
|
1368
1462
|
{
|
1369
1463
|
if (argc!=16) {
|
1370
1464
|
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
@@ -1412,7 +1506,7 @@ VALUE rb_double_vaam(int argc, VALUE *argv, VALUE cls)
|
|
1412
1506
|
}
|
1413
1507
|
|
1414
1508
|
// e[i] = (a[i] * b[i]) - (c[i] * d[i])
|
1415
|
-
VALUE rb_double_vmmsb(int argc, VALUE *argv, VALUE cls)
|
1509
|
+
VALUE rb_double_vmmsb(int argc, const VALUE *argv, VALUE cls)
|
1416
1510
|
{
|
1417
1511
|
if (argc!=16) {
|
1418
1512
|
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
@@ -1460,7 +1554,7 @@ VALUE rb_double_vmmsb(int argc, VALUE *argv, VALUE cls)
|
|
1460
1554
|
}
|
1461
1555
|
|
1462
1556
|
// e[i] = (a[i] - b[i]) * (c[i] - d[i])
|
1463
|
-
VALUE rb_double_vsbsbm(int argc, VALUE *argv, VALUE cls)
|
1557
|
+
VALUE rb_double_vsbsbm(int argc, const VALUE *argv, VALUE cls)
|
1464
1558
|
{
|
1465
1559
|
if (argc!=16) {
|
1466
1560
|
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
@@ -1508,7 +1602,7 @@ VALUE rb_double_vsbsbm(int argc, VALUE *argv, VALUE cls)
|
|
1508
1602
|
}
|
1509
1603
|
|
1510
1604
|
// e[i] = (a[i] + b[i]) * (c[i] - d[i])
|
1511
|
-
VALUE rb_double_vasbm(int argc, VALUE *argv, VALUE cls)
|
1605
|
+
VALUE rb_double_vasbm(int argc, const VALUE *argv, VALUE cls)
|
1512
1606
|
{
|
1513
1607
|
if (argc!=16) {
|
1514
1608
|
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
@@ -2141,6 +2235,54 @@ VALUE rb_double_svs(
|
|
2141
2235
|
return DBL2NUM(_c);
|
2142
2236
|
}
|
2143
2237
|
|
2238
|
+
VALUE rb_double_vswap(
|
2239
|
+
VALUE cls,
|
2240
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
2241
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
2242
|
+
VALUE n)
|
2243
|
+
{
|
2244
|
+
VdspArrayParam _a;
|
2245
|
+
VdspArrayParam _b;
|
2246
|
+
|
2247
|
+
array_param(&_a, a, a_offset, a_stride);
|
2248
|
+
array_param(&_b, b, b_offset, b_stride);
|
2249
|
+
vDSP_Length _n = NUM2LONG(n);
|
2250
|
+
|
2251
|
+
vDSP_vswapD(
|
2252
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
2253
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
2254
|
+
_n
|
2255
|
+
);
|
2256
|
+
|
2257
|
+
return rb_ary_new3(2, a, b);
|
2258
|
+
}
|
2259
|
+
|
2260
|
+
VALUE rb_double_vtmerg(
|
2261
|
+
VALUE cls,
|
2262
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
2263
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
2264
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
2265
|
+
VALUE n)
|
2266
|
+
{
|
2267
|
+
VdspArrayParam _a;
|
2268
|
+
VdspArrayParam _b;
|
2269
|
+
VdspArrayParam _c;
|
2270
|
+
|
2271
|
+
array_param(&_a, a, a_offset, a_stride);
|
2272
|
+
array_param(&_b, b, b_offset, b_stride);
|
2273
|
+
array_param(&_c, c, c_offset, c_stride);
|
2274
|
+
vDSP_Length _n = NUM2LONG(n);
|
2275
|
+
|
2276
|
+
vDSP_vtmergD(
|
2277
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
2278
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
2279
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
2280
|
+
_n
|
2281
|
+
);
|
2282
|
+
|
2283
|
+
return c;
|
2284
|
+
}
|
2285
|
+
|
2144
2286
|
VALUE rb_double_biquad(
|
2145
2287
|
VALUE cls,
|
2146
2288
|
VALUE biquad,
|
@@ -2460,6 +2602,9 @@ void Init_vdsp()
|
|
2460
2602
|
rb_define_method(rb_cDoubleArray, "each", rb_double_array_each, 0);
|
2461
2603
|
rb_define_method(rb_cDoubleArray, "to_a", rb_double_array_get_values, 0);
|
2462
2604
|
rb_define_method(rb_cDoubleArray, "coerce", rb_double_array_coerce, 1);
|
2605
|
+
rb_define_method(rb_cDoubleArray, "slice", rb_double_array_slice, -1);
|
2606
|
+
rb_define_method(rb_cDoubleArray, "resize", rb_double_array_resize, 1);
|
2607
|
+
rb_define_method(rb_cDoubleArray, "concat", rb_double_array_concat, -1);
|
2463
2608
|
rb_define_method(rb_cDoubleArray, "abs", rb_double_array_abs, 0);
|
2464
2609
|
rb_define_method(rb_cDoubleArray, "abs!", rb_double_array_abs_bang, 0);
|
2465
2610
|
rb_define_method(rb_cDoubleArray, "nabs", rb_double_array_nabs, 0);
|
@@ -2578,6 +2723,10 @@ void Init_vdsp()
|
|
2578
2723
|
rb_define_singleton_method(rb_mUnsafeDouble, "sve_svesq", rb_double_sve_svesq, 4);
|
2579
2724
|
rb_define_singleton_method(rb_mUnsafeDouble, "svs", rb_double_svs, 4);
|
2580
2725
|
|
2726
|
+
// Vdsp::UnsafeDouble Copying, Element Swapping, and Merging Functions
|
2727
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vswap", rb_double_vswap, 7);
|
2728
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vtmerg", rb_double_vtmerg, 10);
|
2729
|
+
|
2581
2730
|
// Vdsp::UnsafeDouble Biquadratic IIR Filters
|
2582
2731
|
rb_define_singleton_method(rb_mUnsafeDouble, "biquad", rb_double_biquad, 8);
|
2583
2732
|
|
data/lib/vdsp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vdsp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshida Tetsuya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|