(转) IDirectSoundBuffer::SetVolume的参数与音量分贝的函数关系

假如将播放器的控制音量切割成0-100的话,由于IDirectSoundBuffer::SetVolume(LONG lVolume)中参数的输入值是[-10000,0]

  1. MySetVolume( DWORD inputVolume)  
  2. {  
  3.     double decibels;  
  4.     DWORD dsVol;  
  5.   
  6.     if (inputVolume==0)  
  7.         dsVol = DSBVOLUME_MIN;  
  8.     else if (inputVolume>10000)  
  9.         dsVol = DSBVOLUME_MAX;  
  10.     else  
  11.     {  
  12.         decibels = 20.0 * log10((double)inputVolume / 100.0);  
  13.         dsVol = (DWORD)(decibels * 100.0);  
  14.     }  
  15.   
  16.     pDSBuffer->SetVolume( dsVol );  
  17. }  


当然,也可以将音量控制分割成0--10000了,基本的公式就是这样的。

有篇文章可以参考参考:http://www.animations.physics.unsw.edu.au/jw/dB.htm#definition

转自:http://blog.csdn.net/sky04/article/details/7070418

原文地址:https://www.cnblogs.com/lihaiping/p/5054304.html