32:音を鳴らす(準備編)

◆PROCESSINGで始めるゲーム作りとコンピュータ

Thunder 32:音を鳴らす(準備編)

今日の話題

 

18:演奏ライブラリをインストールする

これまで画面に図形を描画する方法や、予め用意した画像を表示する方法、キーボードやマウスの入力を処理する方法について学んできました。

これでゲームを作成するために必要な「基本中の基本」となる技術が身についた事だと思います。でも素敵なゲームを作るためには、あと1つ足りないものがあります。

え、すごいアイデアやストーリーを思いつく才能だろうですって?・・・(笑)。もちろんそれも必要です。ですが、まだゲームを作成するのに必要な技術的要素で1つだけ解説していないものがあるのです。

それは音を鳴らす技術です。

BGMや効果音が一切鳴らない「サイレントゲーム」っていうのも、たまには面白いかもしれません。でも普通は何かの音が鳴りますよね?。美しいBGMやリアルな効果音は、ゲームを盛り上げるためには不可欠な要素です。

bgm(画像URL:illust-AC 様:KTM factoryさん、RRice さん)

残念な事に、PROCESSINGでは標準の命令で音を鳴らすことができません。

PROCESSINGはJavaをベースにしたプログラミング言語ですので、Javaに詳しい人であれば音を鳴らすプログラムを作成する事は可能です。

でも初心者のみなさんにはハードルが高い事だと思います(汗)。

でも安心してください。有志の方々がPROCESSINGで簡単に音を鳴らすためのライブラリを公開してくれているからです。

公開されているライブラリをPROCESSINGに追加する事で、比較的簡単に音を鳴らす事ができるようになります。このように「機能を後から追加する」事を「アドオン」と呼びます。

今回はPROCESSINGで利用可能な音楽演奏用のライブラリである minim(ミニム) をアドオンすることで、音を鳴らしてみたいと思います。

minimをアドオンするのはとても簡単です。以下の手順で操作してください。

標準エディタを使ってアドオンする

標準エディタを起動し、メニューの「スケッチ」から「ライブラリをインポート」を選択します。
p5libaddmenu
サブメニューから「ライブラリを追加」を選択します。Contribution Manager 画面が開きます。

p5libaddmenu2
Contribution Manager 画面の左端にある Libraries タブを選択し、一番上の検索窓に「minim」と入力します。

表示される一覧から「Minim | An audio library that …」と書かれた箇所を選択し、右下にある install ボタンを押下して下さい。

p5libaddlibminim
本記事執筆時点(2016年11月)では Ver2.2.2 が自動的にインストールされました。

minimのアドオンはこれだけで完了です。ね、簡単でしょ?。あとは素晴らしい音楽ファイルを準備すればOKです。

以下から、学習用の音楽ファイルをダウンロードできるようにしました。

学習用サンプル音楽ファイル

SHWフリー音楽素材 様より拝借しました。利用にあたっては配布元サイト様の利用規約を参照願います。wen-kamuy2.zip がダウンロードされます。


上記の音楽ファイルは SHWフリー音楽素材 様より拝借したものです。利用にあたっては公開元サイト様の利用規約を遵守して下さい。

ゲームのBGMとして利用可能な音楽ファイルは、上記サイト様以外にも様々なサイトで公開されています。利用条件をよく読み、各自でお好きな音楽ファイルをダウンロードしてください。

 

19:音楽ファイルの形式

私がSHWフリー音楽素材 様より拝借した音楽ファイルは「mp3形式」となっています。

08:圧縮解凍と多重処理」の記事でも紹介しましたが、ファイルや画像データには目的に応じた様々な圧縮形式がありました。音楽ファイルも同様で、目的に応じた様々な形式が存在します。

代表的な音楽ファイルの形式は以下の通りです。

略称 正式名称可逆・非可逆特徴
wav ウェーブ、ウェブ、ワブRIFF waveform Audio Format場合によるマイクロソフトとIBMにより開発されたフォーマット。Windowsでよく利用されています
mp3エムピースリーMPEG-1 Audio Layer-3非可逆音楽ファイルの代表的なフォーマット。最もよく使われている形式です
aif アイフ、エーアイエフAudio Interchange File Format原則は可逆アップル社により開発されたフォーマット。Macintoshで使われています
vorbisヴォルビス、ヴォービスVorbis非可逆オープンでフリーなフォーマット。高い圧縮率を誇ります。拡張子には ogg (オグ、オージージー)が使われます
wmaウィンドウズ メディア オーディオWindows Media Audio原則は非可逆マイクロソフトがmp3に対抗して作成したフォーマット。残念なら主にWindowsでしか使われていません
flacフラックFree Lossless Audio Codec可逆オープンでフリーなフォーマット。圧縮率は低いですが機能面で優れている形式です
mp4(m4a)エムピーフォーMPEG-4 Part 14非可逆mp3の後継ではありません。動画などの格納形式としても利用されています
aacエーエーシーAdvanced Audio Coding 非可逆mp3を超える高音質・高圧縮を目指して標準化された方式です

(参考URL:wiki 音楽ファイルフォーマット記事  様)

ここで紹介したもの以外にも、さまざまな形式の音楽ファイルが存在します。

余談ですが、音楽ファイルの圧縮形式にも「可逆式」と「非可逆式」が存在します。原音に忠実で高音質にこだわるのであれば可逆式が理想的ですが、ファイルサイズが大きくなってしまうのが欠点です。

今回は音楽ファイルのフォーマットとして、最も一般的な mp3 形式を利用することにします。minim は、上の表で上から3つ(wav、mp3、aif)の音楽ファイル形式に対応しています。

 

20:パッケージとインポート

それでは早速、minimを使って音を鳴らしてみましょう。

・・・と言いたい所ですが、その前に・・・これから minimの各種命令を利用するにあたり、プログラムの先頭に以下の呪文を記述しておく必要があります。

import   ddf.minim.*;

これはインポート文と呼ばれるものです。

minimの各命令はPROCESSINGの標準命令ではありません。ですので何もしないとPROCESSINGは minimの命令を理解できないのです。

そこで知らない命令(今回であれば minimの命令)に出会ったら、「指定された場所を探してね」という目印を付けておきます。それがインポート文です。

インポート文を理解するにはパッケージとクラスについて知る必要があります。クラスについては「18:オブジェクト指向とクラス」で、パッケージについては「22:EclipseでPROCESSINGを楽しむ」で少しだけ触れました。

クラスとは意味のある塊(オブジェクト)単位に、関連する情報や処理をひとまとめにしたものでした。RPGに登場するキャラクタの名前や性別などの情報を1つにまとめておくものでしたね。

1つのプログラムの中には、このようなクラスがたくさん存在します。例えば人物管理クラス、モンスター管理クラス、アイテム管理クラス、乗り物管理クラスなどです。

そんなクラスの中から似た者同士(関連が深いもの同士)をまとめたものがパッケージになります。

packageclass2(画像URL:illust-AC 様:ヤスフミさん、かえるWORKSさん、acworks さん)

パッケージは入れ子にする事が可能です。親パッケージの中に子供パッケージ、子供パッケージの中に孫パッケージといった具合で、階層構造にできるのです。

import   ddf.minim.*
は、ddf というパッケージの中にminimというパッケージがあり、知らない命令を見つけたらその中にある全てのクラスやパッケージを探しなさいという事をPROCESSINGに教えているのです。

packageclassmimin(画像URL:illust-AC 様:acworks さん)

上図はminimのクラスとパッケージの構造を描いたものです。青い枠がパッケージ、赤い枠がクラスになります。

階層化されて管理されているのがわかると思います。この図とimport 文を比較すると、先程のインポート文がどこを指しているのかがわかるでしょう。

 

21:インスタンスを作成する

音楽ファイルを読み込むためには、Minimクラスが持っている loadFile() 命令を利用します。loadFile() 命令を利用するためには、まずMinimクラスの実体(インスタンス)を作成しなければなりません。

インスタンス、覚えて見えますか?。忘れちゃった方は「18:オブジェクト指向とクラス」の記事を参照してみて下さい。

簡単に書くと、インスタンスとはクラスを型にして作成された変数(実体)の事です。

クラスの中には様々な処理を行う関数(メソッド)が格納できますが、クラスの中にあるメソッドを利用するためには、(通常は)インスタンス変数を作成する必要があります。

インスタンス変数を作成するには、いままで何度か登場した New 命令を使います。

こんな感じです。

Minim():minimのインスタンスを作成する

●種類
minimの命令

●代表書式
Minim  mini  = new  Minim( this ) ;

●引数
this : PROCESSINGのPAppletクラス

●戻り値
Minim型のインスタンス変数

●使用例
Minim  mini  = new  Minim( this ) ;  //minimのインスタンスを作成する

.
mini  =  new  Minim(  this  ) ; 
と書かれた箇所に注目して下さい。ここでインスタンス変数を作成しています。mini は Minim型(Minimクラス型)の変数です。そこに new で領域を確保しています。

Minim は Minimクラスの事で、クラス名と同じ名前の特別なメンバー関数(Minimクラスの中のMinim関数)を呼び出しています。

オブジェクト指向言語では、あるクラスのインスタンス変数を作成するには、そのクラスと同じ名前の特別なメンバー関数を呼び出して
変数名  =   new  あるクラス名(  引数  ) ;
のように記述する決まりになっています。

ちなみにこの特別なメンバー関数の事を、専門用語で「コンストラクタ」と呼びます。

%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e7%94%9f%e6%88%90
(画像URL:画像URL:illust-AC 様:Kamesan さん)

それでは、Minim() 関数の引数に渡している this とは何でしょうか?。

this とは自分自身、つまりPROCESSINGで作成しているプログラム自身を指しています。Minim関数に、自分たちが作成しているプログラムの実体を渡しているのです。

標準エディタでプログラムしているだけだと気が付きませんが、実は私達が作成しているプログラムそのものが、(暗黙のうちに)1つの大きなクラスになっているのです。

22:EclipseでPROCESSINGを楽しむ」記事で Eclipse を使ってプログラムする方法を紹介しましたが

という雛形を作成したのを覚えて見えるでしょうか?。

雛形の一番上に
public class SampleClass …
と書かれた部分があります。

これはPROCESSINGのプログラム自体が、(この例では)SampleClass という名前のクラスになっている事を示しています。

初心者の方は、なんか難しいな~と感じるかもしれませんね(汗)。

でも心配はいりません。とにかくここで覚えて欲しい事は

  • minimの命令を使うには、Minimクラスのインスタンス変数を作成する
  • インスタンス変数はクラス名と同じ関数を new で呼び出す事で作る
  • Minim関数には引数として this を渡す

という事です。

minim のインスタンス変数作成はプログラムの最初で1回だけ実行すれば良いため、初期化関数( setup )の中で行うようにします。

 

Forest今日の言葉

・アドオン

何かの機能を追加することです。Add On ですね。日本語で無理やり書くと「建て増し」・・・でしょうか?(笑)。

・インポート文

いろいろな命令が、プログラムのどの部分(どのパッケージ)に格納されているのかを示した地図みたいなものです。JavaやC#、C++、C、VBなど多くの言語で似たような考え方が利用されています。

・コンストラクタ

クラスをひな形にしてインスタンス変数を作成するための「特別な関数」です。私達がプログラミングするかどうかは別として、クラスには必ずクラスと同じ名前のコンストラクタが存在しています。

 

scroll今日の文法

・import文

import    親パッケージ名  .  子パッケージ名  .  孫パッケージ名  .  ・・・ ;
と記述し、各命令(クラス)の存在場所を指し示します。

 

・Minim() コンストラクタ

Minimクラスのインスタンス変数を作成します。

 

 今日のまとめ

  • PROCESSINGに演奏ライブラリをアドオンすることで音楽が演奏できる
  • 音楽ファイルには様々な形式がある
  • パッケージやクラスの場所を示すのにインポート文を使う

33:音を鳴らす(実践編)
31:文字を表示する(実践編) へ戻る
目次へ戻る


本ページで利用している特に参照元記載のないアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。