Make mono filter not modify source buffer
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
DataHoarder 2022-05-15 17:04:02 +02:00
parent 468ec9b491
commit 713835cd85
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
3 changed files with 8 additions and 7 deletions

View file

@ -1,14 +1,14 @@
#include "audio.h"
#include <math.h>
void audio_multiple_channels_to_mono(float* buffer, size_t buffer_len, int channels) {
void audio_multiple_channels_to_mono(float* buffer, size_t buffer_len, float* out, int channels) {
float f;
switch(channels) {
case 1:
break;
case 2:
for (int i = 0; i < buffer_len; i += 2){
buffer[i/2] = buffer[i] + buffer[i+1];
out[i/2] = buffer[i] + buffer[i+1];
}
break;
default:
@ -17,7 +17,7 @@ void audio_multiple_channels_to_mono(float* buffer, size_t buffer_len, int chann
for (int j = 1; j < channels; ++j) {
f += buffer[i + j];
}
buffer[i/channels] = f / (float)channels;
out[i/channels] = f / (float)channels;
}
}
}

View file

@ -8,9 +8,10 @@ import "C"
import "unsafe"
//MultipleChannelsToMono bring any number of channels to mono, equally weighted, reusing buffer backwards
func MultipleChannelsToMono(buffer []float32, channels int) []float32 {
C.audio_multiple_channels_to_mono((*C.float)(&buffer[0]), C.size_t(len(buffer)), C.int(channels))
return buffer[0:(len(buffer) / channels)]
func MultipleChannelsToMono(buffer []float32, channels int) (buf []float32) {
buf = make([]float32, len(buffer)/channels)
C.audio_multiple_channels_to_mono((*C.float)(&buffer[0]), C.size_t(len(buffer)), (*C.float)(&buf[0]), C.int(channels))
return
}
//MultipleChannelsToStereo bring any number of channels to stereo, using downmix formulas when necessary

View file

@ -3,7 +3,7 @@
#define BITS_TO_DIV(b) (float)((1 << (b - 1)) - 1)
void audio_multiple_channels_to_mono(float* buffer, size_t buffer_len, int channels);
void audio_multiple_channels_to_mono(float* buffer, size_t buffer_len, float* out, int channels);
void audio_multiple_channels_to_stereo(float* buffer, size_t buffer_len, float* out, int channels);