获取 Unity 中的音频输出设备列表

问题描述 投票:0回答:1

我想获取当前设备中所有可用的扬声器。并将它们填充为下拉选项。 统一选择特定选项时,我需要将播放的音频切换到该特定扬声器设备。

我希望 android 设备能够使用相同的方法在蓝牙和听筒之间切换。

我知道没有简单的方法来获取 Unity C# 中可用的演讲者列表。比如

Microphone.devices
班。但是还有其他简单的方法来访问设备吗?

任何帮助将不胜感激。提前致谢。

unity3d
1个回答
0
投票

要获取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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.