サンプルサイズあるいはビットデプスとは一つのサンプルの情報量のことです。スピーカーの振動盤が振動する様子を想像してください。振動する事によって音が発生することになります。振動盤が一番手前まで出てくることもあれば一番奥に引っ込むこともあるでしょう。音が発生している時の任意の時間での振動盤の位置をどれだけ細かく指定できるかはこのサンプルサイズに依存しています。
よく使われるサンプルサイズ
ハイレゾ音源も含めて今使われているサンプルサイズはビット単位で16, 24, 32の3種類です。より低い音質8bitも使われることがありますが一般の音楽には荒く聞こえるでしょう。
CDでは16ビット、ハイレゾ音源で24ビット、32ビットが使われています。それ以上のサイズはおそらくあまり違いがわからないと思います。
値の取りうる範囲
16ビットの場合は2の16乗で65,536通りの情報を保持できます。振動盤は元の位置から手前に出てきたり奥に引っ込んだりするので元の位置を中心の値とします。
中心の値を0とすると最小値は-32,768、最大値は32,767となります。
ビット数をxとすると以下のように計算されます。
最大値 = 2(x – 1) – 1
最小値 = -(2(x – 1))
Javaでの計算方法
Javaで乗数を計算するにはMath.powというメソッドを使います。乗数を求めることを英語ではpowerと言います。例えば2の3乗は以下のように書きます。
Math.pow(2, 3);
一つ目の引数は底となる数でそれを何乗するかを二つ目の引数に指定します。なので平方根は二つ目の引数に1/2つまり0.5を指定すると求められます。
ではサンプルレート2バイト、つまり16ビットの時の最大値と最小値を求めるコードです。
int sample_size_byte = 2; double max = Math.pow(2, sample_size_byte * 8 - 1) - 1; double min = Math.pow(2, sample_size_byte * 8 - 1) * -1; System.out.println(min + " ~ " + max);
結果は以下の通りです。
-32768.0 ~ 32767.0
ちなみに3バイト24ビットではコードの1行目を2から3に変更して実行します。
-8388608.0 ~ 8388607.0
ちなみに4バイト32ビットも同様に変更して実行します。
-2.147483648E9 ~ 2.147483647E9
けたが増えてくるとJavaではこのような出力になりますが実際には
−2147483648 ~ 2147483647
を表しています。