OSDN Ticket Archive


Ticket #33674

MIDI OUTにNSX-39を選択すると再生開始直後にエラー発生

登録: 2014-04-13 23:49 最終更新: 2014-04-20 23:57

報告者:
yknk
担当者:
yknk
チケットの種類:
バグ
状況:
完了
コンポーネント:
MIDITrail Ver.1.2.x for Windows
マイルストーン:
Version 1.2.1b for Windows (完了済み)
優先度:
7
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

MIDI OUTにポケット・ミク(NSX-39)を選択しているとき、 MIDIデータの再生開始直後に次のエラーが発生する。 このためMIDIデータを再生することができない。

Program error.
FUNC: SMIDILib::SMOutDevCtrl::SetPortDev
LINE: 163
INFO: 00000000 00000000

チケットの履歴

2014-04-13 23:49 更新者: yknk
  • 新しいチケット "MIDI OUTにNSX-39を選択すると再生開始直後にエラーが発生する" が作成されました
2014-04-13 23:50 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • マイルストーン(未割り当て) から Version 1.2.1b for Windows (完了済み) に更新されました
2014-04-13 23:54 更新者: yknk
コメント

原因

設定ファイルクラス(YNConfFile)の不具合。

NSX-39ののデバイス情報をmidiOutGetDevCapsで取得するとき、 プロダクト名称(MIDIOUTCAPS.szPname)には"NSX-39 "が返される。 このプロダクト名称には、末尾に空白文字が含まれている。 MIDI OUT選択デバイスのプロダクト名称を、末尾に空白文字が含まれている状態でINIファイルに登録する。 しかしINIファイルから値を取得するときは、末尾の空白文字が削られて"NSX-39"が返される。 値末尾の空白文字が削られるのは、INIファイルの仕様である。

再生開始時の処理でエラーが発生する理由を以下に示す。

1. INIファイルから選択されているMIDI OUTデバイスのプロダクト名称を取得すると"NSX-39"だった。
   この時点で末尾の空白文字が削られている。
2. MIDI OUTデバイス一覧から、同じプロダクト名称を持つデバイスを検索したが見つからないため、エラーが発生した。
   デバイス一覧に登録されているプロダクト名称は、midiOutGetDevCapsで取得した"NSX-39 "であり、
   末尾に空白文字を含むものである。このため検索時にマッチしなかった。
YNConfFile::SetStrでは、指定された文字列をそのままINIファイルに登録していた。 このためYNConfFile::GetStrで、登録した値を取得するとき、末尾の空白文字が削られる場合がある。

2014-04-13 23:55 更新者: yknk
コメント

補足

midiOutGetDevCapsでNSX-39のデバイス情報を取得するとき、 デバイス情報に含まれるプロダクト名称は、OSによって値が異なる。

  • Windows XP → "USB オーディオ デバイス"
  • Windows Vista → "NSX-39 " 末尾に空白文字1文字を含む
  • Windows 7 → "NSX-39 " 末尾に空白文字1文字を含む
  • Windows 8 → "NSX-39 " 末尾に空白文字1文字を含む

Windows XPでは、末尾に空白文字を含まないプロダクト名称を返すため、 本チケットの現象は発生しない。

2014-04-13 23:56 更新者: yknk
コメント

対策

YNConfFile::SetStrにて、文字列をINIファイルに登録するとき、値をシングルクォートで囲む。 YNConfFile::GetStrで値を取得するときは、シングルクォートを含まない状態で値を取得できる。

2014-04-20 22:43 更新者: yknk
  • 概要が更新されました
2014-04-20 23:57 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2014-04-20 23:57 に更新されました

添付ファイルリスト

添付ファイルはありません