2015年02月24日

[暫定結論] 2015年2月24日現在の 64bit版 Cygwin(MinGW) 環境で,gcc を使って MIDI Yoke を認識できるアプリを生成するためには,gcc として i686-w64-mingw32-gcc か i686-pc-mingw32-gcc を使えばよい.

Web拍手:


複数の事情が絡んでいるのだけど,まず先に現在における暫定的な結論を.
2015年2月24日現在の 64bit版 Cygwin(MinGW) 環境で,gcc を使って MIDI Yoke を認識できるアプリを生成するためには,gcc として i686-w64-mingw32-gcci686-pc-mingw32-gcc を使えばよい.
Cygwin 環境用の 32bitアプリ生成 gcc である i686-pc-cygwin-gcc で生成したアプリでは認識されないので,注意.
個人的なオススメは,i686-w64-mingw32-gcc のほう.なぜかというと,本家 MinGW と違って MinGW-w64 はちゃんとメンテされ続けているから.

i686-w64-mingw32-gcc や i686-pc-mingw32-gcc でコンパイルすれば,MIDI Yoke を認識できるアプリが生成できるものの,

o Cygwin 環境向けの gcc と違って,POSIX準拠ではないなどの細々とした違いがあるので,正しく動作する実行ファイルを得るまでには多少のソース修正が必要.

o Cygwin 環境向けに生成されたアプリとは少し振る舞いが異なる.たとえば,入出力がかなりバッファリングされるようで,stdout だったら,適切なタイミングで fflush(stdout) するか,あらかじめ 「stty raw」で RAWモードにしておく必要がある.

o 生成されるバイナリは,cygwin1.dll が不要な Windows ネイティブバイナリらしいので,Cygwin 環境向けの実行ファイルよりもファイルサイズが大きくなる.数十キロバイトから数百キロバイトくらい?

o 生成されるバイナリは 32bitアプリ.これは,MIDI Yoke を認識させるために必要な条件なので,当たり前ではある.

などの違いがあるので,幾分の注意が必要.


さて,そもそも論 1 として,
MIDI Yoke の代わりに,64bit 対応の仮想 MIDI ケーブルドライバを使えばいいじゃーん」というのがあるのですが,これはそのうちに試してみて,よさそうなドライバに移行しようと思います.

そもそも論 2 として,
「VisualStudio でコンパイルして 32bit版と 64bit版のアプリを生成すればいいじゃーん」というのがあるのだけど,世の中にはまだまだ Cygwin(MinGW) 環境でコンパイルすることが前提となっているソフトウェアが多くあります.
たいていは,Windows/Mac/Linux などでも動くソフトウェアを作りたいときに,コードの書き分け量を少なくして楽をするために Windows 上では Cygwin(MinGW) 環境を想定するのだけど,これを VisualStudio でもコンパイルできるように後から修正するのは,結構な手間です.

そもそも論 3 として,
「C# とか Java とかで書けばいいじゃん」という話もあるのだけど,他人のソフトウェアだから,どうしようもないよねぇ.
あとは,ライセンスのこととか,ライブラリのこととか,性能のこととかもあるしー.

そもそも論 4 として,
「いつの頃からか,Cygwin 環境のデフォルトの gcc で生成されたアプリが,MIDI Yoke に限らず,あらゆる MIDI デバイスを認識できなくなった」という現象があります.
Roland の UA-4FX のような,以前は認識できていた 64bit 対応 MIDI デバイスも認識できない.
以前と違って,midiInGetNumDevs() は 0 を返してくるようになってしまったし,midiInGetDevCaps() で無理やり情報を取ってこようとしても,取ってこれない.
PortMIDI(PortMedia) の ML にも同じ主旨の投稿があったけれど,私の想像では,この現象は Cygwin の Win32 API 周りの不具合なんじゃなかろうかと思う.この推測の根拠は,MinGW の gcc で生成したアプリでは,以前と同じように MIDI デバイスが認識できるから.


ということで,ひさしぶりに,Cygwin 環境の中でいろいろと動かして調べてみました.
思っていたよりも,事情が複雑だったので,メモ書きしておきます.
(これを読んだ誰かが,このあたりの事情をすっきりと直してくれないかな(^^;))

まず,setup-x86_64.exe でインストールされる現在の 64bit版 Cygwin 環境には,次の 5 種類の gcc とその環境がインストールされます.

o x86_64-pc-cygwin-gcc (Cygwin 環境用 gcc, 64bitアプリを生成)
o i686-pc-cygwin-gcc (Cygwin 環境用 gcc, 32bitアプリを生成)

o i686-pc-mingw32-gcc (本家の MinGW の gcc.32bitアプリを生成)

o x86_64-w64-mingw32-gcc (分家の MinGW-w64 の gcc, 64bitアプリを生成)
o i686-w64-mingw32-gcc (分家の MinGW-w64 の gcc, 32bitアプリを生成)

確実な情報を探しだせなかったのですが,状況と試行錯誤の結果から,たぶんこれで間違っていないと思います.
なお,本家の MinGW は 64bit環境に対応していないので,本家 MinGW からの gcc は,32bitアプリを生成する gcc だけです.


「MIDI Yoke を認識できるアプリ」を生成するためには,アプリが 32bit版アプリでなければならないので,32bitアプリを生成する gcc を 3種使って 3種の実行ファイルを生成し,認識状況を調べてみました.

x i686-pc-cygwin-gcc (Cygwin 環境用 gcc, 32bitアプリを生成)
→ MIDI Yoke に限らず,あらゆる MIDI デバイスを認識できなかった.

o i686-pc-mingw32-gcc (本家の MinGW の gcc.32bitアプリを生成)
→ OK.MIDI Yoke を含め,いままでどおりに MIDI デバイスを認識した.

o i686-w64-mingw32-gcc (分家の MinGW-w64 の gcc, 32bitアプリを生成)
→ OK.MIDI Yoke を含め,いままでどおりに MIDI デバイスを認識した.

本来は,i686-pc-cygwin-gcc で生成される 32bit アプリも MIDIデバイスを認識できるはずなのですが,いつの頃からか認識されなくなってしまいました.
なんとなく,これは Cygwin の不具合(バグ)なのではないかと想像しています.


なお,64bitアプリを生成する gcc では,次の結果になりました.

- x86_64-pc-cygwin-gcc (Cygwin 環境用 gcc, 64bitアプリを生成)
→ MIDI Yoke は認識されない.UA-4FX のような 64bit対応 MIDI デバイスは認識される.

- x86_64-w64-mingw32-gcc (分家の MinGW-w64 の gcc, 64bitアプリを生成)
→ MIDI Yoke は認識されない.UA-4FX のような 64bit対応 MIDI デバイスは認識される.


ということで,
ドライバが 32bit環境から 64bit環境への移行の過渡期にある中で,
64bit版 Cygwin(MinGW) 環境で,gcc を使って MIDI Yoke を認識できるアプリを生成するためには,gcc として i686-w64-mingw32-gcc か i686-pc-mingw32-gcc を使えばよい,ということになりそうです.


==

2015年02月24日
MIDI Yoke は,32bit版アプリからは見えるけれど,64bit版アプリからは見えないようだ.なるほどねー,OS が 32bit OS か 64bit OS かではなく,アプリ側が 32bit版か 64bit版かで決まるのかー.
http://knoike.seesaa.net/article/414558534.html

2013年10月20日
Windows8 から 8.1 に上げたら,いくつかのデバイスドライバが外れてしまった.MIDI Yoke は普通にインストーラを実行するだけで再インストールできたけれど,「ドライバー署名の強制を無効にする」設定をしてからでないと,再インストールに失敗してしまうドライバもあった.
http://knoike.seesaa.net/article/378056532.html

2013年07月22日
64bit 版の Windows8 で,VSTi に対応していない MIDIソフトウェアから,MIDI Yoke → VSTHost → Pianoteq の VSTi とデータを流すことで,Pianoteq を鳴らすことができました.
http://knoike.seesaa.net/article/369907895.html

2013年04月30日
仮想 MIDI ケーブル・ソフトウェアの MIDI Yoke が Windows8 64bit 版でも動いた.そのままだとインストールができなかったので,「互換性のトラブルシューティング」を実行したところ,うまくインストールできました.
http://knoike.seesaa.net/article/357998715.html

2009年10月31日
MIDI Yoke が 64bit 版の Windows 7 で動いた.
http://knoike.seesaa.net/article/152841637.html

2009年05月09日
32bit 版の 7 で MIDI Yoke が動いた.
http://knoike.seesaa.net/article/152840205.html



【コンピュータの最新記事】
posted by NOIKE at 22:51 | 東京 ☁ | Comment(0) | TrackBack(2) | コンピュータ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

64bit版 Cygwin 環境にインストールされる 5 種類の gcc の内訳.
Excerpt: (ここにも書いたけれど,主旨を変えて別記事に.) setup-x86_64.exe でインストールされる 64bit版 Cygwin 環境にインストールされる 5 種類の gcc の内訳. 最初は,..
Weblog: とり茶
Tracked: 2015-02-24 23:31

仮想MIDIケーブルソフトウェアを,MIDI YokeからloopMIDIに移行した.LoopBeではなく,loopMIDI.64bitアプリからも32bitアプリからも問題なく認識される.LoopBe1と違って,いくらでもポートを増やせる.
Excerpt: 「loopMIDI | Tobias Erichsen」 http://www.tobias-erichsen.de/software/loopmidi.html 仮想 MIDI ケーブル..
Weblog: とり茶
Tracked: 2016-01-28 02:23
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。