[ 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]

A few days ago I joined #mandriva on Freenode trying to get to the bottom of a
problem I have with KMail at work, where I cannot start KAddressBook from
inside it. I asked my question and soon afterwards received:

* One Thunderbird recommendation.
* Two Evolution recommendations.
* One Sylpheed Claws recommendation.
* One GMail recommendation.

The problem is that I wasn't interested to learn about alternative E-mail
clients, and just wanted to get my problem solved. And in GMail's case it was
completely out of the question due to my work's constraints.

-- Shlomi Fish in --
http://www.shlomifish.org/philosophy/computers/web/use-qmail-instead/

    -- Shlomi Fish
    -- The "Use qmail instead" Syndrome ( http://www.shlomifish.org/philosophy/computers/web/use-qmail-instead/ )

          <rindolf>  dazjorz: I considered switching my default nick to
                     "shlomif", because that's how most people know me.
          <dazjorz>  rindolf: yeah, it's your alternative nick now right?
          <rindolf>  dazjorz: but then XChat2 reverted to the old nick and
                     I was too lazy.
           <unreal>  You seem to have many, well, stupid friends, rindolf
                     :P
          <rindolf>  dazjorz: yes, I have it registered.
          <rindolf>  unreal: stupid?
              <Zuu>  rindolf, noo! what to do about the tomato then? fish
                     dont have big tomato noses!
          <rindolf>  Zuu: fish?
          <rindolf>  Zuu: I'll give you a tomoato.
              <Zuu>  good question
          <rindolf>  I'll give you the tomato back.
              <Zuu>  where do i get fish from
              <Zuu>  no no, keep it :D
          <rindolf>  Zuu: my last name is Fish.
                  *  tommy_the-dragon slaps zuu with a fish
 <tommy_the-dragon>  there ya go
          <dazjorz>  rindolf: I just registered 'sjors'
                  *  rindolf gives a fish to Zuu
          <dazjorz>  rindolf: as a nick.
              <Zuu>  rindolf, thats just absurd, a reindeer with 'fish' as
                     surname...
              <Zuu>  your parents must have hated you
          <rindolf>  Open source: "everyone contributes a fish, and in
                     exchange everyone gets their own ocean."
          <rindolf>  dazjorz: ah, cool.
              <Zuu>  tommy_the-dragon, does dragons eat other animals,
                     like fish?
           <unreal>  Ocean == Big Momma's Bath?
          <rindolf>  Zuu: I'm not a reindeer - I just play one on T.V.
 <tommy_the-dragon>  not fish...
 <tommy_the-dragon>  just reindeers
              <Zuu>  tommy_the-dragon, what about fake TV reindeers ?
              <Zuu>  Nice :D
          <rindolf>  unreal: no, the whole enchilada.
          <rindolf>  tommy_the-dragon: LOL.
 <tommy_the-dragon>  and enchiladas
          <dazjorz>  rindolf: I know someone whose nick is Stonehead, he
                     made his three-letter acronym stn, but usually it's
                     letters from the first name
          <dazjorz>  uh
          <dazjorz>  the full name
          <dazjorz>  yours could be shf for example, and everybody would
                     know "hey, that's shlomi"
          <dazjorz>  but I'm at most sg, so I need to borrow another
                     letter somewhere, or make it daz or just sjors
                  *  dazjorz thinks
 <tommy_the-dragon>  my cat eats flies...
          <rindolf>  dazjorz: I hate these three letter acronyms.
              <Zuu>  shlomi really sounds like some dish made of reindeer
 <tommy_the-dragon>  but hes lucky because i dont eat cats
          <rindolf>  Zuu: heh.
           <unreal>  heh
          <rindolf>  tommy_the-dragon: I didn't know dragons had cats.
          <dazjorz>  what's the name of the red-nosed reindeer again?
              <Zuu>  it sounds edible at least
          <dazjorz>  oh rudolf :)
          <rindolf>  dazjorz: Randolph.
          <dazjorz>  oh
           <unreal>  I used to have a friend whos nick was "crap"
          <rindolf>  unreal: wow.
          <dazjorz>  <someguy> crap, someone stole my bicycle
          <dazjorz>  <crap> ok?
          <rindolf>  dazjorz: heh.
          <dazjorz>  rindolf: why don't you like the three-letter
                     acronyms?
          <rindolf>  dazjorz: often too confusing.
          <rindolf>  dazjorz: and two easy to mistype.
          <rindolf>  dazjorz: and not too memorable.
           <unreal>  LIS.
          <dazjorz>  three easy to mistype, I think
          <rindolf>  And often hard to pronounce.
          <dazjorz>  maybe I'll just go with sjors
          <rindolf>  too easy. Freudian.
          <rindolf>  dazjorz: yes, I think that's a good idea.
           <unreal>  (Lies, I say!)
          <dazjorz>  hehe, rindolf++ # freudian
              <Zuu>  or you could pick something girly and hope people
                     will treat you nicer :)
          <rindolf>  dazjorz: have you played with the farnsworth bot yet?
          <rindolf>  Zuu: RinGirl
          <rindolf>  Though nicks with "Girl " in them tend to draw too
                     much attention.
              <Zuu>  nah, it cant contain 'girl' that just seems fake
          <dazjorz>  rindolf: I have
          <dazjorz>  rindolf: remind me to fix knotify, khtml, and quassel
                     :(
          <rindolf>  dazjorz: nice.
          <rindolf>  dazjorz: using MemoServ?
          <dazjorz>  rindolf: the bugs annoy me, a lot, but I never get
                     around to actually trying to fix them
          <rindolf>  Zuu: maybe I should call myself "shlomi". Americans
                     will think I'm a girl.
              <Zuu>  yeah, it kinda have a girlish sound to it
          <dazjorz>  rindolf: call yourself shloma, dutch people will
                     think you're over sixty and female
          <rindolf>  dazjorz: heh.
          <dazjorz>  let me rephase that
          <dazjorz>  dutch people will think you're female... and over
                     sixty
          <dazjorz>  (oma = grandma)
          <rindolf>  dazjorz: ah.
           <unreal>  kloot.
          <rindolf>  In Hebrew nouns that end with "ah" tend to be
                     feminine.
          <dazjorz>  shlomah?
          <rindolf>  Seriously now, if I change my nick it will be to
                     shlomif.
          <dazjorz>  let's change our nicks at the same time
          <rindolf>  Well, in Shlomi's case it would be Shlomith.
          <dazjorz>  I will be sjors, you will be shlomif
          <rindolf>  dazjorz: OK.
                  *  rindolf is now known as shlomif
          <dazjorz>  shit, now I have to
              <Zuu>  what does shlimif even mean ?
                  *  dazjorz is now known as sjors
            <sjors>  Zuu: shlomi = his first name, f = the first letter of
                     his last name
          <shlomif>  sjors: hi.
          <shlomif>  Zuu: shlomi fish.
            <sjors>  hi shlomif
          <shlomif>  Hi sjors
 <tommy_the-dragon>  where does rindolf come into it?
          <shlomif>  sjors: my nick is longer than yours.
              <Zuu>  oh lol, and i just said his name sound girly :P
                  *  Zuu pat pats shlomif ^^
          <shlomif>  tommy_the-dragon: Rindolf was a dwarven warrior I
                     played in AD&D.
 <tommy_the-dragon>  ahh ok
                  *  shlomif gives Zuu his tomato back.
              <Zuu>  :<
          <shlomif>  Since I'm no longer a reindeer.
            <sjors>  shlomif: that's just to compensate against something
                     you have that's way shorter than mine
          <shlomif>  sjors: LOL.
          <shlomif>  sjors++
              <Zuu>  Erhmm.. shlomif! how come there's this big hole in
                     it?
 <tommy_the-dragon>  sorry...
 <tommy_the-dragon>  my bad
              <Zuu>  Hehe
                  *  shlomif doesn't like raw tomatoes.
          <shlomif>  But I eat them with pasta, etc.
          <shlomif>  Or as meat sauce.
              <Zuu>  or in sandwiches
          <shlomif>  sjors: anyway, welcome to ##programming
              <Zuu>  or on reindeer nose
          <shlomif>  sjors: I'll probably revert to "rindolf" after next
                     disconnect.
          <shlomif>  Zuu: after you cook the entire reindeer.
                  *  shlomif is a reindeer cannibal.
          <shlomif>  Well, rindolf is.
              <Zuu>  yes, but he ran away
          <shlomif>  I also like dried and olive oiled tomatoes.
            <sjors>  shlomif: I just changed my clients' settings to
                     reconnect as sjors, too
          <shlomif>  Well, I think I'll go to sleep.
          <shlomif>  sjors: ah.
            <sjors>  shlomif: it'll probably take a while to "adapt" to
                     sjors instead of dazjorz
          <shlomif>  sjors: well, enjoy your new nick.
            <sjors>  and I still have dazjorz.com, and not sjors.anything
                  *  Zuu tugs shlomif in
            <sjors>  thanks ;)
          <shlomif>  Zuu: thanks.
                  *  Zuu quicly squeeses a fresh tomato onto shlomif's
                     nose
            <sjors>  shlomif: sjors.biz and sjors.mobi at most
                  *  shlomif doesn't have rindolf.{com,org,net} etc.
          <shlomif>  sjors: maybe sjors.in
          <shlomif>  I got a shlom.in
            <sjors>  sjors.indahou.se
          <shlomif>  sjors: heh.
            <sjors>  sjors.ac, sjors.ag, sjors.am, sjors.at
            <sjors>  hehe sjors.me
            <sjors>  sjors.pl, too bad i don't really do perl anymore
          <shlomif>  sjors: there's also .sh
            <sjors>  sjors.sh, too bad I don't really do shell script a
                     lot
          <shlomif>  Or .im
            <sjors>  sjors.tv, too bad I don't really watch..
 <tommy_the-dragon>  do you own a mobile?
          <shlomif>  .tv are pretty costly.
            <sjors>  meh I don't like sjors. anyway, so I'll just keep
                     dazjorz for everything
 <tommy_the-dragon>  yeah whats with that (the price of .tv)?
          <shlomif>  tommy_the-dragon: it's the foundation of the economy
                     of Tuvaly.

    -- Reindeers, Tomatoes and Normalising Nicks
    -- ##programming, Freenode


Powered by UNIX fortune(6)
[ Main Page ]