トップページ > 過去ログ > 記事閲覧
複数の音楽再生について
名前:クラウン 日時: 2008/01/05 11:56

こんにちは! 今、DXライブラリとC言語をつかってシューティングゲームを作っているんですが、拡張子がmidである音楽ファイルをPlayMusic関数を使って複数同時に再生すると再生できませんでした。やり方が悪いのでしょうか?? よろしければ教えて下さい。 開発環境 OS:WindowsXP 使用言語:C言語 開発ソフト:VisualC++2005ExpressEdition ライブラリ:DXライブラリ2_23

Page: 1 |

Re: 複数の音楽再生について ( No.1 )
名前:TNT 日時:2008/01/05 12:41

恐らく、MIDIファイルを複数同時に再生することはできないはずです。 構造上1つのファイルが物理デバイスを占拠するため、2つめのファイルが入り込む余地が無いためです。 (ソフトシンセの場合もハードシンセと互換であるでしょうから、同じだと思います) トラックをごちゃごちゃいじくって再生部のプログラムも自作して…というのは不可能ではないかもしれませんが、 少々現実味に乏しいです。 同時に再生する場合、MIDIは1つまでとして、残りはmp3やoggなどとする必要があります。
Re: 複数の音楽再生について ( No.2 )
名前:クラウン 日時:2008/01/05 13:22

TNTさんありがとうございました! なるほど、複数の音楽を流すのは無理なんですね・・・・。 では、バック音楽(戦闘中の背景音楽)と攻撃の効果音などの再生は、MIDIとMP3を組み合わせればいいと言うことなんでしょうか?
Re: 複数の音楽再生について ( No.3 )
名前:TNT 日時:2008/01/05 14:09

組み合わせとしては、MIDIが複数同時再生不可能という点を除けばどんな組み合わせも可能です。 ただ、各フォーマットにはそれぞれ特徴がありますので、用途にあったものを選ぶと良いと思います。 ファイルの特徴を少しまとめてみましょうか。 ・MIDI データの実体は楽譜のようなもの。再生はPCのMIDI音源に依存するため、意図しない演奏になる場合が多い。 酷い場合には聞けたものではなくなる。ファイル容量はきわめて軽い。 ・mp3 圧縮音源としては最も普及率が高い。しかし特許を抑えられているため、使用には注意が必要。 また、仕様上再生時にギャップが生じる(ループ時の切れ目にもなる) ・ogg mp3と同程度の圧縮率の音源。特許問題が無く、ゲームBGMとしてはmp3よりoggが主流。 ループ時の切れ目も無い(ギャップレス再生) 再生プレーヤーが少なく、単体で鑑賞するには不便。 ・wav 無圧縮音源ファイル。ファイルサイズが非常に大きいため、効果音程度にしか用いることができない。 (それも昔の話となりそうな今日この頃ではありますが…) 再生頻度と負荷、ギャップなどを考えると、効果音はwavそのままの方が良いと思います。 ネットに出回ってる効果音素材もwavが多いですし…
Re: 複数の音楽再生について ( No.4 )
名前:クラウン 日時:2008/01/05 14:41

なるほど、分かりました。ありがとうございます。 ちなみに、1分以上の再生時間の音楽が再生されない(再生されているが音が出ない)のは、コンピュータに問題があるのでしょうか? それとも、プログラムに問題があるのでしょうか? プログラムは下記になります。 void Stage_Prologue() { static int *SP_img , SP_Music ; static int Start_Time ; SP_img=&SP[0]; //添え字は現在のステージ番号 PlayMusic( "SP.mid" ,DX_PLAYTYPE_BACK ); Start_Time=GetNowCount(); // 開始時間を取得 SetDrawScreen(DX_SCREEN_BACK); // 描画先を裏描画に設定 while(1) { GetHitKeyStateAll( key ); // 入力キーの取得 ClearDrawScreen(); // 裏描画に描画 DrawGraph( 0 , 0 , *SP_img , FALSE ); // 画像表示 if( GetNowCount()-Start_Time>11000 ) break; ScreenFlip(); // 裏描画を表に反映 } StopMusic(); SFast_Flag=1; }
Re: 複数の音楽再生について ( No.5 )
名前:TNT 日時:2008/01/05 14:53

再生されないというのは、最初から全く再生されないということでしょうか? だとすると、ちょっと聞いたことのない症状です。 (稀に、MIDIファイルそのものに問題がある場合もありますけど) プログラムには問題があるようには見えないのですが…
Re: 複数の音楽再生について ( No.6 )
名前:クラウン 日時:2008/01/05 15:24

最初から再生されません。 CheckMusic()関数で再生中かどうか調べると再生はされているみたいなのですが・・・・。音が出ないんです。 5秒程度の音なら再生もされて音も出るのですが・・・・。
Re: 複数の音楽再生について ( No.7 )
名前:管理人 日時:2008/01/05 16:16

多分ですが、ProcessMessage を呼んでいないのが原因ではないかと思います。 宜しければ while(1) を while(ProcessMessage() == 0) に変更してみて下さい。
Re: 複数の音楽再生について ( No.8 )
名前:クラウン 日時:2008/01/05 17:05

TNTさん、管理人さんやはり、再生されませんでした・・・・。 ご迷惑をおかけして申し訳ありません。 また、なにか、わかりましたらよろしくおねがいします。
Re: 複数の音楽再生について ( No.9 )
名前:管理人 日時:2008/01/14 13:40

うーん、何故でしょう。 宜しければ再生されようとしている midi ファイルをメールで送るか、 ネット上からダウンロード出来るものでしたらその場所を教えて頂けないでしょうか?
Re: 複数の音楽再生について ( No.10 )
名前:クラウン 日時:2008/01/16 11:44

わかりました。 『www1.ocn.ne.jp/~scope/sozaimidi.htm』 になります。
Re: 複数の音楽再生について ( No.11 )
名前:管理人 日時:2008/01/28 00:31

こちらのどの midiファイルでしょうか? とりあえず3曲ほどダウンロードしてみましたが、正常に演奏されました。 『ここで退くわけにはいかない!』『最終決戦』『朝霧の森』 (因みに演奏を開始してから音が鳴るまでには多少間があるようです) もしかしたらクラウンさんのPCに搭載されているMIDIデバイスが原因 かもしれませんので、宜しければ DxLib_Init を使用する前に SelectMidiMode( DX_MIDIMODE_DM ); という記述を増やして、DirectMusic のソフトウエアMIDIで再生 するようにしてみてください。
Re: 複数の音楽再生について ( No.12 )
名前:KENOH 日時:2008/01/28 22:25

はじめまして。私もDXライブラリを使ってアクションゲームを開発しています。 もしかして、単にボリュームコントロールのSWシンセサイザのボリュームが最小になっていませんか? 私もクラウンさんと似たような現象が出て大変困っておりましたが、先述のことに気が付いて、ボリュームを調整したら、見事に音楽が奏でられました。
Re: 複数の音楽再生について ( No.13 )
名前:クラウン 日時:2008/02/01 17:23

管理人様、KENOH様ありがとうございます!! ためしてみますね! 関連事項(?)で質問なのですが、シューティングゲームなどに使われるような音楽(無料)を探しているのですが、もしご存知であれば教えていただけますか?

Page: 1 |