dBについて
JAVAでエフェクト・コンプレッサー自作の記録 3
音を扱う場合、dBがよく使われる。今回作るコンプレッサーでもdBで制御できるようにするため、基本的なところを理解しておくことにする。
G[dB] = 20log10 y/x
G:デシベル換算した入力/出力比
x:入力
y:出力
下はデシベル[dB]から入出力電力比を表す計算式 。
P1:入力電力
P2:出力電力
x:入力(dB)
P2/P1 =10^(x/10)
電力比を電圧比にして、対数の係数を2倍の20とする。さらに式を変形させれば今回の用途で使えるようになる。
P2 = P1*10^(x/20)
例として出力をデシベルで指定して -6dB、入力レベルを素のデータ 32767 としてみる。 関数電卓で計算
P2 = 32767 * 10^(-6/20)
= 32767 * 10^(-0.3)
= 32767 * 0.5012
= 16422
音量を-6dBつまり1/2にするなら本当は16384になるはずだが、そうなっていない。それは-6dBが、およそ1/2という意味だから。精度を上げるなら-6.0206dBぐらいの数字を入れないとだめ。-6.0206dBで計算すればちゃんと半分の16384になる。Javaでも確認してみる。
結果は
dB =-6
P1 =32767
double P1a = 16422.402084264828
short P2 = 16422
dB2 = -6.000000000000001
こんなかんじで、関数電卓と同じ結果。
コンプ製作の記録
1 Java 具体的に作ってみる
2 WAVについて
3 dBについて
4 コンプに必要な情報
5 Eclipseの導入
6 Nimbus
7 コンプの原理
8 コンプレッサーベータ版完成
9 NAMAGI Compressor
音を扱う場合、dBがよく使われる。今回作るコンプレッサーでもdBで制御できるようにするため、基本的なところを理解しておくことにする。
G[dB] = 20log10 y/x
G:デシベル換算した入力/出力比
x:入力
y:出力
下はデシベル[dB]から入出力電力比を表す計算式 。
P1:入力電力
P2:出力電力
x:入力(dB)
P2/P1 =10^(x/10)
電力比を電圧比にして、対数の係数を2倍の20とする。さらに式を変形させれば今回の用途で使えるようになる。
P2 = P1*10^(x/20)
例として出力をデシベルで指定して -6dB、入力レベルを素のデータ 32767 としてみる。 関数電卓で計算
P2 = 32767 * 10^(-6/20)
= 32767 * 10^(-0.3)
= 32767 * 0.5012
= 16422
音量を-6dBつまり1/2にするなら本当は16384になるはずだが、そうなっていない。それは-6dBが、およそ1/2という意味だから。精度を上げるなら-6.0206dBぐらいの数字を入れないとだめ。-6.0206dBで計算すればちゃんと半分の16384になる。Javaでも確認してみる。
public class Log_test { public static void main(String[] args){ int db = -6 ; short p1 = 32767; double p1a = 0 ; short p2 ; p1a = (double)p1 * (Math.pow(10,db/20.0)); p2 = (short)p1a ; System.out.println("dB ="+ db + " \nP1 ="+ p1 + "\ndouble P1a = " + p1a); System.out.println("short P2 = " + p2); //dBを上記から逆計算して精度を確認 double db2 = (double)Math.log10(Math.pow((p1a/p1),20)); System.out.println("dB2 = " + db2); } } |
dB =-6
P1 =32767
double P1a = 16422.402084264828
short P2 = 16422
dB2 = -6.000000000000001
こんなかんじで、関数電卓と同じ結果。
コンプ製作の記録
1 Java 具体的に作ってみる
2 WAVについて
3 dBについて
4 コンプに必要な情報
5 Eclipseの導入
6 Nimbus
7 コンプの原理
8 コンプレッサーベータ版完成
9 NAMAGI Compressor