Skip to content

Commit

Permalink
Refactor AudioMixerX to AudioMixer
Browse files Browse the repository at this point in the history
Also add in some checks for NULL returned from malloc()
  • Loading branch information
h4yn0nnym0u5e committed Jan 5, 2022
1 parent d1f3feb commit 0ff73d6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 17 deletions.
5 changes: 3 additions & 2 deletions DynMixer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,12 +105,13 @@ static void applyGainThenAdd(int16_t *dst, const int16_t *src, int32_t mult)

#endif

void AudioMixerX::update(void)
void AudioMixer::update(void)
{
audio_block_t *in, *out=NULL;
unsigned int channel;

for (channel=0; channel < _ninputs; channel++) {
// use actual number of channels available
for (channel=0; channel < num_inputs; channel++) {
if (NULL != out) {
in = receiveReadOnly(channel);
if (in == NULL) continue;
Expand Down
28 changes: 13 additions & 15 deletions DynMixer.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,63 +34,61 @@
#define SAFE_RELEASE_INPUTS(...)
#endif // !defined(SAFE_RELEASE_INPUTS)

class AudioMixerX : public AudioStream
class AudioMixer : public AudioStream
{
#if defined(__ARM_ARCH_7EM__)
public:
AudioMixerX(unsigned char ninputs) : // for now this WILL crash if the malloc fails!
AudioMixer(unsigned char ninputs) :
AudioStream(ninputs, inputQueueArray = (audio_block_t **) malloc(ninputs * sizeof *inputQueueArray)),
_ninputs(ninputs)
{
//Serial.printf("\nninputs = %d %d\n\n", _ninputs, sizeof(this));
multiplier = (int32_t*)malloc(_ninputs*sizeof *multiplier);
for (int i=0; i<_ninputs; i++) multiplier[i] = 65536;
if (NULL != multiplier)
for (int i=0; i<_ninputs; i++) multiplier[i] = 65536;
}
~AudioMixerX()
~AudioMixer()
{
SAFE_RELEASE_INPUTS();
//Serial.println("freeing multipler!");
free(multiplier);
//Serial.println("freeing inputQueueArray!");
free(inputQueueArray);
//Serial.println("freeing all done!");
}
virtual void update(void);
void gain(unsigned int channel, float gain) {
if (channel >= _ninputs) return;
if (channel >= _ninputs || NULL == multiplier) return;
if (gain > 32767.0f) gain = 32767.0f;
else if (gain < -32767.0f) gain = -32767.0f;
multiplier[channel] = gain * 65536.0f; // TODO: proper roundoff?
}
uint8_t getChannels(void) {return num_inputs;}; // actual number, not requested
private:
unsigned char _ninputs;
int32_t* multiplier;
//audio_block_t *toBeIgnored[1];
audio_block_t **inputQueueArray;

#elif defined(KINETISL)
public:
AudioMixerX(unsigned char ninputs) : // for now this WILL crash if the malloc fails!
AudioMixer(unsigned char ninputs) :
AudioStream(ninputs, inputQueueArray = (audio_block_t **) malloc(ninputs * sizeof *inputQueueArray)),
_ninputs(ninputs)
{
//Serial.printf("\nninputs = %d %d\n\n", _ninputs, sizeof(this));
multiplier = (int32_t*)malloc(_ninputs*sizeof *multiplier);
for (int i=0; i<_ninputs; i++) multiplier[i] = 256;
if (NULL != multiplier)
for (int i=0; i<_ninputs; i++) multiplier[i] = 256;
}
~AudioMixerX()
~AudioMixer()
{
SAFE_RELEASE_INPUTS();
free(multiplier);
free(inputQueueArray);
}
virtual void update(void);
void gain(unsigned int channel, float gain) {
if (channel >= _ninputs) return;
if (channel >= _ninputs || NULL == multiplier) return;
if (gain > 127.0f) gain = 127.0f;
else if (gain < -127.0f) gain = -127.0f;
multiplier[channel] = gain * 256.0f; // TODO: proper roundoff?
}
uint8_t getChannels(void) {return num_inputs;}; // actual number, not requested
private:
int16_t *multiplier;
audio_block_t **inputQueueArray;
Expand Down

0 comments on commit 0ff73d6

Please sign in to comment.