• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:midiの再生が思うようにできません)

midiの再生が思うようにできません

このQ&Aのポイント
  • ファイルの文字列を1行ずつ読み込み、文字列の数字の範囲によって再生する音楽を変えるプログラムを作成していますが、読み込んだ文字列とは無関係に、ループの初めの範囲で指定してある音楽しか再生されません。
  • 読み込んだ文字列ごとに再生音楽を変えるにはどうすればいいのでしょうか?
  • 環境:WindowsXP, Visual C++ 2008 Express Edition

質問者が選んだベストアンサー

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.1

>読み込んだ文字列とは無関係に、ループの初めの範囲で指定してある音楽しか再生されません。 >読み込んだ文字列ごとに再生音楽を変えるにはどうすればいいのでしょうか?  読み込んだ「文字列」を、範囲指定で用いている? m n へ「関係」付けている部分が見あたりませんが・・???  文字列の仕様と、「関係」付けている部分(「以下省略」部分?)を補足していただければ、「回答」がつくと思われます。 +++++++++++++++++++++++++++++++++++++++ 現状では、  ・読み込まれる文字列をテーブル化し、m n と関係付ける。  ・文字列に「数」が2つ、そのものズバリ含まれるのなら、数値化する関数( atoi() 等)を用い m n へ代入する。 としか・・。 蛇足 if((m>=0 && m<110)&&(n>=0 && n<200)){    ・(略) return 0; }else if((m>=110 && m<220)&&(n>=0 && n<200)){    ・(略)    ・(略) return 0; }else if((m>=660 && m<770)&&(n>=0 && n<200)){    ・(略) return 0; } この50行は、( m n は負ではないと仮定)  ・char cTitle[ 8 ] = { "CDEFGAB" }; と異なる部分を配列にし、  ・共通部分( n >= 0 && n < 200 )を大外に、    if( n < 200 ){      for( i = 0; i < 7; i++ ){        if( m < ( 110 * ( 1 + i ) ) ){ // 110,220,330,・・770          ・(略:メッセージ?文字列作成等)          return( 0 );        }      }    }   と簡略化できますよ。もちろん else 「なんて」そもそもから不要です。

m22015
質問者

お礼

遅くなりましたが、回答ありがとうございます。 ファイルは %YAML:1.0 - { x:476, y:36 } - { x:789, y:121 } - { x:546, y:61 } - { x:109, y:300 } - { x:560, y:87 } - { x:462, y:20 }     ・     ・     ・ のようになっています。 数値の変化するごとに、mとnで範囲を指定した音楽を再生させたいと考えているのですが・・・。 あと、訂正ですが while(_stprintf(buf, _T("- { x:%d, y:%d }"), m, n)!=EOF){ ではなくて、 while(_stscanf(buf, _T("- { x:%d, y:%d }"), m, n)!=EOF){ です(>_<;) ごめんなさい。 if-elseは簡略化できるんですね!ありがとうございます!!