--- /home/peter/src/mISDN-1_1_5/drivers/isdn/hardware/mISDN/dsp_audio.c 2007-07-02 11:31:34.000000000 +0200 +++ ./dsp_audio.c 2007-08-28 18:10:58.000000000 +0200 @@ -475,60 +475,62 @@ { register s32 sample; int i; + int num[] = { 110, 125, 150, 175, 200, 300, 400, 500 }; + int denum[] = { 100, 100, 100, 100, 100, 100, 100, 100 }; i = 0; while(i < 256) { - dsp_audio_reduce8[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>8) & 0xffff]; - dsp_audio_reduce7[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>7) & 0xffff]; - dsp_audio_reduce6[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>6) & 0xffff]; - dsp_audio_reduce5[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>5) & 0xffff]; - dsp_audio_reduce4[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>4) & 0xffff]; - dsp_audio_reduce3[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>3) & 0xffff]; - dsp_audio_reduce2[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>2) & 0xffff]; - dsp_audio_reduce1[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i]>>1) & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 1; + dsp_audio_reduce8[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[7] / num[7] ) & 0xffff]; + dsp_audio_reduce7[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[6] / num[6]) & 0xffff]; + dsp_audio_reduce6[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[5] / num[5]) & 0xffff]; + dsp_audio_reduce5[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[4] / num[4]) & 0xffff]; + dsp_audio_reduce4[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[3] / num[3]) & 0xffff]; + dsp_audio_reduce3[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[2] / num[2]) & 0xffff]; + dsp_audio_reduce2[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[1] / num[1]) & 0xffff]; + dsp_audio_reduce1[i] = dsp_audio_s16_to_law[(dsp_audio_law_to_s32[i] * denum[0] / num[0]) & 0xffff]; + sample = dsp_audio_law_to_s32[i] * num[0] / denum[0]; if (sample < -32768) sample = -32768; else if (sample > 32767) sample = 32767; dsp_audio_increase1[i] = dsp_audio_s16_to_law[sample & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 2; + sample = dsp_audio_law_to_s32[i] * num[1] / denum[1]; if (sample < -32768) sample = -32768; else if (sample > 32767) sample = 32767; dsp_audio_increase2[i] = dsp_audio_s16_to_law[sample & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 3; + sample = dsp_audio_law_to_s32[i] * num[2] / denum[2]; if (sample < -32768) sample = -32768; else if (sample > 32767) sample = 32767; dsp_audio_increase3[i] = dsp_audio_s16_to_law[sample & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 4; + sample = dsp_audio_law_to_s32[i] * num[3] / denum[3]; if (sample < -32768) sample = -32768; else if (sample > 32767) sample = 32767; dsp_audio_increase4[i] = dsp_audio_s16_to_law[sample & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 5; + sample = dsp_audio_law_to_s32[i] * num[4] / denum[4]; if (sample < -32768) sample = -32768; else if (sample > 32767) sample = 32767; dsp_audio_increase5[i] = dsp_audio_s16_to_law[sample & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 6; + sample = dsp_audio_law_to_s32[i] * num[5] / denum[5]; if (sample < -32768) sample = -32768; else if (sample > 32767) sample = 32767; dsp_audio_increase6[i] = dsp_audio_s16_to_law[sample & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 7; + sample = dsp_audio_law_to_s32[i] * num[6] / denum[6]; if (sample < -32768) sample = -32768; else if (sample > 32767) sample = 32767; dsp_audio_increase7[i] = dsp_audio_s16_to_law[sample & 0xffff]; - sample = dsp_audio_law_to_s32[i] << 8; + sample = dsp_audio_law_to_s32[i] * num[7] / denum[7]; if (sample < -32768) sample = -32768; else if (sample > 32767)