我想获取当前设备中所有可用的扬声器。并将它们填充为下拉选项。 统一选择特定选项时,我需要将播放的音频切换到该特定扬声器设备。
我希望 android 设备能够使用相同的方法在蓝牙和听筒之间切换。
我知道没有简单的方法来获取 Unity C# 中可用的演讲者列表。比如
Microphone.devices
班。但是还有其他简单的方法来访问设备吗?
任何帮助将不胜感激。提前致谢。
要获取Unity中所有可用的扬声器,您可以使用
AudioSettings.GetConfiguration
方法获取当前音频配置,其中包括可用音频设备列表。
要将音频播放切换到特定的扬声器设备,您可以将
AudioConfiguration.speakerMode
属性设置为所需的扬声器模式
using UnityEngine;
using UnityEngine.UI;
public class AudioDeviceDropdown : MonoBehaviour
{
public Dropdown dropdown;
private void Start()
{
AudioConfiguration config = AudioSettings.GetConfiguration();
for (int i = 0; i < config.speakerModeCount; i++)
{
string speakerName = config.speakerModes[i].ToString();
dropdown.options.Add(new Dropdown.OptionData(speakerName));
}
dropdown.onValueChanged.AddListener(OnDropdownValueChanged);
}
private void OnDropdownValueChanged(int value)
{
AudioConfiguration config = AudioSettings.GetConfiguration();
config.speakerMode = (AudioSpeakerMode)value;
AudioSettings.Reset(config);
}
}
要在安卓设备上切换蓝牙和听筒,可以使用
UnityEngine.AndroidJavaObject
类
using UnityEngine;
public class AudioOutputSwitcher : MonoBehaviour
{
private AndroidJavaObject audioManager;
private void Start()
{
AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
audioManager = activity.Call<AndroidJavaObject>("getSystemService", "audio");
}
public void SetAudioOutput(bool useBluetooth)
{
if (useBluetooth)
{
audioManager.Call("setMode", 3); // MODE_IN_COMMUNICATION
audioManager.Call("startBluetoothSco");
audioManager.Call("setBluetoothScoOn", true);
}
else
{
audioManager.Call("stopBluetoothSco");
audioManager.Call("setBluetoothScoOn", false);
audioManager.Call("setSpeakerphoneOn", true);
audioManager.Call("setMode", 0); // MODE_NORMAL
}
}
}