优化过的混音算法


#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值