3

ゲームに嵐があるので、ゆっくりと嵐になり、雨がフェード インし、ループ可能な嵐のオーディオ ファイルになるアンビエント オーディオ ファイルを作成しました。これが私がやった方法です:

// Play intro clip and merge into main loop
var introTime = stormIntro.length;
AudioSource.PlayClipAtPoint( stormIntro, Vector3.zero, 0.7 );
Invoke( "StormMusic", introTime );

私が現在試みている方法は、storm_intro オーディオ クリップの長さを取得し、クリップを再生してから、イントロの長さが完了した後に storm_loop を呼び出して開始することです。これはちょっとうまくいきますが、2つの間にギャップがある場合があるため、実際にはそうではありません. では、移行がシームレスになるようにするにはどうすればよいでしょうか?

4

6 に答える 6

2

私は現在、Unity の音楽ミドルウェアに取り組んでおり、この問題をよく経験しています。これらの「ギャップ」は、Unity が再生する前にディスクからオーディオ データをロードする必要があるためにのみ表示されるため、すぐには再生できません。特定の時点でオーディオクリップを再生するようにスケジュールする場合は、事前にそれについて知る必要があります。@Kay がアドバイスしたように、AudioSource.PlayScheduled を使用する必要があります。

PlayScheduled は標準の Time.time ではなく、AudioSettings.dspTime で動作することに注意する必要があります。一時停止することはなく、エディターでゲームを起動するたびに同じ状態を保つことさえできます。audio.PlayScheduled( AudioSettings.dspTime + expectedDelay );したがって、特定のオーディオ クリップをexpectedDelay数秒で再生するようなものを作成する必要があります。expectedDelayUnity がクリップをロードできるように、適切なレベルを維持する必要があります。量は、オーディオファイルのサイズ、インポート設定、最適化するデバイスなどによって異なります。いくつかの実験の後、適切な値を思い付くことができると思います。

しかし、クリップを手動でループさせて同じ場所で何度も再生しようとすると、再びギャップが発生します。それらははるかに短くなり、気付かないかもしれませんが、そこにはあります — オーディオ出力を録音し、オーディオ エディタで見ることで確認できます。これを取り除くために、私は同じクリップのオーディオ ソースを使用して、次々と起動します。

于 2013-11-05T08:55:55.457 に答える
1

レイクの言うことは真実です。

方法も理由もわかりませんが、Unity は Wavosaur からの Wav ループ ポイントのみをサポートしています。fl studio や audacity などの他のソフトウェアからは動作しません。

Wavosaur でサウンドを開き、ループする領域を選択して、「L」の赤いアイコンをクリックします。以上で、サウンドはループポイントに続いて Unity でループします。

Unity がこの便利な機能を文書化/強化していないのは残念です。

于 2022-02-02T14:20:11.783 に答える
-1

ファイルを 2 つのクリップに分割することなく無限ループに入るイントロ部分で BGM を再生できる Unity プラグイン、Introloop というソリューションを作成しました。

正確なループを確保するために、スケジューリングなどの AudioSettings.dspTime 関連のメソッドを使用しました。また、イントロを含む 2 つのオーディオ間のクロス フェードにも対応しています。オーディオごとに 2 つの時点を指定するだけで、残りのオーディオ ジャグリングはスクリプトによって処理されます。

http://forum.unity3d.com/threads/378370/

于 2016-01-08T12:18:30.423 に答える