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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3441閲覧

Unity 音楽との同期について

akki

総合スコア91

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/12/23 05:01

編集2017/12/23 05:15

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でなくても構いません。
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

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

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

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

投稿2017/12/23 06:02

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akki

2017/12/27 01:47

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問