1 #include "soundpipe.h"
2 #include "md5.h"
3 #include "tap.h"
4 #include "test.h"
5
6 #define NOSC 5
7
8 typedef struct {
9 sp_talkbox *talkbox;
10 sp_blsaw *saw[NOSC];
11 sp_diskin *diskin;
12 } UserData;
13
14 static int chord[] = {48, 51, 55, 60, 70};
15
process(sp_data * sp,void * udata)16 static SPFLOAT process(sp_data *sp, void *udata) {
17 UserData *ud = udata;
18 SPFLOAT tmp;
19 int i;
20 SPFLOAT src = 0;
21 SPFLOAT exc = 0;
22 SPFLOAT talkbox = 0;
23
24 exc = 0;
25 for(i = 0; i < NOSC; i++) {
26 sp_blsaw_compute(sp, ud->saw[i], NULL, &tmp);
27 exc += tmp;
28 }
29 sp_diskin_compute(sp, ud->diskin, NULL, &src);
30 src *= 0.5;
31 sp_talkbox_compute(sp, ud->talkbox, &src, &exc, &talkbox);
32 return talkbox;
33 }
34
t_talkbox(sp_test * tst,sp_data * sp,const char * hash)35 int t_talkbox(sp_test *tst, sp_data *sp, const char *hash)
36 {
37 uint32_t n;
38 UserData ud;
39 int fail = 0;
40 int i;
41 SPFLOAT tmp;
42
43 /* allocate / initialize modules here */
44 sp_srand(sp, 1234567);
45
46 sp_diskin_create(&ud.diskin);
47 sp_talkbox_create(&ud.talkbox);
48 sp_talkbox_init(sp, ud.talkbox);
49 ud.talkbox->quality = 0.2;
50
51 for(i = 0; i < NOSC; i++) {
52 sp_blsaw_create(&ud.saw[i]);
53 sp_blsaw_init(sp, ud.saw[i]);
54 *ud.saw[i]->freq = sp_midi2cps(chord[i]);
55 *ud.saw[i]->amp = 0.1;
56 }
57
58 sp_diskin_init(sp, ud.diskin, SAMPDIR "oneart.wav");
59
60
61 for(n = 0; n < tst->size; n++) {
62 tmp = process(sp, &ud);
63 sp_test_add_sample(tst, tmp);
64 }
65
66 fail = sp_test_verify(tst, hash);
67
68 sp_talkbox_destroy(&ud.talkbox);
69 for(i = 0; i < NOSC; i ++) {
70 sp_blsaw_destroy(&ud.saw[i]);
71 }
72 sp_diskin_destroy(&ud.diskin);
73
74 if(fail) return SP_NOT_OK;
75 else return SP_OK;
76 }
77