优化过的混音算法

来源:互联网 发布:淘宝卖包包的网红店 编辑:程序博客网 时间:2024/06/04 19:29


#include <stdio.h>
#include <limits.h>

//////////////////////////////////////////////////////////////////////////

void mix(short *output, size_t length_output, long *mixing, size_t length_mixing)
{
 float f = 1.0f;
 if (!output || !mixing || length_output == 0 || length_output != length_mixing) {
  goto Exit;
 }

 {long value = 0;
 for (size_t i=0; i<length_output; ++i) {
 value = static_cast<long>(mixing[i] * f);
 if (value > SHRT_MAX) {
  f = SHRT_MAX/value - 0.0001f;

  mixing[i] = SHRT_MAX;
 }
 else if (value < SHRT_MIN) {
  f = SHRT_MIN/value + 0.0001f;

  mixing[i] = SHRT_MIN;
 }

 if (f < 1.0f) {
  f += (1 - f) / 32;
 }}}

Exit:;
}

const size_t length = 128;

int main(int, char *[])
{
 short output[length]= { 0 };
 long mixing[length] = { 56000, 234, 65650, 13245, 234340, };

 mix(output, length, mixing, length);
 return 0;
}

原创粉丝点击