~pbatch/soundpipe

soundpipe/modules/fmpair.c -rw-r--r-- 1.2 KiB
0f9bc249Paul Batchelor added sp_phasor_reset 5 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* this file is placed in the public domain */

#include <stdlib.h>
#include <math.h>
#include <stdint.h>
#define SK_FMPAIR_PRIV
#include "tangled/fmpair.h"
#include "soundpipe.h"

int sp_fmpair_create(sp_fmpair **p)
{
    *p = malloc(sizeof(sp_fmpair));
    return SP_OK;
}

int sp_fmpair_destroy(sp_fmpair **p)
{
    sp_fmpair *pp;
    pp = *p;
    free(pp->fmpair);
    free(*p);
    return SP_OK;
}

int sp_fmpair_init(sp_data *sp, sp_fmpair *p, sp_ftbl *ft)
{
    p->fmpair = malloc(sizeof(sk_fmpair));
    sk_fmpair_init(p->fmpair, sp->sr,
                   ft->tbl, ft->size, 0,
                   ft->tbl, ft->size, 0);

    p->mod = 1.0;
    p->car = 1.0;
    p->indx = 1.0;
    p->amp = 0.4;
    p->freq = 440;

    sk_fmpair_freq(p->fmpair, p->freq);
    sk_fmpair_modulator(p->fmpair, p->mod);
    sk_fmpair_carrier(p->fmpair, p->car);
    sk_fmpair_modindex(p->fmpair, p->indx);
    return SP_OK;
}

int sp_fmpair_compute(sp_data *sp, sp_fmpair *p,
                      SPFLOAT *in, SPFLOAT *out)
{
    sk_fmpair_freq(p->fmpair, p->freq);
    sk_fmpair_modulator(p->fmpair, p->mod);
    sk_fmpair_carrier(p->fmpair, p->car);
    sk_fmpair_modindex(p->fmpair, p->indx);
    *out = sk_fmpair_tick(p->fmpair) * p->amp;
    return SP_OK;
}