Renoiseと4klangで作成した楽曲をexeで再生する
デモシーン制作では音楽も重要なので今週は音楽関連を学んでいました
検討した方法としては
- 映像同様シェーダーで生成する
- shadertoyでは音楽を生成するシェーダーが書けたりしますよね
- 4klang等の軽量ソフトシンセを使用する
- 4kデモシーンではこちらが一般的?なようです(要出展)
今回は、実行時の容量や音楽の作りやすさも考慮して4klangを使用することにしました。
ということで、4klangのサンプル楽曲を実際にexeで再生するところまでの備忘録を残します。
準備
必要なものを入手します
Renoiseをインストールする
4klangはRenoiseというトラッカー方式と呼ばれる入力方法の作曲ソフトで使用されることを推奨しているようなのでインストールします
私は3.1を使用しました
4klang 3.0を入手する
4klangのバージョン3.0を入手して適当な場所に解凍しておきます
執筆時点では3.1.1まで出ているようですが、3.0より後のバージョンではobj形式の出力に対応していないらしく、exeに組み込むのに人手間かかってしまいます
4klang - Alcatraz Software Synthesizer
音楽生成用のobjファイルを生成する
Renoiseと4klangを使用してexeにリンクするobjファイルを作成します
Renoiseのプラグイン設定をする
Renoiseを起動後、メニューの Edit>Prefarence>Plug/Misc
の一番上部にVSTプラグインのディレクトリを指定する箇所があるので4klangを解凍した先の 4klang_VSTi
を指定します
設定後、Renoiseを再起動するとプラグインが反映されます
マルチコア設定を解除する
当方の環境ではマルチコアで動作させると、音声再生時に挙動がおかしかったのでシングルコアにしておきましょう
メニューの Options>Multi Core/CPU Support
を 1CPU
にします
4klangを使用してサンプル楽曲をレコードする
赤丸の箇所をクリックして4klangを選択して読み込みます
読み込みが完了したら↓のようになるので、 File>Open Song
から 4klang_VSTi
に入っている example.xrns
を読み込みましょう
読み込みが完了すると4klangのウィンドウが現れるので、 Load Patch Data
を押下して同じフォルダの example.4kp
を読み込む
その後 Record
を押下した後、Renoiseに戻って音楽を再生する
任意の場所で再生を終了させて4klangウィンドウの PANIC!
を押下した後に Stop
でレコードを止める
objファイルの保存ダイアログが表示されるので好きな場所に保存して次に作成する空のプロジェクトと同じディレクトリに入れる
exeに組み込んで再生する
visual studioで適当な空のコンソールアプリプロジェクトを作る
プロジェクト設定の リンカー>入力>追加の依存ファイル
に winmm.lib
と 4klang.obj
を追加して↓のコードをソースファイルに書いてビルドする
#include <stdio.h> #include <windows.h> #include <mmsystem.h> #include "4klang.h" #define SND_CH (2 ) SAMPLE_TYPE snd_buf[MAX_SAMPLES * SND_CH * 50]; HWAVEOUT hWaveOut = NULL; WAVEHDR whdr = { (LPSTR)snd_buf, sizeof(snd_buf), 0, 0, WHDR_DONE, 0, NULL, 0 }; WAVEFORMATEX wfx = { 0x0003, SND_CH, SAMPLE_RATE, (SAMPLE_RATE * sizeof(SAMPLE_TYPE) * SND_CH), sizeof(SAMPLE_TYPE) * SND_CH, sizeof(SAMPLE_TYPE) * 8, 0, }; int main() { _4klang_render(snd_buf); waveOutOpen(&hWaveOut, WAVE_MAPPER, &wfx, 0, 0, CALLBACK_NULL); waveOutPrepareHeader(hWaveOut, &whdr, sizeof(WAVEHDR)); waveOutWrite(hWaveOut, &whdr, sizeof(WAVEHDR)); getchar(); return 0; }
以上で再生できる
かなり参考にさせていただいたページ