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