如何从Unity脚本中的“ AudioSource.time”获取数据?

时间:2019-05-28 20:10:54

标签: c# unity3d

我正在Unity3d中为Android开发音乐播放器应用。对于show_currentPlayTime()函数,我想获取AS.time值以显示当前playTime。对于seek()函数,我想设置AS.time值以到达AudioClip的特定点。但是,问题是AS.time给了我0。

我尝试在AudioSource中设置AudioClip。可以这样工作,但音频会失真并显示异常行为。

变量声明:

public AudioSource AS;
[Range(0.0f, 1.0f)]

public Slider Volume;
public Slider slider;
bool isPlaying;


public List<AudioClip> AC = new List<AudioClip>();
int currentSong = 0;

播放功能:

public void Play()
{
    AS.Stop();
    AS.PlayOneShot(AC[currentSong]);

    //AS.clip = AC[currentSong]; ---
    //AS.Play(); ---
    //AS.clip = AC[currentSong]; ---
    //AS.PlayOneShot(AS.clip); ---

    clipInfo.text = AC[currentSong].name;
    Debug.Log(AC[currentSong].name);

    CancelInvoke();
    Invoke("Next", AC[currentSong].length);
    isPlaying = true;
}

该程序在上面的代码中使用---行运行,但是音频因此失真了。

音乐搜索功能:

public void MusicSlider()
{        
    AS.time = AC[currentSong].length * slider.value;
    slider.value = AS.time / AC[currentSong].length;
    Debug.Log(AS.time);
}

AS.time给我的价值= 0。

1 个答案:

答案 0 :(得分:0)

  

AudioSource.Stop功能停止播放当前设置的音频片段

因此您不应该使用PlayOneShot,因为它不会分配clip值,并且不会停止而是播放 parallel 。通常用于播放可能同时发生的音效。

来自AudioSource

  

您可以使用PlayPauseStop播放单个音频剪辑,也可以在使用volume播放时调节其音量属性,或使用time进行搜索。可以使用AudioSource在一个PlayOneShot上播放多种声音。

出于相同原因,示例中的

AudioSource.time似乎也只能使用Play而不是PlayOneShot来工作。

在注释的代码中,您还同时混合了PlayPlayOneShot。我想您所说的失真实际上是剪辑同时播放两次。您的代码应该只是

public void Play()
{
    AS.Stop();

    AS.clip = AC[currentSong];
    AS.Play();

    clipInfo.text = AC[currentSong].name;
    Debug.Log(AC[currentSong].name);

    // Don't know ofcourse what those methods do...
    CancelInvoke();
    Invoke("Next", AC[currentSong].length);
    isPlaying = true;
}