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を指定する。