【问题标题】:Unity Stream Audio Slider(Seek Bar)Unity Stream Audio Slider(搜索栏)
【发布时间】:2022-01-22 12:41:29
【问题描述】:

在 Unity 中,我使用以下代码从服务器流式传输音频,但我不知道如何向其添加搜索栏(用于更改播放持续时间的滑块)。任何帮助将不胜感激。

   IEnumerator GetAudioClip()
     {
         using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG))
         {
             DownloadHandlerAudioClip dHA = new DownloadHandlerAudioClip(url, AudioType.MPEG);
             dHA.streamAudio = true;
             www.downloadHandler = dHA;
             www.SendWebRequest();
             while (www.downloadProgress < 0.01)
             {
                 Debug.Log(www.downloadProgress);
                 yield return new WaitForSeconds(.1f);
             }
             if (www.isNetworkError)
             {
                 Debug.Log("error");
             }
             else
             {
                 audioSource.clip = dHA.audioClip;
                 audioSource.Play();
             }
         }
     }

【问题讨论】:

  • 根据滑块值设置audioSource.time。这应该工作
  • @Jaimin 谢谢,但你能举个例子吗?

标签: c# unity3d slider unity-ui


【解决方案1】:

这是显示您需要的基本示例。根据您的喜好进行更改。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.Networking;

public class Test : MonoBehaviour
{
    private float _audioLength;
    private string url = "test url";

    public Slider slider;
    public AudioSource audioSource;

    private void Start()
    {
        slider.maxValue = 1f;
        slider.onValueChanged.AddListener(OnSliderValueChange);
        StartCoroutine(GetAudioClip());
    }

    private void OnSliderValueChange(float f) => audioSource.time = f * _audioLength;

    private void OnDisable() => slider.onValueChanged.RemoveAllListeners();

    private IEnumerator GetAudioClip()
    {
        using (var www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.UNKNOWN))
        {
            yield return www.SendWebRequest();
        
            if (www.result == UnityWebRequest.Result.ConnectionError)
            {
                Debug.Log("error");
                yield break;
            }
            ((DownloadHandlerAudioClip)www.downloadHandler).streamAudio = true;
            var audioClip = ((DownloadHandlerAudioClip)www.downloadHandler).audioClip;
            yield return null;
            audioSource.clip = audioClip;
            _audioLength = audioClip.length;
            audioSource.Play();
        }
    }
}

在检查器中添加滑块,一切顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多