FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】オーディオ再生でのエラー:An invalid seek position was passed to this function の対処法

【Unity】【C#】オーディオ再生でのエラー:An invalid seek position was passed to this function の対処法  

 ↓こんな感じのエラー

C:\buildslave\unity\build\Modules/Audio/Public/sound/SoundChannel.cpp(512) : Error executing channel->setPosition(position_pcm, FMOD_TIMEUNIT_PCM) (An invalid seek position was passed to this function. )

※行番号は Unityバージョンによって違うらしい

 なぜかググっても日本語記事が無かったので、備忘録として残しておく。

(※) Unity 2019.2.21f1 / Windows10(x64) で確認



 結論からと言うとこのエラーは「オーディオデータの長さより大きい再生位置へ移動(シーク)したためエラー」というものだ。

 特にシーク機能(早送り/巻き戻し)などを付けた場合、気をつけないと、AudioClip を変更したときに長さが足りず、再生でエラー出たりする。よくあるのが、AudioSource.Stop() を実行して、AudioClip (AudioSource.clip) を入れ替えて再生しようとすると、エラーが出てしまうものだ。これは AudioSource.Stop() ではシーク位置はリセットされないので、入れ替えた AudioClip の長さが、現在の再生位置より小さい場合、エラーが出てしまうからだ。

 なので、対処法はいくつかある。

●AudioClip の長さを調べてから再生する
if (audioSource.time < audioSource.clip.length)
{
audioSource.Play(); //この場合、途中から再生となる
}


●再生位置をリセットしてから Play する
audioSource.time = 0;  //先頭位置へ移動(シーク)
audioSource.Play(); //この場合、最初から再生となる

 など…。知っていればなんてことない事だが、AudioSource.Stop() では再生(シーク)位置がリセットされないため、不具合に気が付かないってことあるんだよね。エラーが出ても最初から再生されてしまうので、見た目上手く行ってるように感じてしまうしね。それでもエラーは出さない方がやっぱりシステム的にも安定すると思う。





(関連記事)
【Unity】【C#】Windows で mp3 をランタイムで再生する
【Unity】【C#】動的にオーディオファイルの読み込みと再生をする


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityトラブルシューティング  オーディオファイル 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/357-609047fd
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR