2011年2月19日土曜日

音を数値で表す

デジタルデータの音について、今一度おさらいです。
若干不勉強な点もあるのですが、追々修正していきたいなという感じで。

量子化、音のレートについてとコンプレッサーについての概略を少々。


とりあえず音をデジタル化、量子化するとはどういう事かという所から。
音のデータは全て、機械から出力されるときにはスピーカーを通して発せられます。
ということは、音声データはスピーカーの挙動を制御するためのデータということになります。

何時何分何秒(本当はもっともっと細かいです)この瞬間に、スピーカーがどの位相に存在するべきかというデータを書き記したのがサウンドファイルというわけ。
じゃどういう取り方をしているかというと「時間軸」と「位相軸」の二軸で保管されていて、これらの細かさを決めているのが「サンプリングレート」と「ビットレート」にあたります。
上の図は、ある波の情報を時間軸・位相軸の格子上に置いて「量子化」している図です。

1秒間に何回、位相の情報を記録するかを決めているのがサンプリングレート。例えば一般的な44.1kHzだと44.1k=44100箇所の位相を、一秒間で入力或いは出力するという意味になります。

そしてビットレートは、サンプリングレートに沿って取得した位相の細かさを表します。
例えば128bps(bit per second = ビット毎秒)とは、1秒間に128ビットの情報量を持つという意味になります。
ですが、一つの位相がこのビットレートを保持するわけではありません。毎秒なので、128ビットをサンプリングレート(ここでは44.1kHzとします)で割った数が、位相一つ分の細かさになるわけです。計算すると、

128bit = 2^128 = 3.40282367 × 1038


これをさらにサンプリングレートで割るので


2^128/44100 = 7.71615344 × 1033


これが位相の細かさになるわけです。分かりやすく書くと波の一番下から一番上までを7716153440000000000000000000000000本の線で細切れにしてるということになります。想像できない…
でもサンプリングレートで割るってことは、ビットレートを固定のままサンプリングレートを上げると位相の精度が同じビットレートでも落ちてしまうってことになる…そういうもんなのでしょうか。




イメージとしてはそんな感じです。つまり音の振れ幅、細かさはファイルを書きだす時点でかっつり決まってるということ。
なのでこの定格を超えるような音量の上げ方をしたりすると、音が割れたりするわけです。

本来枠線に収まらなければはみ出た部分はコンピュータは全く認識してくれません。気合でなんとかなるとか言うものでも無いです。
本来の規格から超えてしまった情報は容赦なくカットされ、情報の欠落が結果音のひずみとして現れてしまうわけです。これがよく言う音割れという現象。

音を上げてしまうと音割れしちゃうけど、でも音圧は上げたい。そんな時にコンプレッサーというのが役に立つみたいです。
中々ツマミをいじっても直感的に分かりにくいのですが、波形のイメージとしてはこんな感じになります。
途中までは最初の図のように黒い波を超える勢いで赤い波の位相が上昇していくのですが、段々と落ち着きを取り戻して最終的には黒い波と同じ、データ量のキャパギリギリの所で収まっています。こんな感じで危ないなー超えそうだなーというタイミングで、なだらかに音が飛び出ないよう圧縮をかけてくれるのがコンプレッサーの役目。

その結果音割れはせず、赤い波の膨らんだ領域の分だけ音圧が上がって聞こえる、ということらしいです。
それだけじゃなく、最大値を抑えることで小さい音を底上げできるとか、色々な作用がありますがシンプルにデータ的な観点から捉えるとこんなトコロでしょうか。


大体合ってると思うのですが、もしかすると大きな勘違いをしてたりしてなかったりしそうなので、話し半分でいてください。
この認識で困ったことは無いので大丈夫だとは思いますが。。。近いうちにちゃんとした裏付けをします。

0 件のコメント:

コメントを投稿