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を指定する。
うーむ、dBからの変換はないのか?
コメントする