釈然としない

仕事でWindowsのマルチメディアAPIを使ってMIDIバイスにデータを書き込むアプリを書いたのだが、リリースビルドしたアプリでTiMidity++ Driverに書き込もうとすると何故かアプリが終了する。

特にエラーっぽいダイアログがでる訳でもなく、終了しちゃう。

使用しているのは TiMidity-CVS080328_setup_JPN.exe でインストールしたやつ。
動作検証したOSはWindows XP Professional SP2及びSP3のみ。
アプリはVisual C++ 2005 ProfessionalのWin32 コンソールなやつ。ちなみにVC++はサービスパック未適用。
「マルチメディアAPIを使って」というのは、具体的にはPlatform SDK (February 2003) のmidiOut*なAPIを叩いている。

色々試したら、以下のことが分かった。

  • Microsoft GS Wavetable SW Synthに書き込む場合は大丈夫。
  • リリースビルドしたアプリをVisual C++ 2005のデバッガで動かした場合は大丈夫。
  • リリースビルドでも、Cランタイムライブラリを「マルチスレッド デバッグ」又は「マルチスレッド デバッグ DLL」にしてビルドしたアプリでは大丈夫。

しかし原因は不明。

「もしかしてTiMidity++がデバッグ版でビルドされているというオチ?」と思ってソースというかMakefileというか色々と覗いてみたが、よく分からなかった。

結局リリース版でも「マルチスレッド デバッグ」を使うことで回避。まあテストアプリなのでこんな逃げ方でも何とかなるのが幸いというか、テストアプリなだけにGS Wavetableで延々とMIDIの曲を聴き続けることに耐えられなかったというか。

ピアノ曲は、できればヤマハの音源で聴きたいのだが。どこかにMU500とか落ちてないかなあ。

YAMAHA DTM用音源 [MU500]

YAMAHA DTM用音源 [MU500]