我正在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。
答案 0 :(得分:0)
AudioSource.Stop
功能停止播放当前设置的音频片段
因此您不应该使用PlayOneShot
,因为它不会分配clip
值,并且不会停止而是播放 parallel 。通常用于播放可能同时发生的音效。
出于相同原因,示例中的您可以使用
Play
,Pause
和Stop
播放单个音频剪辑,也可以在使用volume
播放时调节其音量属性,或使用time
进行搜索。可以使用AudioSource
在一个PlayOneShot
上播放多种声音。
AudioSource.time
似乎也只能使用Play
而不是PlayOneShot
来工作。
在注释的代码中,您还同时混合了Play
和PlayOneShot
。我想您所说的失真实际上是剪辑同时播放两次。您的代码应该只是
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;
}