vdsp 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|