ソフトウェア:データ編 その6 音を表す | ||||||||||||||||||||||||||||||||||||
前の2章では画像を数値化する方法に関して概説してきました。それでは今度は音はどうでしょう? 音も画像同様に数値化することは可能です。そしてビットマップとメタファイルに対応するような、データ化の方法が大きく分けて2種類あります。 方法その1:音をそのままデータにする:PCM![]() みなさんは音が空気中を伝わる振動であることはご存じでしょう。よく理科の教科書には音の波形とかいって以下のような図が載っているのを見たことはあるでしょう? ![]() さてではこれをどうやって数値化するのでしょうか?それには前にビットマップの時に使ったのと同じような方法が使えます。すなわち細かく分けるのです。 ビットマップの時は画像を小さな点に分けて、その点の色をデータに設定しました。音も同様に、上のグラフのX軸とY軸を細かく分けて、以下のようなデータを作るのです。 ![]() X軸は時間を表し、Y軸はその時間における波の大きさです。 X軸の分け方が十分細かければ、上の棒グラフの頂上を結んでいくとほぼ元の波形と同じ物が再現できることがわかります。X軸の分け方の細かさをサンプリングレートといいます。よくCDなんかにデジタルサンプリングして云々と書いてあることがありますが、要するにこういうことをしているわけです。 同時にY軸の分割数も細かくすればよりリアルな音になります。 こういう方法で数値化された音のデータをPCMデータとかWAVEデータと呼んでいます。 サンプリングレートと音質![]() さてそれではこのサンプリングレートはどのくらいにする必要があるのでしょう? 人間の耳は約20~20000Hz(ヘルツ)、すなわち一秒間に20回から20000回の振動範囲の音しか聞こえないということはたぶんご存じでしょう。ならば細かく分けるときに20000ヘルツの音がほぼ再現できるぐらいに分ければ、それ以上はもう分けなくてもいいわけです。すなわち40000ぐらいにしておけばいいわけです。 このため最も高品質の音データ、すなわちCDの場合はX軸を1秒間を44100個に分割し、Y軸を-32,768 ~ 32,767に分割したデータを利用します。 しかしこれではかなりデータ量が大きくなるので、もっと音質を犠牲にして、たとえばXを22050とか11025とか8000とかに分割することもあります。またYの分割数も-128~127とすることもあります。 このためPCMデータの品質を表すのに例えば8bit-22050Hzというような表示が行われますが、これはサンプリングレートが22050Hzで、Y軸が-128~127の値を取るようにして作ったデータという意味です。 当然分割数を減らせばそれだけ音質は劣化します。しかし実際に本当にいい音が出るかどうかは、スピーカーやアンプの性能に依存します。現在のコンピューターに付属されているスピーカーやアンプはとてつもなくちゃちな物が多いので、そういうもので聞く限りは、サンプリングレートが44100Hzのデータと11025Hzのデータの差が分からないことがほとんどです。 MP3とは?![]() というわけで、音をデータ化できたわけですが、ここでも前にビットマップのところで出たような問題が発生します。 というのは、単純なPCMの方式だとデータの量が莫大になってしまうのです。 試しに16bit-44100Hzステレオ(これはCDの音質です)の1分間分のデータがどのようなサイズになるか計算してみると、
この意味は、1秒間が44100に分割されていて、そのおのおのに16ビット、すなわち2バイトのデータが必要です。更にステレオなのでその2倍、1分間は60秒ということで・・・ まあだからCD1枚(640MBぐらい)には70分ぐらいの音楽しか入らないわけですが・・・ でもやっぱり、たかが1分程度のデータに10MBは大きすぎますね。ということでここでもデータのサイズを小さくする必要があります。 そのための手段としてもちろん、サンプリングレートを落とすというのも考えられますが、これは絵の解像度や色数を減らしたというのと同じで、本質的解決にはなりません。 しかしここでもデータ圧縮技法が使えます。 最近よくあるMP3というデータフォーマットは、PCMデータをJPEG画像と似たような方式で圧縮した物に他なりません。 方法その2:音の鳴らし方をデータにする![]() 音を表すにもメタファイルのような方法があります。すなわち音の鳴らし方をデータ化しておくわけです。その方法はちょっと考えればお分かりでしょう。すなわち楽譜をそのままデータにしてしまえばいいわけです。 一昔前の主にDOSの時代には、ゲームのBGMなどにはそれをそのまんまにしたようなMMLというのも使われていました。例えば下のような感じです しかし最近ではMMLを使う代わりにMIDIを使うのが普通になりました。皆さんも名前ぐらいは聞いたことがあるのではないでしょうか? MIDIというのも音の出し方をデータ化した物ですが、楽譜とは違って、キーボード(コンピューターのじゃないよ!)のどのキーがいつどのぐらいの強さで押されたかとか、ピッチベンドのレバーがどのくらい倒されたかといったような情報をデータ化した物です。 例えば以下のような信号があります。
MIDI信号は大体3バイトもしくは2バイト一組で情報を伝えます。 MIDIに対応したシンセは、上記のような信号を受け取ったらその通りに音を出すようにできているわけです。 ところで上の情報には信号が送られる時間が入っていませんね。どうしてでしょう? MIDIとは元々複数のシンセサイザーつなぐためのデータ規格として生まれました。現在のシンセは一台で例えば最大64和音まで出せるとかいうのは普通ですが、初期の頃のシンセは一つが一時に一音しか出せなかったのです。しかし演奏をするためには和音が出せないと困るのは当然でしょう。そのために当時は一台のキーボードにたくさんのシンセをつないで演奏したのです。すなわち5台のシンセをつなげば5重の和音までが出せるわけです。 ここで少し困ったことが起こりました。同一メーカーのシンセをつなぐ分には問題はないのですが、異なったメーカーのシンセをつなぐことができないのです。 しかしミュージシャンというのは音にはうるさいのが当然です。どうしてもこのメーカーのこの機器と別なメーカーのこれを組み合わせたいという欲求は起こります。そこでシンセメーカーが協議して作った規格がMIDI規格です。 すなわちこの規格に対応したシンセ同士であればつないでも問題なく演奏ができるわけです。 要するにもともとライブ演奏で複数のシンセをつないで鳴らすことが目的だったのです。だとすれば信号はリアルタイムに送られてくるわけだから、信号を送った時間とかは必要なかったわけです。 それからしばらくしてパソコンが普及して、逆にこの情報に時間を加えて保存しておけばパソコンで曲が鳴らせるじゃないか!ということになり、これが実際に便利だったので現在のように普及していったのです。 GM規格![]() ところでMIDIデータを扱う際によくGM対応とかいうのを聞いたことはありませんか?これはなんでしょう? これは大ざっぱにいえば、音色番号と実際の音色の規格です。 というのは、MIDI情報で異なるメーカーのシンセをつないで鳴らすことはできたのですが、MIDI規格には音色番号と実際の音色の対応の規格はなかったのです。するとどういうことが起こるかというと、あるシンセでは音色番号1番がピアノだったのが、別な機種では1番がバイオリンだったなどということが起こるわけです。 MIDIデータを持っていって他のシンセで鳴らしても、これではメチャメチャになります。 というわけで音色番号1番はピアノ、・・・というような取り決めを作って、それに対応したシンセであればどれで鳴らしても同じように聞こえるわけです。 しかし実際聞いてみるとこれが結構違います。それはシンセの機種が異なれば、音を発生させる機構そのものが違うためです。そのため例えば同じピアノであっても、何となく似ているけどやっぱり違う、ということにしかなりません。これはどこか一社のシンセが世界標準にでもならない限り、どうしようもない問題です。そんなことにはならない方がいいですしね。 ちなみにその後GSとかXGという規格も現れました。GMだと音色数が128個しか定義されていないのですがそれでは全然足りないからです。両者ともGMの上位互換、すなわちその中にGM規格を含んでいるので、GM規格に則って作られたデータは正しく演奏できます。しかしGSはローランド、XGはヤマハが作った規格なので、拡張された部分には両者に互換性はありません。 →GM規格の音色表 PCM方式とMIDI方式の簡単な比較![]() というわけで、二つの方式を簡単に比較した表を下に示します。
|
![]() |
![]() |
![]() |
![]() |
![]() |