[ Main Page ]

Mid Radio Player's Soft Synthesizer for Wine/x86

S-YXG2006LE Screen Shot S-YXG50 VST Screen Shot

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}
      

Source

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にし、 簡易的コンプレッサを追加しました。

動作確認済み

MidRadio Player 4.5.4.1E / SGP.DLL 1.0.0.26(1.0.0) (sgpbinp1.tbl + sgpdatp0.tbl)

MidRadio Player 5.6.2.1 / SGP.DLL 1.0.0.26(1.0.0) (sgpbinp1.tbl + sgpdatp0.tbl)

MidRadio Player 6.0.0.1 / SGP.DLL 1.0.0.26(1.0.0) (sgpbinp1.tbl + sgpdatp0.tbl)

MidRadio Player 6.0.0.1 / SGP.DLL 1.0.0.26(1.0.0) (sgpbinp1.tbl + sxgwave4.tbl)

以上のversionに関して、内蔵ソフトシンセサイザーに関する情報は不明。おそらくS-YG20相当だと思われる。
GSデータもほぼ代替発音される。S-YG20の仕様を参考までに。
-音源方式ウェーブテーブル合成
-最大同時発音数32音(SGP.DLLでは64音)
-音色数359楽器音+11ドラム/SFXキット
-フィルター各音毎の時変動フィルター
-エフェクトリバーブ11種類、コーラス11種類、バリエーションなし
-サンプリング周波数44kHz
-対応MIDIフォーマットXGlite/GM1/GM2/TG300B

MidRadio Player 7.0.0.1 / SGP2.DLL (S-YXG2006LE) 1.0.0.20 (sxgbnw6l.tbl + sxgdat6l.tbl)

リズム演奏用Channelがおかしいことがある。
SC-88 SC-88Pro SC-8850などの、SC-55より新しい機種のGSデータは殆んど代替発音されない。
-対応MIDIフォーマット XG Lite、GM1
-最大同時発音数32音
-音色数361ノーマルボイス + 12ドラムキット
-エフェクトタイプ リバーブ×17、コーラス×17
もしかしたら、sxgbnw6l.tblにあるUTGという文字列は、大昔のTGシリーズのことかもしれません。

MidRadio Player 7.1.0.1 / SGP2.DLL (S-YXG2006LE) 1.0.2.22 (sxgbnw6l.tbl + sxgdat6l.tbl)

1.0.0.20の時のバグが直され、GSも代替発音されるようになりました。

YAMAHA XG SoftSynthesizer S-YXG50 VSTi 1.0 体験版 / S-YXG50.DLL 1.0.0.26(1.0.0t) (sxgbin41.tbl + sxgwave4.tbl)

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"を返す、 SOL2XGworks 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を改変して利用することは認められていないようです。

Samples

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]

   <dazjorz>  rindolf!
   <dazjorz>  areth thou here?
   <rindolf>  Hi dazjorz
   <dazjorz>  :)
   <rindolf>  dazjorz: yes, I are here.
   <dazjorz>  isn't it kind of weird to have a programming channel when
              there are language specific channels around?
       <Zuu>  Muhah!
   <rindolf>  dazjorz: this is about programming in general.
   <rindolf>  At least theoretically.
   <rindolf>  And VB.NET questions.
 <joeyadams>  Well, ##programming is a good place to ask C questions and
              actually get helpful answers :)
   <dazjorz>  rindolf: did you intentionally make it look like vb.net is
              not programming?
   <rindolf>  dazjorz: meet Zuu - he's into Windows and D and stuff.
   <dazjorz>  !
   <rindolf>  dazjorz: no.
   <rindolf>  dazjorz: VB.NET is programming.
   <dazjorz>  hey Zuu, I'm dazjorz, I'm into linux and c and stuff.
   <rindolf>  But it has its own channel.
       <Zuu>  :>
   <dazjorz>  rindolf: I've been thinking about changing nicks
   <rindolf>  dazjorz: ah. so did I.
           *  Zuu is into everything sane, except the boring stuff
   <rindolf>  dazjorz: to what?
   <dazjorz>  rindolf: my current one is waaaay too lame, but "sjors" is
              probably too generic
   <rindolf>  dazjorz: I like dazjorz
   <dazjorz>  rindolf: I don't, because when people see my name is sjors,
              da zjorz is just too lame to bear
   <dazjorz>  rindolf: I was thinking about sjors, or some three-letter
              abbreviation of my name, sjg or so
       <Zuu>  how about.... 'carrot' ?
   <dazjorz>  I think I do prefer dazjorz over carrot
       <Zuu>  no worries, i promise not to stuff you up rindolf's tomato
              nose
       <Zuu>  hum :<
   <dazjorz>  Zuu: when I first read your nick on Shlomi's site five
              minutes ago, I asked him whether you were a mix between
              Zorix and Buu
   <dazjorz>  do you know the two?
   <rindolf>  Zoffix and buu.
       <Zuu>  nope
   <dazjorz>  uh zoffix yeah
   <dazjorz>  Zuu: okay, well, you don't know them, but believe me, I'm
              glad you're not a mix of the two, that would be horrible :P
       <Zuu>  im a mix of much worse personalities im sure
       <Zuu>  most of them just happen to cancel each other out

    -- Introudcing dazjorz to Zuu
    -- ##programming, Freenode

         *  __you fart
         *  __you say "oops"
 <rindolf>  __you: heh
         *  __you kick rindolf
   <__you>  (rindolf, you're now being kicked by 435 people)
 <squeeks>  __you need to go outside.
  <kspath>  __you: Who owns you?
         *  __you go outside
         *  __you are pwned by dazjorz
         *  __you is now known as we
         *  we are having a useless off-topic conversation right now
 <rindolf>  we: hahah
         *  we we is now known as __you
         *  __you decide this channel is now useless and decide to leave
         *  simcop2387 is now known as we
         *  we are not amused
         *  __you and I are together simcop2387
         *  squeeks is now known as _I_
         *  _I_ need to tell __you something
         *  __you listen
         *  simcop2387 is now known as we
         *  we need help
         *  _I_ think we are getting a bit sick of the shenanigans
 <rindolf>  I'm so making a fortune out of it.
         *  we want to be on bash.org

    -- /me (or I, you or we) is finding it amusing
    -- #perl, Freenode


Powered by UNIX fortune(6)
[ Main Page ]