ゲームの効果音の再生タイミング

アバター
Ketty
記事: 103
登録日時: 11年前

ゲームの効果音の再生タイミング

投稿記事 by Ketty » 10年前

年明けから多忙です。仕事が(^▽^;)
まさかこの我輩が仕事に追われるとはまさかまさか・・・。

気づいたら日記書いてなかったです。

ところで表題の件ですが、
ゲームプログラムにおいて、
効果音の再生は、Update処理でするものかな。それともDraw処理かな。
ということが気になりました。

私は、今まで特に何も考えず、
Updateで再生(DXライブラリならPlaySoundMem)するようにプログラミングしていましたが、
よくよく考えると、絵の見え方と効果音がぴったし同期してないと気持ち悪いんじゃないだろうかと思い始めました。

例えば、太鼓の達人みたいなやつ、あれは、
バチで叩く絵が目に見えるタイミングと、
バチで叩く音が耳に聞こえるタイミングがちょっとでもズレると気持ち悪くなるように思います。

・・・と考え始めたら、なにも音ゲーに限らず、全部のゲームがそのような気がします。
(絵と音がズレたら気持ち悪い)

はて、みんなどうやってるんだろうか。
Drawで再生するのかな。
Updateで再生するのかな。

考え始めると気になってソワソワしてしまいます。
仕事どころじゃないです。

だから、そのうち1か月くらい有給休暇を取ってやろうと思います。

zxc
記事: 79
登録日時: 13年前

Re: ゲームの効果音の再生タイミング

投稿記事 by zxc » 10年前

 プレイヤーの入力とゲーム側の応答である程度の時間差があると不快になるんだと思います。
 でもそれが「Draw(Update)で再生するとずれてもう一方だとずれ無しに再生される」根拠になるのかというと、そうは言えないような気がします。上手いこと手が加えやすいようにSEの再生だけ分離する・分離できるように、重い処理を避けたり発見しやすく書いていこうと思いました(小並感)

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前

Re: ゲームの効果音の再生タイミング

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

updateでならそうが、drawでならそうが、どっちみちユーザーに新しい絵が見えるのはScreenflip()次第で変わるのでdrawに関係ない処理はupdateですべきじゃないですかね。

アバター
usao
記事: 1889
登録日時: 12年前

Re: ゲームの効果音の再生タイミング

投稿記事 by usao » 10年前

(「音を鳴らしたいです」 → 実際に音が鳴る
 までの時間差とかもどんだけあるのかわからないから
 タイミングがどうのとかシビアに考えるのをやめることにしよう.
 処理がそんなに重くなければ ほとんど問題にならない ことを期待しよう.そうしよう.)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: ゲームの効果音の再生タイミング

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

もう少し詳しく書くと、Draw直後のScreenflip()でフリップ後にGPUが描画を開始、更に次のScreenflip()で初めて画面表示、この後モニタで遅延して何フレームも遅れて人間の目に届きます。
と言うことで、update()だ。draw()だに差はありません。

あと脳は絵と音のズレは自動補正する能力があるので、結構ズレても気になりません。
http://www.aist.go.jp/aist_j/press_rele ... 30227.html

ISLe
記事: 2650
登録日時: 14年前

Re: ゲームの効果音の再生タイミング

投稿記事 by ISLe » 10年前

絵と音のズレは無意識に補正しますが、一定のリズムを奏でる上で音と音の間隔のズレには敏感です。
マッハバンドのように視覚にも同様のことが言えます。

アバター
Ketty
記事: 103
登録日時: 11年前

Re: ゲームの効果音の再生タイミング

投稿記事 by Ketty » 10年前

>zxcさん
どうもこんにちはっ!
zxc さんが書きました: プレイヤーの入力とゲーム側の応答である程度の時間差があると不快になるんだと思います。
そうですね!
不快さを避けるために、良いプログラムを書くことを心がけることが大事ですよね(^_^)

>Dixqさん
どうも!いつもこのフォーラムにお世話になっております(^▽^)
Dixq (管理人) さんが書きました: どっちみちユーザーに新しい絵が見えるのはScreenflip()次第で変わるので
drawに関係ない処理はupdateですべきじゃないですかね。
おお、そうでした。
おっしゃるとおり、絵が見えるタイミングはDrawではなくScreenFlip()によりますね。
私もDrawにコーディングするのは極力避けたかったので、
いまのままUpdateで再生というロジックにしておこうと思います。

>usaoさん
まいどどうも~!
usao さんが書きました: 処理がそんなに重くなければほとんど問題にならないことを期待しよう.そうしよう.
それですね。重い処理をさせない、重い処理があるようなら工夫する。
そして、あとは期待しようってことですね。
日頃の行いがよい私なら、きっと神様がなんとかしてくれそうです(^ー^)期待しよう。

>softya(ソフト屋)さん
いつもお世話になっております(^_^)
softya(ソフト屋) さんが書きました: あと脳は絵と音のズレは自動補正する能力があるので、結構ズレても気になりません。
http://www.aist.go.jp/aist_j/press_rele ... 30227.html
なんと!そのような能力が我々人類に備わっていたとは…。
存じませんでした。貴重な情報ありがとうございます。
Upadateで再生というロジックのままでも安心して進めていけそうに思いました。

>ISLeさん
どうもどうも(^▽^)ヾISLeさんにはお世話になりっぱなしです。
ISLe さんが書きました: 一定のリズムを奏でる上で音と音の間隔のズレには敏感です。
おお、なるほど。これまた勉強になるお話です。
そうか、効果音を再生したい周期が一定なときは要注意ですね。
ありがとございます!


皆さんからいただいたコメントを元に、
私が導き出した結論としては、ユーザーから「なんかいつもと違う(オレの知ってるゲームと違う)」って思われないように、
気を付けてプログラムを書くことが大事である、ということになりました(^▽^) みなさんありがとうございました!