@@ -2201,16 +2201,16 @@ static int32_t tabsuma(CSOUND *csound, TABQUERY1 *p)
2201
2201
if (UNLIKELY (early )) {
2202
2202
memset (& ans [nsmps ], '\0' , early * sizeof (MYFLT ));
2203
2203
}
2204
-
2204
+
2205
2205
memcpy (ans ,& (t -> data [0 ]) + offset ,
2206
- sizeof (MYFLT )* nsmps );
2206
+ sizeof (MYFLT )* nsmps );
2207
2207
for (i = 0 ; i < t -> dimensions ; i ++ ) size += t -> sizes [i ];
2208
2208
for (i = 1 ; i < size ; i ++ ) {
2209
2209
int j , k = i * span ;
2210
2210
in = & (t -> data [k ]);
2211
- for (j = offset ; j < nsmps ; j ++ )
2211
+ for (j = offset ; j < nsmps ; j ++ )
2212
2212
ans [j ] += in [j ];
2213
- }
2213
+ }
2214
2214
return OK ;
2215
2215
}
2216
2216
@@ -3531,14 +3531,38 @@ int32_t shiftout_perf(CSOUND *csound, FFT *p) {
3531
3531
return OK ;
3532
3532
}
3533
3533
3534
- int32_t scalarset (CSOUND * csound , FFT * p ) {
3534
+ int32_t scalarset (CSOUND * csound , TABCOPY * p ) {
3535
3535
IGN (csound );
3536
- uint32_t siz = 0 , dim = p -> out -> dimensions , i ;
3537
- MYFLT val = * (( MYFLT * ) p -> in ) ;
3536
+ uint32_t siz = 0 , dim = p -> tab -> dimensions , i ;
3537
+ MYFLT val = * p -> kfn ;
3538
3538
for (i = 0 ; i < dim ; i ++ )
3539
- siz += p -> out -> sizes [i ];
3539
+ siz += p -> tab -> sizes [i ];
3540
3540
for (i = 0 ; i < siz ; i ++ )
3541
- p -> out -> data [i ] = val ;
3541
+ p -> tab -> data [i ] = val ;
3542
+ return OK ;
3543
+ }
3544
+
3545
+ int32_t arrayass (CSOUND * csound , TABCOPY * p )
3546
+ {
3547
+ IGN (csound );
3548
+ uint32_t siz = 0 , dim = p -> tab -> dimensions , i ;
3549
+ uint32_t offset = p -> h .insdshead -> ksmps_offset ;
3550
+ uint32_t early = p -> h .insdshead -> ksmps_no_end ;
3551
+ uint32_t n , nsmps = CS_KSMPS ;
3552
+ int32_t span = (p -> tab -> arrayMemberSize )/sizeof (MYFLT );
3553
+ MYFLT * val = p -> kfn ;
3554
+
3555
+ for (i = 0 ; i < dim ; i ++ )
3556
+ siz += p -> tab -> sizes [i ];
3557
+ for (i = 0 ; i < siz ; i ++ ) {
3558
+ int32_t pp = i * span ;
3559
+ for (n = 0 ; n < offset ; n ++ )
3560
+ p -> tab -> data [pp + n ] = FL (0.0 );
3561
+ for (n = offset ; n < nsmps - early ; n ++ )
3562
+ p -> tab -> data [pp + n ] = val [n ];
3563
+ for (n = nsmps - early ; n < nsmps ; n ++ )
3564
+ p -> tab -> data [pp + n ] = FL (0.0 );
3565
+ }
3542
3566
return OK ;
3543
3567
}
3544
3568
@@ -4054,9 +4078,9 @@ static OENTRY arrayvars_localops[] =
4054
4078
{ "lentab.k" , sizeof (TABQUERY1 ), _QQ , 1 , "k" , "k[]p" , NULL , (SUBR ) tablength },
4055
4079
{ "lenarray.ix" , sizeof (TABQUERY1 ), 0 , 1 , "i" , ".[]p" , (SUBR ) tablength },
4056
4080
{ "lenarray.kx" , sizeof (TABQUERY1 ), 0 , 2 , "k" , ".[]p" , NULL , (SUBR )tablength },
4057
- { "out.A" , sizeof (OUTA ), 0 , 3 ,"" , "a[]" , (SUBR )outa_set , (SUBR )outa },
4081
+ { "out.A" , sizeof (OUTA ), IR , 3 ,"" , "a[]" , (SUBR )outa_set , (SUBR )outa },
4058
4082
{ "in.A" , sizeof (OUTA ), 0 , 3 , "a[]" , "" , (SUBR )ina_set , (SUBR )ina },
4059
- { "monitor.A" , sizeof (OUTA ), 0 , 3 , "a[]" , "" ,
4083
+ { "monitor.A" , sizeof (OUTA ), IB , 3 , "a[]" , "" ,
4060
4084
(SUBR )monitora_init , (SUBR )monitora_perf },
4061
4085
{ "rfft" , sizeof (FFT ), 0 , 3 , "k[]" ,"k[]" ,
4062
4086
(SUBR ) init_rfft , (SUBR ) perf_rfft , NULL },
@@ -4128,8 +4152,9 @@ static OENTRY arrayvars_localops[] =
4128
4152
(SUBR ) shiftout_init , (SUBR ) shiftout_perf },
4129
4153
{"unwrap" , sizeof (FFT ), 0 , 3 , "k[]" ,"k[]" ,
4130
4154
(SUBR ) init_recttopol , (SUBR ) unwrap },
4131
- {"=.k" , sizeof (FFT ), 0 , 3 , "k[]" ,"k" , (SUBR ) scalarset , (SUBR ) scalarset },
4132
- {"dct" , sizeof (FFT ), 0 , 3 , "k[]" ,"k[]" ,
4155
+ {"=.X" , sizeof (TABCOPY ), 0 , 3 , "k[]" ,"k" , (SUBR ) scalarset , (SUBR ) scalarset },
4156
+ {"=.Z" , sizeof (TABCOPY ), 0 , 2 , "a[]" , "a" , NULL , (SUBR ) arrayass },
4157
+ {"dct" , sizeof (FFT ), 0 , 3 , "k[]" ,"k[]" ,
4133
4158
(SUBR ) init_dct , (SUBR ) kdct , NULL },
4134
4159
{"dct" , sizeof (FFT ), 0 , 1 , "i[]" ,"i[]" ,
4135
4160
(SUBR ) dct , NULL , NULL },
0 commit comments