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