2015年8月15日土曜日

ソフトシンセの作り方(5) - 開発環境の準備

VGSのソフトシンセ(波形メモリ音源)の開発で得られた知見を元に、PCやスマートフォンで動くソフトシンセの作り方を解説していきます。一冊の本が書ける程度の分量なので、幾つかのパートに区切って解説していきます。このシリーズを一通り読めば、サウンドプログラミングについて全くの素人でも、PCやスマホなどのプラットフォームで動くオリジナルのソフトシンセが作れる程度になります(たぶん)

なお、このシリーズで扱うプログラミングの例題のビルドには、パソコンが必要です。OSは私が使っているMac OS X向けに解説を記述しますが、Linux(※ALSAに対応しているもの)やWindowsでも問題ありません。

今回は、実践的な解説をする前に開発環境の準備について説明します。

開発環境の準備

PSG音源の開発には、VGSの実装の一部を利用するため、ご使用のパソコンへVGSSDK(開発環境)のセットアップをしていただく必要があります。そこで、VGS SDKの導入方法について解説します。VGS SDKを既に導入済みの方は読み飛ばしてください。
なお、VGS SDKは無料で利用でき、商業利用も可能です。なお、VGSの場合、VGS SDKを用いて開発したゲームに限らず、VGSのソースコードの一部を流用した開発も可能なライセンス形態となっています。(ライセンス関係の詳細は、VGSの使用許諾を熟読してください。また、分からないことがある場合、直接SUZUKI PLANへ問い合わせてご確認ください)

対応OS

VGSSDKは、次のOSに対応しています。
  • Windows
  • Mac OS X
  • Linux (CentOS7推奨)
動作環境については、スマートフォン(Android, iOS)もサポートしていますが、開発環境についてはパソコンのみです。

セットアップ方法

VGSのリポジトリで、OS別のセットアップ方法を記述しているので、そちらを参照してください。

gitの使い方

VGSを始めとする SUZUKI PLAN のオープソース製品は、全て GitHub 上で公開しています。GitHub とは、gitコマンドのリポジトリを管理するWebサービスで、多くの企業やオープンソース団体が活用しているソース構成管理ツールのデファクトスタンダードです。
本節では、本書を読み進める上で最小限必要なGitHubgitコマンドの使用方法を解説します。

gitコマンドのインストール

Mac OS XLinuxをお使いの方は、homebrew  yum コマンドで gitコマンドをインストールしてください。(例: yum install git
Windowsをお使いの方は、GitHub が公開している msysgit というツールをインストールすれば git コマンドが使えるようになります。
なお、WindowsにはGUIツールも提供されているようですが、全OS共通の使用で使えるCLIのみ使用します。

GitHubアカウントの登録

git コマンドのインストールが完了したら、GitHub アカウントの登録を行ってください。
その後、git コマンドでGitHubに登録したユーザ名とメールアドレスを設定します。
$ git config --global user.name ユーザ名
$ git config --global user.email メールアドレス

VGSリポジトリの取得

適当なワークディレクトリに VGSリポジトリ clone してみましょう。
$ cd ~/ && git clone git@github.com:suzukiplan/vgs2.git
上記を実行すると、PC ~/vgs2 ディレクトリに VGSリポジトリ(の最新のmasterブランチ)の内容が複製されます。あとは、VGSリポジトリの README.md に記載されているセットアップ手順に従ってセットアップを行えば、VGSのセットアップができます。

以降、VGSのリポジトリが ~/vgs2 に格納されているものとして解説します。

VGSリポジトリのバージョンアップ

git clone で取得した VGSリポジトリが格納されているディレクトリ上で、git pull コマンドを実行すれば、VGSリポジトリの内容を最新の状態に更新できます。
$ cd ~/vgs2 && git pull
最低限、VGSのセットアップをするのに必要な git に関する知識は以上です。

ソフトシンセの作り方(4) - 音色

VGSのソフトシンセ(波形メモリ音源)の開発で得られた知見を元に、PCやスマートフォンで動くソフトシンセの作り方を解説していきます。一冊の本が書ける程度の分量なので、幾つかのパートに区切って解説していきます。このシリーズを一通り読めば、サウンドプログラミングについて全くの素人でも、PCやスマホなどのプラットフォームで動くオリジナルのソフトシンセが作れる程度になります(たぶん)

なお、このシリーズで扱うプログラミングの例題のビルドには、パソコンが必要です。OSは私が使っているMac OS X向けに解説を記述しますが、Linux(※ALSAに対応しているもの)やWindowsでも問題ありません。

今回は、基礎編の最終回で、音色について。

【基礎編3】音色

音色は、音波の形(波形) によって決まります。

代表的な波形

下表に代表的な波形を示します。
名称
形状
特徴
サイン波
三角関数のsinで求まる波形
笛やベースの音としてよく使われる
三角波
サイン波を直線的にしたもの
サイン波の音色とだいたい同じ
矩形波
最も少ない計算量(2値表現)で音波を出力できるので、コンピュータと相性が良い
ノコギリ波
主旋律としてよく使われる
弦楽器に近い音色

視覚イメージと音のイメージ

音色の特徴は、このように視覚的に確認できるので、視覚で確認できるイメージ  実際の音のイメージ が一致するように意識することで、「こういう波形ならこういう音が鳴りそうだ」とイメージすることができるようになります。
波形を描画できるソフトウェアもあるので、それらを用いてみると更にイメージし易くなると思います。

Mac用には良い感じの波形エディタが無かったので、上記(効果音エディタ_D)をwineで使いましょう。余談ですが、最近のwineは結構凄いです。東方Projectのゲームでも普通に遊べてしまえるレベルだとか(参考

基礎的なところをもっとガッツリ説明したいところですが、私自身そんなに詳しくないという事情もあるので、ボロが出る前に基礎的なところの説明はこれくらいで切り上げておきます。次回からもうちょっと実践的な内容を解説していきます。

ソフトシンセの作り方(3) - 音の強弱

VGSのソフトシンセ(波形メモリ音源)の開発で得られた知見を元に、PCやスマートフォンで動くソフトシンセの作り方を解説していきます。一冊の本が書ける程度の分量なので、幾つかのパートに区切って解説していきます。このシリーズを一通り読めば、サウンドプログラミングについて全くの素人でも、PCやスマホなどのプラットフォームで動くオリジナルのソフトシンセが作れる程度になります(たぶん)

なお、このシリーズで扱うプログラミングの例題のビルドには、パソコンが必要です。OSは私が使っているMac OS X向けに解説を記述しますが、Linux(※ALSAに対応しているもの)やWindowsでも問題ありません。

当面は、基礎編ということで、音についての基本的なことについて書きます。
今回は音の強弱について。

【基礎編2】音の強弱

人間が知覚する音の大小

音には「強弱」という概念がありますが、これは 音波の大きさ により決まります。
ビットレートが16bit PCMの場合、音波の振幅値は -32768 32767 で、単位時間あたりの振幅値の絶対値を平均化したものの大小 が、人間が知覚する音の大小となります。

ベロシティ

音の強弱というと、ベロシティのことをイメージされた方が多いかもしれません。
ベロシティとは、例えば、ピアノの鍵盤を弱く押すと小さな音が鳴り、強く叩くと大きな音が鳴ることです。
もちろん、ベロシティは音楽表現をする上で重要な要素です。
しかし、必須な要素ではありません。
ピアノとは、楽譜記号で弱く演奏することを意味しますが、ピアノという名前の由縁は、その名の通り「弱く弾くこともできるよ」ということです。ピアノ以前に主流だったハープシコードやオルガンでは、音に強弱を付けることができません。
ハープシコードやオルガンなどの強弱がつけられない楽器でも、当然ながら音楽表現は不可能ではありません。
例えば、筆者が敬愛するJ.S.Bachの時代にはピアノが無かったため、Klavia(鍵盤楽器)で演奏する楽曲は、概ねハープシコードかオルガンで演奏することを想定しています。しかし、その時代であっても、平均律クラヴィーア曲集、6つのパルティータ、フーガの技法など、素晴らしい楽曲が多く存在します。
要するに何が言いたいのかというと、音の強弱表現というのは、あった方が当然良いけど無くても問題ないもの だと言うことができるということです。
しかし、音の強弱で考慮すべき点に、時間の経過による音の強弱の変化(エンベロープ) というものがあります。ソフトウェアシンセサイザーを実装する上で、ベロシティについては最悪余力があれば実装した方が良い程度のものです。
しかし、エンベロープは必ず実装しなければならないもの です。

エンベロープ

エンベロープ(包絡線)とは、先述の通り 時間の経過による音の強弱の変化 のことです。 楽器の音の大きさは、時間の経過により必ず変化します。 これは、オルガンなどの強弱表現ができない楽器にも存在するものです。

(1) AT; Attack Time

例えば、オルガンの鍵盤を押した時、押した瞬間に音が最も大きくなる訳ではなく、一定の時間をかけて最大音量になります。この、鍵盤を押してから最大音量に達するまでの時間のことをアタックタイム(AT; Attack Time)と呼びます。

(2) RT; Release Time

そして、鍵盤を離すと一瞬で消音状態にはならず、一定の時間をかけて無音になります。この、鍵盤を離してから無音になるまでの時間のことをリリースタイム(RT; Release Time)と呼びます。

(3)その他

RT AT 以外にも音と時間に関係する用語あるので、紹介しておきます
  • ST; Sustain Time (維持時間)
    • ATで最高点に達した後 から RTに入るまでの間に音量を維持する期間
    • 一般的に弦楽器(ピアノやハープシコードなど)はSTで維持する音量が無音
    • 一般的に管楽器(オルガンやトランペットなど)はSTで維持する音量が無音ではない
  • DT; Decay Time(減衰時間)
    • ATで最高点に達した後からSTになるまでの時間

(4)エンベロープの全体像

エンベロープの全体像を図示すると、下図のようになります。
エンベロープのイメージ

(5)まとめ

音のライフサイクルを端的に表すと次のようになります。
無音  key-on  AT  DT  ST  key-off  RT  無音
  • key-on: 音を鳴らす指示(鍵盤を押す)
  • key-off: 音を停止する指示(鍵盤を離す)
そして、これらをまとめて エンベロープ と呼びます。
エンベロープ(包絡線)とは、 時間の経過による音の強弱の変化 のことと先述しましたが、音のライフサイクル と言い換えた方が分かり易いかもしれません。

(6)重要なのはAT, RT

エンベロープの内、特に重要なのが AT  RT です。
DT  ST については、最悪実装しなくても 楽器 になります。
実際、VGSの波形メモリ音源でも DT  ST は実装していません。 しかし、AT  RT については、実装しなければ楽器とは呼べないお粗末なものになってしまうため、実装が必須なため、VGSの波形メモリ音源でも実装しています。

なお、本ブログで取り扱うPSG音源については、ATDTSTRT 全てを実装することにします。そのため、本書の内容をマスターすれば、VGSよりも優秀なチップチューン・ソフトウェアシンセサイザーを開発することができるかもしれません。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...