7 struct graphpin
*in_pin
, *out_pin
;
11 static bool is_acceptable_input_format(struct graphnode
*node
, struct graphpin
*pin
, const struct aformat
*af
)
13 return af
->media
== MT_AUDIO_32F
;
16 static err_t
get_ideal_input_format(struct graphnode
*node
, struct graphpin
*pin
, struct aformat
*af
)
18 af
->media
= MT_AUDIO_32F
;
24 static err_t
run(struct graphnode
*node
)
26 struct ringmod
*rm
= node
->extra
;
27 float *src
, *dest
, pos
;
31 err
= buffer_alloc(&rm
->out_pin
->edge
->buf
, rm
->in_pin
->edge
->buf
.n_samples
);
36 src
= rm
->in_pin
->edge
->buf
.data
;
37 dest
= rm
->out_pin
->edge
->buf
.data
;
40 for (i
= rm
->in_pin
->edge
->buf
.n_samples
* rm
->in_pin
->edge
->buf
.format
.channels
;
42 *dest
= *src
* cos((pos
* M_PI
* 2) / 441.0);
51 static const struct graphnode_functab functab
= {
52 is_acceptable_input_format
,
53 get_ideal_input_format
,
54 NULL
, // set_output_format
59 err_t
ringmod_create(struct graphnode
**node_out
)
61 struct graphnode
*node
;
62 struct ringmod
*restrict rm
;
65 err
= graphnode_create(&node
, &functab
, sizeof *rm
);
73 err
= graphnode_add_pin(node
, &rm
->in_pin
);
78 rm
->in_pin
->dir
= DIR_IN
;
79 rm
->in_pin
->name
= "in";
81 err
= graphnode_add_pin(node
, &rm
->out_pin
);
86 rm
->out_pin
->dir
= DIR_OUT
;
87 rm
->out_pin
->name
= "out";