質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Unity

    3997questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

Unity 音楽との同期について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 234

akki

score 49

unityで音楽ゲームを製作しています。

曲と音符を同期させるために曲の再生時間を取りたいと思い、
audioSource.timeを使えばいいと言うことは分かったのですが、困った事があります。

beatmaniaでもデレステでも何でも音楽ゲームを思い浮かべて頂ければ分かるかと思いますが、
音符が画面上に現れてから判定位置に到達するまでには時間が掛かります。
例えば、
曲時間の3秒のときPERFECT判定になる音符Aがあったとして、
音符が流れるのに1秒掛かるとしたとき、
音符Aを曲時間の2秒のときに画面上に出現させ、そこから1秒かけて判定位置に到達する。
それによって曲時間3秒のときに音符Aは判定位置に存在する。
という流れになるかと思います。

困っているのはここからで、
曲時間0秒のときPERFECT判定になる音符Bがあり、
音符が流れるのに1秒掛かるとしたとき、
音符Bを曲時間の「-1秒」のときに画面上に出現させ、そこから1秒かけて判定位置に到達する。
それによって曲時間0秒のときに音符Bは判定位置に存在する。
という場合が考えられます。

しかし、曲時間にもちろんマイナスはありません。
音源の方を編集して曲の頭に無音時間を付けるという方法も無くは無いとは思いますが、
作りたいのは音源も含めてユーザー側で遊ぶ曲を自由に入れ替えられるゲームなので
それはなるべく避けたいです。

現状Time.deltaTimeで独自に時間を計っている状態ですが、
これとaudioSource.timeが乖離した場合音楽ゲームにならないことが考えられるので
できることならaudioSource.timeを使用したいと考えています。

音符が曲開始前でも出現させられるようにしつつ、
再生している曲の時間と同期できるようにするために何か良い案はありますでしょうか?
あくまで曲との同期がメインなので実現できればaudioSource.timeでなくても構いません。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

どのタイミングでどの音が発せられるかは再生する前にあらかじめ全てわかっているという前提(つまりスコア(楽譜)がプログラム内で既知であるのが前提)として・・・

開始直後に発音する音があったとすると、その音の音符を1秒前に画面へ表示開始するためには「再生より1秒前に画面処理を開始し、適切なタイミングで実際の再生を開始する」という考え方にするより他に方法はないと思います。

なお、音符の位置を決めるための時刻はあくまでaudioSource.timeの方がよいとは思います。しかし再生開始前に音符を表示するケースについてだけはUnityの時刻に頼らざるを得ないと思います。プログラム内部で「再生状態」とするのを、「実際にAudioSourceにPlay指示を出す1秒前」から開始し、Play前の時刻についてはUnityの時間を頼りにするわけです。

実際に再生指示を出してから本当に再生が開始するまでの遅延(レイテンシー)を考えると再生より1秒前に正確に音符を表示するのは難しいかも知れませんが、そこはいたしかたないのではないでしょうか?

それを嫌うならどうしても再生音声の中に無音部分を付け足さないといけないと思います。
ところで、選択できる曲は必ず最初の音が発生するより前に(イントロでも無音でもいいのですが)必ず1秒の余裕を持つようにするというのは自然な考え方だと思います。それを避ける理由は特にないのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/27 10:47

    やはりUnityの時間と曲の時間の両方を使うのが一番ということなのですね。
    その方向で行きたいと思います、ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    オブジェクトの効果音のつけ方について

    画面上にいる動物のオブジェクトをクリックするとその動物の鳴き声がするというゲームを作っています。 それぞれの動物の鳴き声を設定するところまではできたのですが、動物の上でクリック

  • 受付中

    画像の取り入れ方

    ゲーム中に挿絵のような画像を取り入れるためにはどのようにすればよいでしょうか? たとえば、オブジェクトが消えたことを契機に、2秒間ほどゲーム画面上に消えたオブジェトの画像を表示し

  • 解決済

    Unityのマルチディスプレイ

    Unityでマルチディスプレイの対人ゲームを作成しています。現状、ゲームビューの複製、カメラ割り当て、マルチディスプレイのアクティベートのスクリプト作成は終わりましたが、Unity

  • 解決済

    JSONでbool型とint型を扱う場合の比較

    Unityでゲームを作っています。 セーブデータの保存にsimpleJSONをインポートして使っているのですが、 大量のフラグを保存する時のパフォーマンスやデータ量がどうなって

  • 受付中

    AudioSourceが再生終了したかどうかを取得したい

    AudioSourceが再生終了したかどうかを取得したいです。 !audioSource.IsPlaying()を利用した場合、Pause()を呼ばれた場合との区別がつきませ

  • 解決済

    曲が停止したら次のシーンへ自動的に進ませたい

    曲が停止したら次のシーンへ進ませたいのですがどうすれば、曲が停止したかの確認が取れるでしょうか? 一応シーン移動の仕方はわかります。 どなたかわかる方は教えてください。

  • 解決済

    実機でデバッグをするとゲームが進行しなくなります

    Unityでゲーム制作をしています。 製作過程を友達に見せようと実機にインストールしてみましたが、途中でゲームの進行が止まってしまいます。Unity上では問題なく動いております。

  • 解決済

    [Unity]コルーチンの考え方について

    Unityでのコルーチンの考え方について 疑問があるので質問させてください。 私の認識ではコルーチンとは ・処理の途中で秒数指定などでwaitをかけれる ・IEnumerato

同じタグがついた質問を見る

  • Unity

    3997questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。