怎么用電腦做網(wǎng)站寧波優(yōu)化系統(tǒng)
1、均值化混音算法
不適合商用,聲音的損失比較大,不建議用,建議用第二種聲音混音
short remix(short pcm1,short pcm2){
int value = pcm1+ pcm2;
return (short)(value/2)
}
2、歸一化混音算法
輸入數(shù)據(jù)為48Khz-2-16bit音頻數(shù)據(jù)
方法:為避免發(fā)生溢出,使用一個可變的衰減因子對語音進(jìn)行衰減。這個衰減因子也就代表語音的權(quán)重,衰減因子隨著音頻數(shù)據(jù)的變化而變化,所以稱為自適應(yīng)加權(quán)混音。當(dāng)溢出時,衰減因子較小,使得溢出的數(shù)據(jù)在衰減后能夠處于臨界值以內(nèi),而在沒有溢出時,又讓衰減因子慢慢增大,使數(shù)據(jù)較為平緩的變化。(PCM音頻混合的方法_pcm混音算法-CSDN博客)
//歸一化混音 ? ?
void mix(char **src_data, char *mix_data, int channels, int buffer_size)
?? ??? ?{
?? ??? ??? ?int const MAX = 32767;
?? ??? ??? ?int const MIN = -32768;
?? ??? ??? ?double f = 1;
?? ??? ??? ?int output;
?? ??? ??? ?int i = 0, j = 0;
?? ??? ??? ?for (i = 0; i < buffer_size / channels; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?int temp = 0;
?? ??? ??? ??? ?for (j = 0; j < channels; j++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?temp += *(short*)(src_data[j] + i * channels);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?output = (int)(temp*f);
?? ??? ??? ??? ?if (output > MAX)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?f = (double)MAX / (double)(output);
?? ??? ??? ??? ??? ?output = MAX;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if (output < MIN)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?f = (double)MIN / (double)(output);
?? ??? ??? ??? ??? ?output = MIN;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if (f < 1)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?f += ((double)1 - f) / (double)32;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?*(short*)(mix_data + i * 2) = (short)output;
?? ??? ??? ?}
?? ??? ?}調(diào)用方法:
char *testSrcData[2] = { NULL };
?testSrcData[0] = 聲音通道1數(shù)據(jù)
?testSrcData[1] = 聲音通道2數(shù)據(jù)
?mix(testSrcData, mix_data, 2, buffer_size);
3、其他方法本人沒用過,不好評價,不過感覺第二種夠用了,至少目前沒什么特別大的反饋
4、混音的思路
采集多路pcm數(shù)據(jù)-》統(tǒng)一重采樣成48Khz-2通道-16bit-》歸一化混音