なお、このシリーズで扱うプログラミングの例題のビルドには、パソコンが必要です。OSは私が使っているMac OS X向けに解説を記述しますが、Linux(※ALSAに対応しているもの)やWindowsでも問題ありません。
今回から実践的な内容に入ろうと思っていましたが、その前にコンピュータで音を鳴らす方法について、余談を挟みつつ簡単に解説します。
コンピュータで音を鳴らす方法
音と情報量の関係
コンピュータが音を鳴らす方法は、時代と共に大きく変化(進化)してきました。
そもそも、音というのはデータ量として極めて大きな部類のものです。
昨今のスマートフォンアプリケーションは、市販ゲームなら数百MB以上のものがゴロゴロありますが、そのゲームの構成要素の内、音のデータが占める割合はかなり大きいです。
一般的なCD音質の場合、1秒間のデータ量は 44100(サンプリング周波数)× 2(16bit)× 2(ステレオ)バイト(176400バイト=約172KB) です。そのため、1分間で約10MBもの容量を必要とします。 圧縮技術の進化により、1/10程度への圧縮(エンコード)が可能になりましたが、それでも1分間で約1MBのディスク容量を必要とすることになります。
RPGなどの音楽数が多いジャンルのゲームなら、音楽だけで数百MBもの容量を喰うことになります。
チップチューン音源が生まれた理由
昨今のPCやスマートフォンなら、それぐらいの容量でも問題無く処理できますが、8bitや16bitの頃のコンピュータでは、そんなに大きな容量のデータ処理は不可能です。また、CPU性能も遅いので、仮に現代の圧縮技術があったとしても、リアルタイムにデコードしながら再生することは、ほぼ不可能です。
そのため、制御信号だけで音を鳴らす仕組みとして、米国General Instruments社のAY-3-8910や、YAMAHAのYM-2203(OPN)といったLSIが誕生しました。
チップチューン音源が廃れた理由
しかし、Windows 95が登場した頃を契機に、PCが一般家庭に普及し、ストレージやメモリの容量、CPUの演算速度が爆発的に進化した結果、わざわざ音楽専用のLSIが無くても、音声全般を扱えるPCM音源だけで全て事足りるようになったため、チップチューン音源をPCに搭載する実用上の理由が無くなったことで、ハードウェアとしてのチップチューン音源 は、完全に姿を消しました。
ただし、SUZUKI PLANはその時代の流れに逆らって、チップチューン音源を復活させることを目指して活動しています。東方BGM on VGSも、いわばその活動の一環です。
それはともかくとして、現代のコンピュータで音を鳴らす手段は PCM音源に一本化された といえます。
PCM音源で音声を再生する方法
PCM音源で音声を再生する手段には、大きく分けると 低レベルAPI と 高レベルAPI の2種類があります。
低レベルAPI
最も原始的なPCMを再生する手段で、「波形直書き」と呼ばれる方式です。
低レベルAPIは、PCM音源デバイスに対して、PCMデータ配列を入力することで、PCM音源が発音するという極めてシンプルな仕組みで、Windows、Linux、Mac、Android、iOSのどのOSでも提供されています。
ただし、Androidの場合、波形直書きができるようになったのはバージョン2.3.3以降からのみで、バージョン2.2以前は、MediaPlayerと呼ばれる音楽を再生する仕組みと、SoundPoolと呼ばれるaacやoggなどのファイルから効果音を鳴らす仕組みしか提供されていませんでした。
高レベルAPI
Android 2.2以前から有る
MediaPlayer や SoundPool は、非常に簡単に音を再生できる反面、独自に生成した波形データを再生することができないため、自由度が低く、またレイテンシが酷すぎてゲーム等では使い物にならない残念な機能です。 (iOSでもAudioUnitで似たような機能が提供されていますが、これはAndroidよりは大分マシです)
このように、自由度を犠牲にしてより簡単に音を再生できる方式 のことを高レベルAPIと呼びます。 高レベルAPIでは自由度が低すぎるため、ソフトシンセを作ることは不可能なので、以後本書では取り扱いません。
各OSの低レベルAPI
OS
|
低レベルAPI
|
備考
|
Windows
|
Wave Mapper, Direct Sound
|
本書ではDirectSoundを使用
|
Linux
|
ALSA, OSS (Open Sound System)
|
本書ではALSAを使用
|
Mac
|
Open AL
|
|
iOS
|
Open AL
|
|
Android
|
Open SL/ES
|
※ Mac と iOS
の
OpenAL は、全く同じです
見事に四者四様ですね。
ですが、できることは皆同じ「波形直書き」なので、使い方にはそれほどの大差はありません。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。