update gen draft

This commit is contained in:
2022-09-11 00:26:27 +02:00
parent 701e914e84
commit d2bee30dd4
4 changed files with 1545 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
/*
* Copyright 2022 Oleg Borodin <borodin@unix7.org>
*/
#include <stdio.h>
#include <stdint.h>
#include <mixer.h>
void mixer_init(mixer_t* mix) {
for (int i = 0; i < ICOUNT; i++) {
mix->i[i] = NULL;
}
for (int i = 0; i < OCOUNT; i++) {
mix->o[i] = NULL;
}
for (int i = 0; i < RCOUNT; i++) {
mix->r[i].i = -1;
mix->r[i].o = -1;
mix->r[i].k = 0.0;
}
}
void mixer_iset(mixer_t* mix, int n, double* i) {
mix->i[n] = i;
}
void mixer_oset(mixer_t* mix, int n, double* o) {
mix->o[n] = o;
}
void mixer_rset(mixer_t* mix, int n, int i, int o, double k) {
mix->r[n].i = i;
mix->r[n].o = o;
mix->r[n].k = k;
}
void mixer_apply(mixer_t* mix) {
for (int ridx = 0; ridx < RCOUNT; ridx++) {
int oidx = mix->r[ridx].o;
if (oidx < 0) continue;
if (mix->o[oidx] == NULL) continue;
*(mix->o[oidx]) = 0.0;
}
for (int ridx = 0; ridx < RCOUNT; ridx++) {
int iidx = mix->r[ridx].i;
int oidx = mix->r[ridx].o;
if (iidx < 0) continue;
if (oidx < 0) continue;
if (mix->i[iidx] == NULL) continue;
if (mix->o[oidx] == NULL) continue;
*(mix->o[oidx]) += *(mix->i[iidx]) * mix->r[ridx].k;
}
}
+38
View File
@@ -0,0 +1,38 @@
/*
* Copyright 2022 Oleg Borodin <borodin@unix7.org>
*/
#ifndef MIXER_H_QWERTY
#define MIXER_H_QWERTY
#include <stdio.h>
#include <stdint.h>
#define ICOUNT 16
#define OCOUNT 16
#define RCOUNT 16
typedef struct {
int i;
int o;
double k;
} rule_t;
typedef struct {
double* i[ICOUNT];
double* o[OCOUNT];
rule_t r[RCOUNT];
} mixer_t;
void mixer_init(mixer_t* mix);
void mixer_iset(mixer_t* mix, int n, double* i);
void mixer_oset(mixer_t* mix, int n, double* o);
void mixer_rset(mixer_t* mix, int n, int i, int o, double k);
void mixer_apply(mixer_t* mix);
#endif