YAMAHAのMidRadio Player
にはXGlite相当のSoft Synthesizerが搭載されていますが、Linuxではwineのもとでは不安定です。
そこで、MidRadio.exeなしに使えるようにしてみました。要はVSTi Pluginを使えるようにしたわけです。
MIDIのイベントのhandlingが不完全なので、beta版です。
使う前に、LinuxMidRadio/src/midiplay[67].shで使用するDLLと初期化関数名(通常はmain)を指定して下さい。
詳しいことはソースを読んで下さい。
unhandled exceptionで終了する場合は、*.cppの#define BUFSIZE 0x10000
の数値を更に大きくすることで対処して下さい。ただし、この数値の上限は不明です。
VSTについてはMaking VST plugins with MinGW / MSYSを参考にして下さい。
midiplay6.sh
#!/bin/sh
export set SGP_DLL="/tmp/YAMAHA/MidRadio Player6/Addins/SGP.DLL"
export set PROC=main
export set ALSAPLAY="aplay -f FLOAT_LE -r 44100 -c 2 -"
if [ "$1" = "" ]; then
echo $0 midifile
exit
fi
./test6 "${SGP_DLL}" ${PROC} "$1" | ${ALSAPLAY}
teru@server ~/src/wine/LinuxMidRadio/src $ ./midiplay7.sh ~/midis/The\ Legend\ Of\ Heroes\ V/ED5GM118.MID
Using /tmp/YAMAHA/MidRadio Player7/Addins/SGP2.DLL(main)
file:/home/teru/midis/The Legend Of Heroes V/ED5GM118.MID
[time_base = 480]
[micro_tempo = 1500000]
再生中 raw データ 'stdin' : Float 32 bit Little Endian, レート 44100 Hz, ステレオ
0000fd03|0000f7a1|00000562| 0}
[micro_tempo = 400000]
000197b2|00019642|00000170| 0}
LMR 1.0.0 for Wine/x86
uname -iはi386である必要があります。winegcc/wineg++が必要です。ちなみに、winegccバイナリは?.exe.soですが、?で実行します。
LMR 2.0.0 for Wine/x86
Freeverb+NReverbを組み込み、デフォルトのSampling Rateを96kHzに、
出力フォーマットをSigned 32 Bit Little Endianにし、
簡易的コンプレッサを追加しました。
以上のversionに関して、内蔵ソフトシンセサイザーに関する情報は不明。おそらくS-YG20相当だと思われる。
GSデータもほぼ代替発音される。S-YG20の仕様を参考までに。
-音源方式ウェーブテーブル合成
-最大同時発音数32音(SGP.DLLでは64音)
-音色数359楽器音+11ドラム/SFXキット
-フィルター各音毎の時変動フィルター
-エフェクトリバーブ11種類、コーラス11種類、バリエーションなし
-サンプリング周波数44kHz
-対応MIDIフォーマットXGlite/GM1/GM2/TG300B
リズム演奏用Channelがおかしいことがある。
SC-88 SC-88Pro SC-8850などの、SC-55より新しい機種のGSデータは殆んど代替発音されない。
-対応MIDIフォーマット XG Lite、GM1
-最大同時発音数32音
-音色数361ノーマルボイス + 12ドラムキット
-エフェクトタイプ リバーブ×17、コーラス×17
もしかしたら、sxgbnw6l.tblにあるUTGという文字列は、大昔のTGシリーズのことかもしれません。
1.0.0.20の時のバグが直され、GSも代替発音されるようになりました。
XGWorks STまたは
SOL2に附属しています。
Wine上でインストール作業を行なって、ライセンス情報がRegistryに入力されている必要があります。
-音源方式 AWM(ウエーブテーブル合成)
-最大同時発音数 128音(CPUの性能に依存)
-演奏パート数16パート
-音色数676音色+21ドラムキット/SFXキット(XGモード:480音色+11ドラムキット/SFXキット)
-演奏モード XG/TG300B
-サンプリング周波数 44.1KHz/22.05KHz/11.025KHz
-出力16ビットステレオ
-エフェクト3系統(リバーブ×11タイプ、コーラス×11タイプ、バリエーション×43タイプ)
S-YXG50 VSTi体験版自体はSOL2体験版かXGWorks ST体験版の中に入っています。
体験版の制限は以下の通りです。
==S-YXG50をご使用の際、周期的に音が出なくなり、10分後には完全に音が出なくなります。
==プラグインし直せば再度音は出ますが、使用期限経過後は使用できなくなります。
単体で買えないのは残念かもしれません。
完全にVSTiを実装していません。
MidRadio Player附属のSGP.DLL/SGP2.DLLがどの程度VSTi Pluginに準拠するかは不明です。
MidRadio Player 7以降ではGSデータをサポートしないようです。
pmidiのmidread.cを正しく使っていません。
少なくとも公開されている情報のみに基づいて作っているので、
SystemExclusiveの扱いが正しいかは不明です。
また、MidiEventFrame間隔の境界上でのイベントが正しくHandleされないことがあります。
テンポが変化する時のMidiEventFrameのhandlingに問題があるため、テンポ変化時に
いくつかのEventが無視される事があります。
MidRadio Player 7で一新された内蔵音源や如何に?
MidRadio Player 6 内蔵音源への誘い
Kobarinのホームページ - KbMedia Player
kbsmaf.kpiはMidRadio PlayerのOCXを利用しているようです。
Delphi VST sdk
VSTi開発概要
THE Yvan Grabit DEVELOPER RESOURCE (SDK入手先)
Frieve (Music Studio ProducerはVSTを扱えます。)
MUSIC eCLUB(ミュージックイークラブ) MidRadio Player Download
Player's Paradise MidRadio Player Download
SGP.DLL/SGP2.DLLは、audioMasterGetVendorStringが"YAMAHA"を返す、
SOL2や
XGworks ST
などのYAMAHA製VSTiホストアプリケーションで使用できることが確認されています。
この場合、*.tblはDLLと同じ場所にあることが必要です。使用する場合は*.tblも同時にコピーする必要があります。
MidRadio Playerでは、VSTiのDLLを、SGP.DLL(MidRadio Player6)またはSGP2.DLL(MidRadio Player7)
に変更してAddinsフォルダに入れることで、SGP.DLL以外のVSTiを利用できます。(例:S-YXG50.DLL、Hyper Canvas.DLL)
SGP2.DLLを改変して利用することは認められていないようです。
SGP.DLL/SGP2.DLL/S-YXG50.DLLは96kHzまではとりあえず正常に動く。
プシュケの屋敷 ... S-YXG50.DLL + libfreeverb
[96kHz][ogg]
使用無料MIDI素材「想い川」 ... SGP2.DLL + libfreeverb
[96kHz][ogg]
... S-YXG50.DLL + libfreeverb3 NReverb
[mp3]
You never know how many friends you have until you rent a house on the beach. Take my advice, I don't use it anyway. -- One of Nadav Har'El's Email Signatures.