LoginSignup
6
2

More than 5 years have passed since last update.

UnityでAndroid端末の音量を操作する

Posted at

UnityからAndroid端末の音量を操作したかったのでやり方を調べました。AndroidではAudioManager.setStreamVolumeを使うことでプログラムから音量を変えることができるので、このAPIをUnityから叩いてみようと思います。

結論からいうと、以下のようなコードで実装できます。

private static readonly int STREAM_MUSIC = 3;

public static void SetVolume(int volume) {
  var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
  var audioManager = context.Call<AndroidJavaObject>("getSystemService", "audio");
  audioManager.Call("setStreamVolume", STREAM_MUSIC, volume, 0);
}

volumeは音量レベルを指定します。指定可能な値は0からAudioManager.getStreamMaxVolumeで取得できる値までです。
問答無用で端末の音量を最大にしたい時は、以下のようにします。

var maxVolume = audioManager.Call<int>("getStreamMaxVolume", STREAM_MUSIC);
SetVolume(maxVolume);

音量を絶対指定するのではなく、現在の音量から上げ下げする場合は、AudioManager.adjustStreamVolumeを使います。

private static readonly int STREAM_MUSIC = 3;

// volume には以下のいずれかを渡す
private static readonly int ADJUST_LOWER = -1;
private static readonly int ADJUST_SAME = 0;
private static readonly int ADJUST_RAISE = 1;

public static void AdjustVolume(int volume) {
  var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
  var audioManager = context.Call<AndroidJavaObject>("getSystemService", "audio");
  audioManager.Call("adjustStreamVolume", STREAM_MUSIC, volume, 0);
}

より詳しくは、AudioManagerのドキュメントを見てください。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2