Make mono filter not modify source buffer
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
468ec9b491
commit
713835cd85
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue