Как получить данные из 'AudioSource.time' в сценарии Unity? - PullRequest
0 голосов
/ 28 мая 2019

Я создаю приложение Music Player для Android в Unity3d. Для функции show_currentPlayTime () я хочу получить значение AS.time для отображения текущего playTime. Для функции seek () я хочу установить значение AS.time, чтобы добраться до этой конкретной точки AudioClip. Но проблема в том, что AS.time дает мне 0.

Я попытался установить AudioClip в AudioSource. Это работает таким образом, но звук искажается и показывает ненормальное поведение.

Объявление переменных:

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 голосов
/ 28 мая 2019

Функция AudioSource.Stop останавливает воспроизведение установленного аудиоклипа

, поэтому не следует использовать PlayOneShotпоскольку это не присваивает значение clip и не останавливается, а воспроизводится параллельно .Обычно он больше используется для воспроизведения звуковых эффектов, которые могут происходить одновременно.

С AudioSource

Вы можете сыграть сингл аудиоклип с использованием Play, Pause и Stop Вы также можете регулировать его громкость во время воспроизведения с помощью volume свойство, или ищите используя time. Несколько звуков могут быть воспроизведены на одном AudioSource с использованием PlayOneShot.

AudioSource.time из примеров также, кажется, работает только с использованием Play вместо PlayOneShot по той же причине.

В закомментированном коде вы также смешиваете обаPlay и PlayOneShot.Думаю, то, что вы назвали искаженным, это на самом деле клип , воспроизводимый дважды одновременно .Ваш код должен быть просто 1069

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...