2016-04-30 42 views
4

Androidビルドでオーディオ再生に関する問題が発生しました。 Unity 5.4.0b15を使用していますが、5.3.4p3でも同じ問題がありました。Unity3D - Androidで電話/通知を受けた後、音声再生がミュートになる

私は自分のシーンの "AudioPlayer" GameObjectに追加された背景音楽を再生するための単純なコンポーネントを持っています。

public AudioClip clip; 
private AudioSource _musicAudioSource; 

private void Awake() 
{ 
    if (_musicAudioSource == null) 
    { 
     _musicAudioSource = gameObject.AddComponent<AudioSource>(); 
    } 
    _musicAudioSource.loop = true; 
    _musicAudioSource.clip = clip; 
    _musicAudioSource.Play(); 
} 

Android搭載端末でゲームを実行すると、音楽が完全に再生されます。しかし、それが実行されている間、私は音楽の再生を停止通知や電話(電話、viberまたは他のマッサージャー)の任意の種類を取得しています。また、他のすべてのサウンドは、私がゲームプレイで使用したミュート状態になりました。オーディオの再生を再開する唯一の方法は、アプリケーションを終了して再度実行することです。

Playミュージックのようなネイティブプレーヤーを使用して音声を聞きながらゲームを実行しているときにも、同じ問題が発生します。

iOSではすべてが完全に機能します。

+0

あなたは私の答えを受け入れたので、それはあなたのために働いたと思った。彼らがあなたの問題を解決しない限り、答えを受け入れないでください。すぐに通知するため、これは今日5.4.0B23で解決されました。 http://unity3d.com/unity/beta – Programmer

+0

これのための任意の回避策???私は5.3.5f1で同じ問題を抱えています – Kenshin

答えて

6

これは間違いなくUnityのバグです。私は同じ問題にぶつかり、それを修正しようとするいくつかのテストを実行しましたが、アプリケーションを再起動せずにオーディオを回復する方法はありません。

私のテストでは、私はGoogleハングアウトの通知を使用して音声を消去しました。

理由: のため、プログラマが提案した修正が機能しません。1.通知でアプリケーションの一時停止やアプリケーションのフォーカスイベントが発生しません。 2.新しいAudioListenerインスタンスおよび/またはAudioSourceインスタンスを初期化しても、オーディオは復元されません。

これはUnityの低レベルのバグです。私はバグについて報告します。

+0

こんにちはEduardo、ありがとう、あなたの答えのためにたくさん。私はまだ同じ問題があり、Unityの低レベルのバグについてあなたに同意します。 Unity Issue Trackerにもバグがあります。 https://issuetracker.unity3d.com/issues/android-slash-audio-android-app-stops-playing-audio-at-all-if-another-app-takes-audio-focus –

2

iOSではすべてが完全に機能します。

Android != iOS

OnApplicationPause(bool pauseStatus)を使用して、アプリケーションが一時停止して再開したときを検出します。アプリはときpauseStatus変数はtrueを返します。アプリはを再開したときを一時停止し、false。したがって、手動でpauseStatustrueのときは一時停止し、pauseStatusfalseのときは音楽を再開します。

public AudioClip clip; 
private AudioSource _musicAudioSource; 
bool _musicAudioSourcePaused = false; 

void Awake() 
{ 
    if (_musicAudioSource == null) 
    { 
     _musicAudioSource = gameObject.AddComponent<AudioSource>(); 
     _musicAudioSource.loop = true; 
     _musicAudioSource.clip = clip; 
    } 

    //Check if Audio is playing. Don't play if already playing. 
    if (!_musicAudioSource.isPlaying) 
    { 
     _musicAudioSource.Play(); 
    } 
} 

void OnApplicationPause(bool pauseStatus) 
{ 
    //Check if this is Pause 
    if (pauseStatus) 
    { 
     //Pause Audio if it is playing 
     if (_musicAudioSource.isPlaying) 
     { 
      _musicAudioSource.Pause(); 

      //Set to true so that we will detamine whether to Play() or UnPause() the music next time 
      _musicAudioSourcePaused = true; 
     } 
    } 

    //Check if this is Resume 
    if (!pauseStatus) 
    { 
     //Make sure audio is not null. If null, getComponent again 
     if (_musicAudioSource == null) 
     { 
      _musicAudioSource = gameObject.AddComponent<AudioSource>(); 
      _musicAudioSource.loop = true; 
      _musicAudioSource.clip = clip; 
     } 

     //Check if we paused the audio then resume 
     if (_musicAudioSourcePaused) 
     { 
      _musicAudioSource.UnPause(); 

      //Set to false so that we will detamine whether to Play() or UnPause() the music next time 
      _musicAudioSourcePaused = false; 
     } 

     //Check if Audio is playing. Don't play if already playing. 
     if (!_musicAudioSource.isPlaying) 
     { 
      _musicAudioSource.Play(); 
     } 
    } 
} 
関連する問題