【龍神録】音楽室(Music_Room)の実装について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

【龍神録】音楽室(Music_Room)の実装について

#1

投稿記事 by amehirune » 10年前

現在、ゲームプログラムで音楽室を仮実装しています。
その時のソースコードでちょっと不安を覚えたので、質問させていただきます。

龍神録48章のソースを参考にしていると、音楽室を実装するにはちょっと面倒な部分が見つかり、
そこをいろいろと変更させていただきました。
そこが、「音楽データを再生直前にロード」し、「不要になったら破棄する」操作です。
以上の部分を、「load.cppで読み込んで、選択に応じて再生」させるようにしているのですが…。
(分かりにくいですね^^; 要望があれば、ソースコードを載せたいと思います。)

ここで質問です。
1:楽曲データ17曲分のoggデータをロードし保存するとなると、やはり相当量のメモリを食うことになりますよね。
 これはゲームのパフォーマンスには影響が出る程度の負荷がかかってしまう程度なのでしょうか?
2:もし、負荷がかかるのであれば、音楽室を実装しやすく、且つメモリもそこまで食わないようなソースの書き方として、
 参考程度でいいのでアドバイスをいただけたら幸いです。
3:(これは全く関係なく、個人的な要望で、管理人さんへの質問ですが)龍神録には音楽室は実装されないのでしょうか?
 すべていい曲ですので、著作権的な問題が発生するのであれば、楽曲名の紹介や提供先など教えて頂ければ幸いです。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#2

投稿記事 by softya(ソフト屋) » 10年前

PlaySoundFile()だとダメなのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#3

投稿記事 by amehirune » 10年前

softya(ソフト屋) さんが書きました:PlaySoundFile()だとダメなのでしょうか?
その手があったか! と、思いましたが、それは使ったことのないので確認させてください。

1:PlaySoundFileでは、ファイルのパス指定はできますか?
2:ループ位置の設定はどうやって行えばいいですか?
3:("../music/%d.ogg",play_knd,…);のような書き方はできますか?
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#4

投稿記事 by softya(ソフト屋) » 10年前

こんな感じです。1.は問題なし。2.は無いですかね。先頭オンリーです。随時ファイルを読み込むので任意の位置は難しいですね。3.に関してはsprintfをを使いください。
「PlaySoundFile」
http://homepage2.nifty.com/natupaji/DxL ... sound.html
リファレンスは、たまに見たほうが良いですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#5

投稿記事 by amehirune » 10年前

せっかくご提案なさって、こんな返答をするのは恐縮ですが、
ループ位置の設定ができないのであれば、それを使うのはちょっと無理そうです…。

因みに、先頭の質問に関してはどうお考えですか?

【追伸】リファレンスのリンク、ありがとうございました。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#6

投稿記事 by softya(ソフト屋) » 10年前

oggのサイズがわからないので答えようがないですが、パソコンの搭載メモリによるでしょう。
メモリに余裕があるなら、別に気にする必要はないです。
ただし、最初に全部読み込むとなると時間を食うかもしれませんので、起動したくなくなる恐れはあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#7

投稿記事 by Dixq (管理人) » 10年前

メモリに展開せずに再生する方法がありますよ。
今携帯しか手元にないので詳しくは帰宅してから。

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#8

投稿記事 by amehirune » 10年前

そうですか…。回答ありがとうございます。
なるべくファイルサイズを小さくしてみる努力が必要ですかね(汗)

こちらでも、またいろいろとソースを変更してみることにします。
その他意見等がありましたら、よろしくお願いします。

【追記】
一応3番に関しての回答や、その他の意見等もお聞きしたいので、解決とは致しません。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#9

投稿記事 by amehirune » 10年前

なんかいつの間にか返信着てましたね;
Dixq (管理人) さんが書きました:メモリに展開せずに再生する方法がありますよ。
今携帯しか手元にないので詳しくは帰宅してから。
そうなんですか!? 
いつでも大丈夫です。よろしくお願いします!
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#10

投稿記事 by Dixq (管理人) » 10年前

この関数の説明をご覧ください。
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/
良い曲ばかりなので良ければお聞きください。

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#11

投稿記事 by amehirune » 10年前

回答ありがとうございます。
成程、そのような関数があったのですね!
どの関数を使うかについては、いろいろ試しながら検討していきたいと思っています。

3番の回答に関して…
そうだったのですか…。わざわざご回答いただき、ありがとうございました!

一応このトピックについては解決といたしますが、ご提案は随時受け付けておりますのでよろしくお願いします。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

rascal
記事: 27
登録日時: 10年前

Re: 【龍神録】音楽室(Music_Room)の実装について

#12

投稿記事 by rascal » 10年前

こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#13

投稿記事 by amehirune » 10年前

rascal さんが書きました:こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました
Σ( ゜Д ゜ ;)…!! なん…だと…。
その考えは、…実はあったのですが(笑)
保管場所のほうを…というのは、目からうろこです!! なんかそっちのほうがよさそうですね^^
って、これで素人考えなのですか…(汗)

私も素人なので、これって実際にありなのか? というのを熟練さんたちにお聞きしたいです。

【追記】返信遅れて申し訳ありません!!
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

hide

Re: 【龍神録】音楽室(Music_Room)の実装について

#14

投稿記事 by hide » 10年前

Dixqさんが示したページにもありますが ボタンを押してから毎回メモリに展開だと
曲のデータのサイズが大きい場合に再生ボタンを押してからのレスポンスが遅くなる可能性は割とあると思います。
ボタンを押しても反応がおそいとユーザーが「あれ?」と思うでしょう。

結局一曲だけメモリに展開するくらいなら DX_SOUNDDATATYPE_FILE でやってしまえばいいと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#15

投稿記事 by softya(ソフト屋) » 10年前

amehirune さんが書きました:
rascal さんが書きました:こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました
Σ( ゜Д ゜ ;)…!! なん…だと…。
その考えは、…実はあったのですが(笑)
保管場所のほうを…というのは、目からうろこです!! なんかそっちのほうがよさそうですね^^
って、これで素人考えなのですか…(汗)

私も素人なので、これって実際にありなのか? というのを熟練さんたちにお聞きしたいです。

【追記】返信遅れて申し訳ありません!!
構造体配列=テーブルの事だと思いますが、プロでも普通に使いますよ。
rascalさんの書かれた実装方法は、ごくありうる普通の実装だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】音楽室(Music_Room)の実装について

#16

投稿記事 by amehirune » 10年前

hide さんが書きました: 結局一曲だけメモリに展開するくらいなら DX_SOUNDDATATYPE_FILE でやってしまえばいいと思います。
調べてみたところ、DX_SOUNDDATATYPE_FILEはマクロ定義のようですね。
自分には、ちょっと使い方がわかりません^^;(呼び出し方とかはわかるのですが、どのようにすれば軽くできるのか…ということです。)
申し訳ありませんが、教えて頂けませんか?
softya(ソフト屋) さんが書きました:
amehirune さんが書きました:
rascal さんが書きました:こんばんは 何気に思ったことなので プロのコーディングでは絶対にしないと思いますが
たとえば サウンドNOのint型を用意して そのint型に 音楽名 ファイル保管場所をひもつけし
選択時には サウンドNOを変化させ それにたいして音楽名 コメントなどを表示させる
決定ボタンが押されたら そのファイル保管場所からロードし再生する 停止が押されたら メモリ上のファイルをdeleteする
で やればメモリが必要なのは常に1曲分で済むのでは?
と 素人考えをだしてみました
Σ( ゜Д ゜ ;)…!! なん…だと…。
その考えは、…実はあったのですが(笑)
保管場所のほうを…というのは、目からうろこです!! なんかそっちのほうがよさそうですね^^
って、これで素人考えなのですか…(汗)

私も素人なので、これって実際にありなのか? というのを熟練さんたちにお聞きしたいです。

【追記】返信遅れて申し訳ありません!!
構造体配列=テーブルの事だと思いますが、プロでも普通に使いますよ。
rascalさんの書かれた実装方法は、ごくありうる普通の実装だと思います。
現在、そのアドバイスを受けて、その方法でプログラムを組んでいますが、エラーが発生して先に進みません。
あと3日ほど頑張ってもできなければ、エラーに関してお尋ねいたしますがよろしいでしょうか?
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

閉鎖

“C言語何でも質問掲示板” へ戻る