SiON v0.652 リリース


SiON - the AS3 SoftSynth
SiON v0.652 をリリースしました。
主なアップデート内容は、

  • version 0.64 で PCM 音源の拡張
  • version 0.65 で MIDI に対応

です。
これまでの「MML + 音源Chipエミュレータ」という懐古路線はそのままに、「MIDI + PCM音源」というモダン路線を導入して、一気に近代化?を図りました。そもそも v0.64 のリリースをアナウンスしなかったので、v0.64-0.65 で大きく変わった点について、概説したいと思います。

PCM音源実装の変更(v0.64)

v0.64で最も大きなアップデートはmp3ファイルの取り扱いについてです。中でも、Sound オブジェクトをシンセ音として扱えるPCM音源は、v0.63まで FM 音源の拡張でしたが、v0.64 でフルスクラッチから実装し直しました。このため v0.64 からは FM 音源エミュレータとは別の、より本格的な PCM 音源シミュレータが使用されます。
それに伴い、ステレオ対応、サンプリングポイント対応(ノート範囲毎に別のサンプルを割り振る)、音量/定位のノート依存変化、サンプルループ時のショートクロスフェードが実装されました。またADSSRエンベロープやFilterエンベロープなど既存 FM 音源の全機能はそのまま扱えます。チャンネル間のFM接続にも対応してるので、ヤマハAWM2のようなPCM波形をFM合成するという離れ業も可能です。どう使うのか見当もつきませんが。
機能だけ並べられてもよく分からないと思いますが、要は既存サンプラーの基本機能はほぼ実装されたと思って良いです。

Sampler音源へのアクセスの簡略化(v0.65)

読み込んだ Sound オブジェクトをそのまま流す Sampler 音源についてはあまり大きな変更点はありませんが、いくつかのショートカット実装により短いコードで扱えるようになりました。扱う方法はいくつかありますが、たとえば SiONDriver.play() に Sound インスタンスを渡すと、再生と同時に Sampler 音源が鳴ります(ロード中ならロード終了まで待機してから再生を開始します)。
ギャップレスループ、2つのSoundのクロスフェード、エフェクト適用なども比較的簡単に扱えるので、単なるソフトシンセとしてだけでなく Sound をより高機能に扱うための統合環境として SiON を使えるようになってきました。

SiON MIDI module の追加(v0.652)

SiON MIDI Player | Si+ (wonderfl.net)
v0.65における最大のアップデートは MIDI 対応です。以前から org.si.sound.smf パッケージである程度 MIDI を扱えましたが(バグ持ちの上、設定が非常に面倒だった)、v0.652(現行最新バージョン)からは Standard MIDI File を SiONData とほぼ同じ感覚で扱えるようになりました。これに伴い様々な追加があります。

  • org.si.sion.midi.* に SiON MIDI module package の追加(v0.651まで org.si.sound.smf.* にあったパッケージが移動になりました)
  • org.si.sion.SiONDriver.midiModule プロパティの追加
  • org.si.sion.events.SiONMIDIEvent の追加 (SiON MIDI module から発行されるEvent)
  • org.si.sion.utils.SiONPresetVoice に 1オペレータ General MIDI 音色/ドラム音色の188音追加

SiON MIDI module は、再生時に Standard MIDI File のシーケンスを読み込みながら適時 SiONDriver を叩く事で演奏します。発音は SiONDriver が行うため、基本的には今まで SiON を使ってきた方法と同様に扱うことができます。
デフォルトでは音質よりパフォーマンスを優先するため、16パート32同時発音、全て1オペレータ/フィルタ無しの音色で構成された General MIDI 音色セットを使って演奏を行います(この音色セットでは前回エントリに書いた波形メモリ音源を使っています。実は波形編集ツールは SiON MIDI module を実現するための布石でした)。これら音源設定や音色はユーザー側で差し替え可能なので、上述の PCM 音色と組み合わて(ある意味ごく普通の)高音質 MIDI 音源や、FM 音色セットを用いた MIDI FM 音源、あえて矩形波/三角波/ノイズだけで構成した MIDI ファミコン音源なんかを作ることも可能です。これら SiON MIDI module の拡張性は、特徴的かつ面白いところだと思うので、今後さらに柔軟に拡張していく予定です。
使いかたは非常にシンプルで、SiONDriver.play() に SiONData や MML 文字列を渡す代わりに org.si.sion.midi.SMFData を渡すだけです。SMFData クラスは load() と loadBytes() メソッドを持っているので、これらを用いてネット/ローカルのMIDIファイルを読み込めば、あとは SiONDriver が演奏してくれます。

SoundLoaderクラス(v0.64)

org.si.sion.utils.soundloader.SoundLoader が追加されました。外部メディアファイルを簡単に一括して読み込むためのクラスで、BulkLoader の SiON 版みたいな感じです。SoundLoader.setURL() で url を設定して COMPLETE イベントのハンドラ登録後、loadAll() で全部ロードします。mp3 ファイルの他、MIDIファイル、wavファイル、後述のSiON Sound Fontファイル、画像、テキスト、バイナリファイルなどが読み込めます。
BulkLoader の仕様とか参考せずに独自実装してしまったのが悔やまれます。

SiONSoundFontクラス(v0.64)

org.si.sion.utils.soundfont 内に SiONSoundFont を扱うためのクラスが追加されました。SiONSoundFont は、PCM 音源で扱う mp3 ファイルや音色設定を外部のswfファイルとして1つにまとめる機能です。SiONSoundFontContainer を継承したクラスで embeded mp3 やMML文字列を内包した swf ファイルを作成して(SiONSoundFontContainer自体がSpriteの継承クラス) 、その swf ファイルを SiONSoundFontLoader(またはSoundLoader)で読み込むことで、音色セットとしてアクセスできるようになります。
Nomltest on Flash - wonderfl build flash onlineでは、地味にSoundLoaderとSiONSoundFontの機能を使用しています。

BPMAnalyerとPeakDetector(v0.65)

org.si.sion.utils.BPMAnalyer と PeakDetector が追加されました。これらは将来のバージョンでタイムストレッチ機能を実装するための布石なのですが、現バージョンの単体でも使えそうなので紹介しておきます。その名の通り BPM を解析するクラスと、音圧ピークを検出するクラスです。実際には PeakDetector 単体でも bpm を計算する機能が備わっていますが、まともな値を出すにはわりと専門知識が必要なため、より簡単に扱えるようにラッピングしたのが BPMAnalyer です。BPM の解析は確率統計的な処理なので、あくまでも「算出したbpmである可能性が高い」という事を提示する機能だと思ってください。使い方はシンプルで、BPMAnalyzer.estimateBPM() に解析したい Sound クラスを渡せば一番確率が高いと思われる bpm 値が戻ってきます。曲中の数箇所を4秒程度切り取って解析するので、全曲解析よりは圧倒的に軽いですが、それでもやや重い(瞬停程度)ので連続使用の際は注意してください。

その他

そのほか細かい機能追加が沢山あったはずなのですが、自分でも把握しきれてません。すいません。一応、思いつく範囲で上げておきます。

  • org.si.utils.ByteArrayExt(png画像への圧縮展開、browse()、IFFチャンクをサポートしたByteArrayの継承クラス)
  • org.si.sion.SiONVoice.setWaveTable()追加(SiONVoiceが波形テーブルを持てる)
  • org.si.sion.SiONDriver.setBackgroundSound()追加
  • org.si.sion.utils.SiONPresetVoice のプリセット音色数が462音⇒650音に増加
  • org.si.sion.utils.SiONPresetVoice に wave table(SiONPresetVoice.waveTables[28])音源波形の追加
  • org.si.sion.utils.PCMSample (wavデータを扱うクラスですが、まだフォーマット変換周りにバグ持ち)
  • org.si.sion.utils.Translator に関数追加。parseWAVB、parseWAVなど。
  • org.si.sion.sequencer.SiMMLTrack.setPitchBend()
  • org.si.sion.sequencer.SiMMLEnvelopTable をMML文字列やVector.から作成可能
  • その他大量のバグ修正

ソフトシンセから Sound を扱う統合環境へ

大きな変更点は以上になります。主に mp3 と MIDI という汎用性の高い部分が増強されました。今後はソフトシンセとしてだけでなく SiON のパワフルな音加工機能を Sound クラスや MIDI に適用できるような統合音楽環境を目指す方針です。
詳細な扱い方はまた後続エントリで紹介していきたいと思います。今後とも SiON をよろしくお願いいたします。