织梦CMS - 轻松建站从此开始!

罗索

wav pcm wave 文件音量增大算法

落鹤生 发布于 2011-11-08 13:53 点击:次 
最近研究语音通话功能,发现嵌入式设备上录制音量过小。然后采用采样数据称除的算法进行音量条件,采集的语音数据或语音文件(语音PCM头要去除),语音数据声音增大算法
TAG:

最近研究语音通话功能,发现嵌入式设备上录制音量过小。

然后采用采样数据称除的算法进行音量条件,采集的语音数据或语音文件(语音PCM头要去除),语音数据声音增大算法:

01004EB6 |. BE 0080FFFF   mov     esi, FFFF8000

01004EBB |> /0FBF07        /movsx   eax, word ptr [edi]
01004EBE |. |0FAFC1        |imul    eax, ecx
01004EC1 |. |6A 64         |push    64
01004EC3 |. |99            |cdq
01004EC4 |. |5B            |pop     ebx
01004EC5 |. |F7FB          |idiv    ebx
01004EC7 |. |3BC6          |cmp     eax, esi
01004EC9 |. |7D 04         |jge     short 01004ECF
01004ECB |. |8BC6          |mov     eax, esi
01004ECD |. |EB 10         |jmp     short 01004EDF
01004ECF |> |BA FF7F0000   |mov     edx, 7FFF
01004ED4 |. |3BC2          |cmp     eax, edx
01004ED6 |. |7E 04         |jle     short 01004EDC
01004ED8 |. |8BC2          |mov     eax, edx
01004EDA |. |EB 03         |jmp     short 01004EDF
01004EDC |> |0FBFC0        |movsx   eax, ax
01004EDF |> |66:8907       |mov     word ptr [edi], ax
01004EE2 |. |47            |inc     edi
01004EE3 |. |47            |inc     edi
01004EE4 |. |FF4D 08       |dec     dword ptr [ebp+8]
01004EE7 |.^\75 D2         \jnz     short 01004EBB

上面是微软录音机的代码。

下面是我改进的代码,以25%向上增加语音音量。

//buf就是要增大音量的语音数据。这里只是单声道

 

  1. void RaiseVolume(char* buf, UINT32 size,UINT32 uRepeat) 
  2. if (!size ) 
  3.    return
  4. for (int i = 0; i < size;) 
  5.    signed long minData = -0x8000; 如果是8bit编码这里变成-0x80 
  6.    signed long maxData = 0x7FFF;如果是8bit编码这里变成0xFF 
  7.    
  8.    signed short wData = buf[i+1]; 
  9.    wData = MAKEWORD(buf[i],buf[i+1]); 
  10.    signed long dwData = wData; 
  11.  
  12.    for (int j = 0; j < uRepeat; j++) 
  13.    { 
  14.     dwData = dwData * 1.25; 
  15.     if (dwData < -0x8000) 
  16.     { 
  17.      dwData = -0x8000; 
  18.     } 
  19.     else if (dwData > 0x7FFF) 
  20.     { 
  21.      dwData = 0x7FFF; 
  22.     } 
  23.    } 
  24.    wData = LOWORD(dwData); 
  25.    buf[i] = LOBYTE(wData); 
  26.    buf[i+1] = HIBYTE(wData); 
  27.    i += 2; 
(cr0_3)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201111/15287.html]
本文出处:hi.baidu.com/cr0_3 作者:cr0_3
顶一下
(4)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容