ページ 1 / 1
【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 17:34
by amehirune
現在、ゲームプログラムで音楽室を仮実装しています。
その時のソースコードでちょっと不安を覚えたので、質問させていただきます。
龍神録48章のソースを参考にしていると、音楽室を実装するにはちょっと面倒な部分が見つかり、
そこをいろいろと変更させていただきました。
そこが、「音楽データを再生直前にロード」し、「不要になったら破棄する」操作です。
以上の部分を、「load.cppで読み込んで、選択に応じて再生」させるようにしているのですが…。
(分かりにくいですね^^; 要望があれば、ソースコードを載せたいと思います。)
ここで質問です。
1:楽曲データ17曲分のoggデータをロードし保存するとなると、やはり相当量のメモリを食うことになりますよね。
これはゲームのパフォーマンスには影響が出る程度の負荷がかかってしまう程度なのでしょうか?
2:もし、負荷がかかるのであれば、音楽室を実装しやすく、且つメモリもそこまで食わないようなソースの書き方として、
参考程度でいいのでアドバイスをいただけたら幸いです。
3:(これは全く関係なく、個人的な要望で、管理人さんへの質問ですが)龍神録には音楽室は実装されないのでしょうか?
すべていい曲ですので、著作権的な問題が発生するのであれば、楽曲名の紹介や提供先など教えて頂ければ幸いです。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 18:54
by softya(ソフト屋)
PlaySoundFile()だとダメなのでしょうか?
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 19:28
by amehirune
softya(ソフト屋) さんが書きました:PlaySoundFile()だとダメなのでしょうか?
その手があったか! と、思いましたが、それは使ったことのないので確認させてください。
1:PlaySoundFileでは、ファイルのパス指定はできますか?
2:ループ位置の設定はどうやって行えばいいですか?
3:("../music/%d.ogg",play_knd,…);のような書き方はできますか?
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 19:36
by softya(ソフト屋)
こんな感じです。1.は問題なし。2.は無いですかね。先頭オンリーです。随時ファイルを読み込むので任意の位置は難しいですね。3.に関してはsprintfをを使いください。
「PlaySoundFile」
http://homepage2.nifty.com/natupaji/DxL ... sound.html
リファレンスは、たまに見たほうが良いですよ。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 19:40
by amehirune
せっかくご提案なさって、こんな返答をするのは恐縮ですが、
ループ位置の設定ができないのであれば、それを使うのはちょっと無理そうです…。
因みに、先頭の質問に関してはどうお考えですか?
【追伸】リファレンスのリンク、ありがとうございました。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 19:45
by softya(ソフト屋)
oggのサイズがわからないので答えようがないですが、パソコンの搭載メモリによるでしょう。
メモリに余裕があるなら、別に気にする必要はないです。
ただし、最初に全部読み込むとなると時間を食うかもしれませんので、起動したくなくなる恐れはあります。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 19:47
by Dixq (管理人)
メモリに展開せずに再生する方法がありますよ。
今携帯しか手元にないので詳しくは帰宅してから。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 19:50
by amehirune
そうですか…。回答ありがとうございます。
なるべくファイルサイズを小さくしてみる努力が必要ですかね(汗)
こちらでも、またいろいろとソースを変更してみることにします。
その他意見等がありましたら、よろしくお願いします。
【追記】
一応3番に関しての回答や、その他の意見等もお聞きしたいので、解決とは致しません。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 19:54
by amehirune
なんかいつの間にか返信着てましたね;
Dixq (管理人) さんが書きました:メモリに展開せずに再生する方法がありますよ。
今携帯しか手元にないので詳しくは帰宅してから。
そうなんですか!?
いつでも大丈夫です。よろしくお願いします!
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月15日(木) 20:20
by Dixq (管理人)
この関数の説明をご覧ください。
http://homepage2.nifty.com/natupaji/DxL ... tml#R15N25
① DX_SOUNDDATATYPE_MEMNOPRESS (デフォルト)
説明:音声データを直接再生できる状態にしてメモリ上に保存
読み込み速度:遅い 再生負荷:速い 必要メモリ領域:大きい
② DX_SOUNDDATATYPE_MEMPRESS
説明: 圧縮されている音声データをメモリ上に保存、再生時に
リアルタイムで圧縮データを展開、音声データが圧縮されて
いない場合は DX_SOUNDDATATYPE_MEMNOPRESS よりかえって
必要メモリ容量、再生負荷、読み込み速度全ての面で不利になる
読み込み速度:普通 再生負荷:少し重い 必要メモリ領域:普通
③ DX_SOUNDDATATYPE_FILE
説明: 音声データを再生時にファイルからリアルタイムに
メモリ上に読み込む、音声データが圧縮されている場合は
読み込んだ時に展開する
読み込み速度:速い 再生負荷:重い 必要メモリ領域:軽い
とありますので、③を使うとメモリに展開することなく再生できます。
リアルタイムでコードを行うので負荷はかかりますが、ミュージックルームなら他にかかる負荷も無いと思うので良いと思います。
3:(これは全く関係なく、個人的な要望で、管理人さんへの質問ですが)龍神録には音楽室は実装されないのでしょうか?
すべていい曲ですので、著作権的な問題が発生するのであれば、楽曲名の紹介や提供先など教えて頂ければ幸いです。
龍神録は6年も前に作ったゲームですし、あまり今からバージョンアップするつもりもないです。
ミュージックルームの実装はよくリクエストをもらったのですが、それを実装する時間でオマケ弾幕の一つでも追加した方がいいかなと思ってなかなか実装できずにいました。
使っている曲のほとんどは煉獄庭園さんの曲です。
http://www.rengoku-teien.com/
良い曲ばかりなので良ければお聞きください。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月16日(金) 08:08
by amehirune
回答ありがとうございます。
成程、そのような関数があったのですね!
どの関数を使うかについては、いろいろ試しながら検討していきたいと思っています。
3番の回答に関して…
そうだったのですか…。わざわざご回答いただき、ありがとうございました!
一応このトピックについては解決といたしますが、ご提案は随時受け付けておりますのでよろしくお願いします。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月17日(土) 04:52
by rascal
こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月20日(火) 16:47
by amehirune
rascal さんが書きました:こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました
Σ( ゜Д ゜ ;)…!! なん…だと…。
その考えは、…実はあったのですが(笑)
保管場所のほうを…というのは、目からうろこです!! なんかそっちのほうがよさそうですね^^
って、これで素人考えなのですか…(汗)
私も素人なので、これって実際にありなのか? というのを熟練さんたちにお聞きしたいです。
【追記】返信遅れて申し訳ありません!!
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月21日(水) 04:59
by hide
Dixqさんが示したページにもありますが ボタンを押してから毎回メモリに展開だと
曲のデータのサイズが大きい場合に再生ボタンを押してからのレスポンスが遅くなる可能性は割とあると思います。
ボタンを押しても反応がおそいとユーザーが「あれ?」と思うでしょう。
結局一曲だけメモリに展開するくらいなら DX_SOUNDDATATYPE_FILE でやってしまえばいいと思います。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月21日(水) 09:47
by softya(ソフト屋)
amehirune さんが書きました:rascal さんが書きました:こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました
Σ( ゜Д ゜ ;)…!! なん…だと…。
その考えは、…実はあったのですが(笑)
保管場所のほうを…というのは、目からうろこです!! なんかそっちのほうがよさそうですね^^
って、これで素人考えなのですか…(汗)
私も素人なので、これって実際にありなのか? というのを熟練さんたちにお聞きしたいです。
【追記】返信遅れて申し訳ありません!!
構造体配列=テーブルの事だと思いますが、プロでも普通に使いますよ。
rascalさんの書かれた実装方法は、ごくありうる普通の実装だと思います。
Re: 【龍神録】音楽室(Music_Room)の実装について
Posted: 2014年5月22日(木) 17:06
by amehirune
hide さんが書きました:
結局一曲だけメモリに展開するくらいなら DX_SOUNDDATATYPE_FILE でやってしまえばいいと思います。
調べてみたところ、DX_SOUNDDATATYPE_FILEはマクロ定義のようですね。
自分には、ちょっと使い方がわかりません^^;(呼び出し方とかはわかるのですが、どのようにすれば軽くできるのか…ということです。)
申し訳ありませんが、教えて頂けませんか?
softya(ソフト屋) さんが書きました:amehirune さんが書きました:rascal さんが書きました:こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました
Σ( ゜Д ゜ ;)…!! なん…だと…。
その考えは、…実はあったのですが(笑)
保管場所のほうを…というのは、目からうろこです!! なんかそっちのほうがよさそうですね^^
って、これで素人考えなのですか…(汗)
私も素人なので、これって実際にありなのか? というのを熟練さんたちにお聞きしたいです。
【追記】返信遅れて申し訳ありません!!
構造体配列=テーブルの事だと思いますが、プロでも普通に使いますよ。
rascalさんの書かれた実装方法は、ごくありうる普通の実装だと思います。
現在、そのアドバイスを受けて、その方法でプログラムを組んでいますが、エラーが発生して先に進みません。
あと3日ほど頑張ってもできなければ、エラーに関してお尋ねいたしますがよろしいでしょうか?