Как определить играется ли аудио с точностью до милисекунды?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как определить играется ли аудио с точностью до милисекунды?

Сообщение NOVA 11 мар 2012, 01:06

Что то справку почитал и не понял. Нужно организовать последовательность звукового сопровождения: Вступление, зацикленный основной трек. Так как сопоставлять таймер со временем бесполезно, надо создать условие, которое срабатывает когда вступление заканчивается. Имеем пока это:

Синтаксис:
Используется csharp
public AudioClip Intro;
    public AudioClip Build;
        public AudioClip Air;
        int sequence = 0;
         public void Start ()
         {             
         }
         public void Update ()
         {                     
                if (sequence == 0)
                { audio.PlayOneShot(Intro);
                sequence=1;}


Пробовал через if (!audio.isPlaying) { - не работает. Всегда выдаёт false. Да и вооще непонятно на какой аудиосурс он должен работать.
К объекту одновременно прикреплён audiolistener.
Последний раз редактировалось NOVA 11 мар 2012, 09:17, всего редактировалось 1 раз.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Как определить играется ли конкретный аудиотрек?

Сообщение Golandez 11 мар 2012, 01:23

Синтаксис:
Используется csharp
public AudioClip[] clip;
int sequence = 0;
bool isPlay= false;

void Update()
{
 if(!isPlay)
 {
  if(sequence<clip.Lenght)
  {
   isPlay=true;
   audio.clip=clip[sequence];
   audio.Play();
   Invoke("Default",clip[sequence].Lenght);
   sequence++;
  }
 }
}
void Default()
{
 isPlay=false;
}
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Как определить играется ли конкретный аудиотрек?

Сообщение DbIMok 11 мар 2012, 01:31

как вариант
Синтаксис:
Используется csharp
        public AudioClip Intro;
        public AudioClip Looped;
        IEnumerator Start ()
        {
                audio.clip = Intro;
                audio.Play();
                do
                {
                        yield return null;
                } while (audio.isPlaying);
                audio.loop = true;
                audio.clip = Looped;
                audio.Play();
        }
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как определить играется ли конкретный аудиотрек?

Сообщение NOVA 11 мар 2012, 01:50

....Разбирая ....
А что в скрипте теперь стало значить sequence? Изначально было 0 - вступление ,1 - build основной трек, 2 - air микс основного трека с коечем ещё (на улице). Теперь это похоже на таймер трека. То бишь непонятно вот это: audio.clip=clip[sequence], а вот такое вообще в первый развижу.
sequence++ Что к чему прибавляет?
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Как определить играется ли конкретный аудиотрек?

Сообщение NOVA 11 мар 2012, 02:06

DbIMok
Этот заработал спасибо. А теперь уважаемые знатоки внимание вопрос)): Как избавится от задержки между треками intro и looped?
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Как определить играется ли конкретный аудиотрек?

Сообщение Golandez 11 мар 2012, 03:56

NOVA писал(а):....Разбирая ....
А что в скрипте теперь стало значить sequence? Изначально было 0 - вступление ,1 - build основной трек, 2 - air микс основного трека с коечем ещё (на улице). Теперь это похоже на таймер трека. То бишь непонятно вот это: audio.clip=clip[sequence], а вот такое вообще в первый развижу.
sequence++ Что к чему прибавляет?

Массив с треками, sequence- номер трека в массиве. audio.clip=clip[sequence] говорим сорсу, какой из треков в массиве в данный момент нужно проиграть. sequence++ увеличиваем номер трека на один, по окончании проигрывания текущего трека, начнет проигрывать следующий в массиве.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Как определить играется ли конкретный аудиотрек?

Сообщение Zavhoz 11 мар 2012, 06:21

как вариант, можно использовать более упрощённую форму:

Синтаксис:
Используется csharp
audio.clip = Intro;
audio.Play();
yield return new WaitForSeconds(audio.clip.length);
audio.clip = Looped;
audio.Play();
 


а паузы (пустые места), в треках лучше резать руками специальными програмками. я использую Sound Forge.
FUNNY BLOX
Аватара пользователя
Zavhoz
UNITрон
 
Сообщения: 197
Зарегистрирован: 10 фев 2009, 07:23
Откуда: Караганда KZ
  • ICQ

Re: Как определить играется ли конкретный аудиотрек?

Сообщение NOVA 11 мар 2012, 09:12

Zavhoz писал(а):а паузы (пустые места), в треках лучше резать руками специальными програмками. я использую Sound Forge.

Спасибо. Я работаю в nuendo уже года 4. Скорее всего while (audio.isPlaying) не может засечь точный конец аудиодороги в сотых долях секунды.
Для темпа в 180 бпм это критично. Да и вообще критично для любого темпа. Счётчиками или таймерами пробовал вешать скрипт на партиклы. Время в игре не соответствует времени анимации в онке animation с коэффициентом 0.024 или 2,4 процента.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 24