mirror of https://github.com/probonopd/MiniDexed
parent
cefff4799b
commit
0124b248dc
@ -1,148 +0,0 @@ |
||||
// Taken from https://github.com/manicken/Audio/tree/templateMixer
|
||||
// Adapted for MiniDexed by Holger Wirtz <dcoredump@googlemail.com>
|
||||
|
||||
#include <cstdlib> |
||||
#include <stdint.h> |
||||
#include <assert.h> |
||||
#include "arm_math.h" |
||||
#include "effect_mixer.h" |
||||
|
||||
template <int NN> AudioMixer<NN>::AudioMixer(uint16_t len) |
||||
{ |
||||
buffer_length=len; |
||||
for (uint8_t i=0; i<NN; i++) |
||||
multiplier[i] = UNITY_GAIN; |
||||
|
||||
sumbufL=(float32_t*)malloc(sizeof(float32_t) * buffer_length); |
||||
arm_fill_f32(0.0, sumbufL, len); |
||||
} |
||||
|
||||
template <int NN> void AudioMixer<NN>::gain(uint8_t channel, float32_t gain) |
||||
{ |
||||
if (channel >= NN) return; |
||||
|
||||
if (gain > MAX_GAIN) |
||||
gain = MAX_GAIN; |
||||
else if (gain < MIN_GAIN) |
||||
gain = MIN_GAIN; |
||||
multiplier[channel] = gain; |
||||
} |
||||
|
||||
template <int NN> void AudioMixer<NN>::gain(float32_t gain) |
||||
{ |
||||
for (uint8_t i = 0; i < NN; i++) |
||||
{ |
||||
if (gain > MAX_GAIN) |
||||
gain = MAX_GAIN; |
||||
else if (gain < MIN_GAIN) |
||||
gain = MIN_GAIN; |
||||
multiplier[i] = gain; |
||||
}
|
||||
} |
||||
|
||||
template <int NN> void AudioMixer<NN>::doAddMix(uint8_t channel, float32_t* in) |
||||
{ |
||||
float32_t* tmp=malloc(sizeof(float32_t)*buffer_length); |
||||
|
||||
assert(tmp!=NULL); |
||||
assert(in); |
||||
|
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(in,multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufL, tmp, sumbufL, buffer_length); |
||||
|
||||
free(tmp); |
||||
} |
||||
|
||||
template <int NN> void AudioMixer<NN>::getMix(float32_t* buffer) |
||||
{ |
||||
assert(buffer); |
||||
assert(sumbufL); |
||||
arm_copy_f32(sumbufL, buffer, buffer_length); |
||||
|
||||
if(sumbufL) |
||||
arm_fill_f32(0.0, sumbufL, buffer_length); |
||||
} |
||||
|
||||
template <int NN> AudioStereoMixer<NN>::AudioStereoMixer(uint16_t len) : AudioMixer<NN>(len) |
||||
{ |
||||
buffer_length=len; |
||||
for (uint8_t i=0; i<NN; i++) |
||||
panorama[i] = UNITY_PANORAMA; |
||||
|
||||
sumbufR=(float32_t*)malloc(sizeof(float32_t) * buffer_length); |
||||
arm_fill_f32(0.0, sumbufR, buffer_length); |
||||
} |
||||
|
||||
template <int NN> void AudioStereoMixer<NN>::pan(uint8_t channel, float32_t pan) |
||||
{ |
||||
if (channel >= NN) return; |
||||
|
||||
if (pan > MAX_PANORAMA) |
||||
pan = MAX_PANORAMA; |
||||
else if (pan < MIN_PANORAMA) |
||||
pan = MIN_PANORAMA; |
||||
panorama[channel] = pan; |
||||
} |
||||
|
||||
template <int NN> void AudioStereoMixer<NN>::doAddMix(uint8_t channel, float32_t* in) |
||||
{ |
||||
float32_t* tmp=malloc(sizeof(float32_t)*buffer_length); |
||||
|
||||
assert(tmp!=NULL); |
||||
assert(in); |
||||
|
||||
// left
|
||||
arm_scale_f32(in, 1.0f-panorama[channel], tmp, buffer_length); |
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(tmp,AudioMixer<NN>::multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufL, tmp, sumbufL, buffer_length); |
||||
// right
|
||||
arm_scale_f32(in, panorama[channel], tmp, buffer_length); |
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(tmp,AudioMixer<NN>::multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufR, tmp, sumbufR, buffer_length); |
||||
|
||||
if(sumbufL) |
||||
arm_fill_f32(0.0, sumbufL, buffer_length); |
||||
if(sumbufR) |
||||
arm_fill_f32(0.0, sumbufR, buffer_length); |
||||
|
||||
free(tmp); |
||||
} |
||||
|
||||
template <int NN> void AudioStereoMixer<NN>::doAddMix(uint8_t channel, float32_t* inL, float32_t* inR) |
||||
{ |
||||
float32_t* tmp=malloc(sizeof(float32_t)*buffer_length); |
||||
|
||||
assert(tmp!=NULL); |
||||
assert(inL); |
||||
assert(inR); |
||||
|
||||
// left
|
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(inL,AudioMixer<NN>::multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufL, tmp, sumbufL, buffer_length); |
||||
// right
|
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(inR,AudioMixer<NN>::multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufR, tmp, sumbufR, buffer_length); |
||||
|
||||
free(tmp); |
||||
} |
||||
|
||||
template <int NN> void AudioStereoMixer<NN>::getMix(float32_t* bufferL, float32_t* bufferR) |
||||
{ |
||||
assert(bufferR); |
||||
assert(bufferL); |
||||
assert(sumbufL); |
||||
assert(sumbufR); |
||||
arm_copy_f32 (sumbufL, bufferL, buffer_length); |
||||
arm_copy_f32 (sumbufR, bufferR, buffer_length); |
||||
|
||||
if(sumbufL) |
||||
arm_fill_f32(0.0, sumbufL, buffer_length); |
||||
if(sumbufR) |
||||
arm_fill_f32(0.0, sumbufR, buffer_length); |
||||
|
||||
} |
@ -1,47 +0,0 @@ |
||||
// Taken from https://github.com/manicken/Audio/tree/templateMixer
|
||||
// Adapted for MiniDexed by Holger Wirtz <dcoredump@googlemail.com>
|
||||
|
||||
#ifndef template_mixer_h_ |
||||
#define template_mixer_h_ |
||||
|
||||
#include "arm_math.h" |
||||
#include <stdint.h> |
||||
|
||||
#define UNITY_GAIN 1.0f |
||||
#define MAX_GAIN 1.0f |
||||
#define MIN_GAIN 0.0f |
||||
#define UNITY_PANORAMA 1.0f |
||||
#define MAX_PANORAMA 1.0f |
||||
#define MIN_PANORAMA 0.0f |
||||
|
||||
template <int NN> class AudioMixer |
||||
{ |
||||
public: |
||||
AudioMixer(uint16_t len); |
||||
void doAddMix(uint8_t channel, float32_t* in); |
||||
void gain(uint8_t channel, float32_t gain); |
||||
void gain(float32_t gain); |
||||
void getMix(float32_t* buffer); |
||||
protected: |
||||
float32_t multiplier[NN]; |
||||
float32_t* sumbufL; |
||||
uint16_t buffer_length; |
||||
}; |
||||
|
||||
template <int NN> class AudioStereoMixer : public AudioMixer<NN> |
||||
{ |
||||
public: |
||||
AudioStereoMixer(uint16_t len); |
||||
void pan(uint8_t channel, float32_t pan); |
||||
void doAddMix(uint8_t channel, float32_t* in); |
||||
void doAddMix(uint8_t channel, float32_t* inL, float32_t* inR); |
||||
void getMix(float32_t* bufferL, float32_t* bufferR); |
||||
protected: |
||||
using AudioMixer<NN>::sumbufL; |
||||
using AudioMixer<NN>::multiplier; |
||||
using AudioMixer<NN>::buffer_length; |
||||
float32_t panorama[NN]; |
||||
float32_t* sumbufR; |
||||
}; |
||||
|
||||
#endif |
@ -0,0 +1,174 @@ |
||||
// Taken from https://github.com/manicken/Audio/tree/templateMixer
|
||||
// Adapted for MiniDexed by Holger Wirtz <dcoredump@googlemail.com>
|
||||
|
||||
#ifndef effect_mixer_h_ |
||||
#define effect_mixer_h_ |
||||
|
||||
#include <cstdint> |
||||
#include <assert.h> |
||||
#include "arm_math.h" |
||||
|
||||
#define UNITY_GAIN 1.0f |
||||
#define MAX_GAIN 1.0f |
||||
#define MIN_GAIN 0.0f |
||||
#define UNITY_PANORAMA 1.0f |
||||
#define MAX_PANORAMA 1.0f |
||||
#define MIN_PANORAMA 0.0f |
||||
|
||||
template <int NN> class AudioMixer |
||||
{ |
||||
public: |
||||
AudioMixer(uint16_t len) |
||||
{ |
||||
buffer_length=len; |
||||
for (uint8_t i=0; i<NN; i++) |
||||
multiplier[i] = UNITY_GAIN; |
||||
|
||||
sumbufL=(float32_t*)malloc(sizeof(float32_t) * buffer_length); |
||||
arm_fill_f32(0.0, sumbufL, len); |
||||
} |
||||
|
||||
void doAddMix(uint8_t channel, float32_t* in) |
||||
{ |
||||
float32_t* tmp=(float32_t*)malloc(sizeof(float32_t)*buffer_length); |
||||
|
||||
assert(tmp!=NULL); |
||||
assert(in); |
||||
|
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(in,multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufL, tmp, sumbufL, buffer_length); |
||||
|
||||
free(tmp); |
||||
} |
||||
|
||||
void gain(uint8_t channel, float32_t gain) |
||||
{ |
||||
if (channel >= NN) return; |
||||
|
||||
if (gain > MAX_GAIN) |
||||
gain = MAX_GAIN; |
||||
else if (gain < MIN_GAIN) |
||||
gain = MIN_GAIN; |
||||
multiplier[channel] = gain; |
||||
} |
||||
|
||||
void gain(float32_t gain) |
||||
{ |
||||
for (uint8_t i = 0; i < NN; i++) |
||||
{ |
||||
if (gain > MAX_GAIN) |
||||
gain = MAX_GAIN; |
||||
else if (gain < MIN_GAIN) |
||||
gain = MIN_GAIN; |
||||
multiplier[i] = gain; |
||||
}
|
||||
} |
||||
|
||||
void getMix(float32_t* buffer) |
||||
{ |
||||
assert(buffer); |
||||
assert(sumbufL); |
||||
arm_copy_f32(sumbufL, buffer, buffer_length); |
||||
|
||||
if(sumbufL) |
||||
arm_fill_f32(0.0, sumbufL, buffer_length); |
||||
} |
||||
|
||||
protected: |
||||
float32_t multiplier[NN]; |
||||
float32_t* sumbufL; |
||||
uint16_t buffer_length; |
||||
}; |
||||
|
||||
template <int NN> class AudioStereoMixer : public AudioMixer<NN> |
||||
{ |
||||
public: |
||||
AudioStereoMixer(uint16_t len) : AudioMixer<NN>(len) |
||||
{ |
||||
for (uint8_t i=0; i<NN; i++) |
||||
panorama[i] = UNITY_PANORAMA; |
||||
|
||||
sumbufR=(float32_t*)malloc(sizeof(float32_t) * buffer_length); |
||||
arm_fill_f32(0.0, sumbufR, buffer_length); |
||||
} |
||||
|
||||
void pan(uint8_t channel, float32_t pan) |
||||
{ |
||||
if (channel >= NN) return; |
||||
|
||||
if (pan > MAX_PANORAMA) |
||||
pan = MAX_PANORAMA; |
||||
else if (pan < MIN_PANORAMA) |
||||
pan = MIN_PANORAMA; |
||||
panorama[channel] = pan; |
||||
} |
||||
|
||||
void doAddMix(uint8_t channel, float32_t* in) |
||||
{ |
||||
float32_t* tmp=(float32_t*)malloc(sizeof(float32_t)*buffer_length); |
||||
|
||||
assert(tmp!=NULL); |
||||
assert(in); |
||||
|
||||
// left
|
||||
arm_scale_f32(in, 1.0f-panorama[channel], tmp, buffer_length); |
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(tmp,multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufL, tmp, sumbufL, buffer_length); |
||||
// right
|
||||
arm_scale_f32(in, panorama[channel], tmp, buffer_length); |
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(tmp,multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufR, tmp, sumbufR, buffer_length); |
||||
|
||||
if(tmp) |
||||
free(tmp); |
||||
} |
||||
|
||||
void doAddMix(uint8_t channel, float32_t* inL, float32_t* inR) |
||||
{ |
||||
float32_t* tmp=malloc(sizeof(float32_t)*buffer_length); |
||||
|
||||
assert(tmp!=NULL); |
||||
assert(inL); |
||||
assert(inR); |
||||
|
||||
// left
|
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(inL,AudioMixer<NN>::multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufL, tmp, sumbufL, buffer_length); |
||||
// right
|
||||
if(multiplier[channel]!=UNITY_GAIN) |
||||
arm_scale_f32(inR,AudioMixer<NN>::multiplier[channel],tmp,buffer_length); |
||||
arm_add_f32(sumbufR, tmp, sumbufR, buffer_length); |
||||
|
||||
if(tmp) |
||||
free(tmp); |
||||
} |
||||
|
||||
void getMix(float32_t* bufferL, float32_t* bufferR) |
||||
{ |
||||
assert(bufferR); |
||||
assert(bufferL); |
||||
assert(sumbufL); |
||||
assert(sumbufR); |
||||
|
||||
arm_copy_f32 (sumbufL, bufferL, buffer_length); |
||||
arm_copy_f32 (sumbufR, bufferR, buffer_length); |
||||
|
||||
if(sumbufL) |
||||
arm_fill_f32(0.0, sumbufL, buffer_length); |
||||
if(sumbufR) |
||||
arm_fill_f32(0.0, sumbufR, buffer_length); |
||||
} |
||||
|
||||
protected: |
||||
using AudioMixer<NN>::sumbufL; |
||||
using AudioMixer<NN>::multiplier; |
||||
using AudioMixer<NN>::buffer_length; |
||||
float32_t panorama[NN]; |
||||
float32_t* sumbufR; |
||||
}; |
||||
|
||||
#endif |
Loading…
Reference in new issue