dBとリニア値を変換する

0.0 = -inf dB、1.0 = 0dBとした場合。

リニア値からdBへ変換するには、

dBVolume = 20.0*log10(linearVolume);

dBからリニア値へ変換するには、

linearVolume = pow(10.0, dBVolume/20.0);

で、できる

ちなみにvDSPにはvDSP_vdbconという関数があり、リニア値からdBへの変換はできる。

void  vDSP_vdbcon (
   float * A,
   vDSP_Stride I,
   float * B,
   float * C,
   vDSP_Stride K,
   vDSP_Length N,
   unsigned int F);

Aはインプットする配列、Cはアウトプットされる配列(Aと同じでも可)、IとKにはそれぞれのストライド、Nには変換する配列の長さ、Bはzero referenceなので1.0を、Fには元のデータがpowerなら0、amplitudeなら1を指定となっているので1を指定する。