Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±

    Воспроизведение музыки.

    Хочу сделать воспроизведение музыки, но чтобы она играла по порядку, а не именно 1 указывать. Помогите буду благодарен!

  2. #2
    Аватар для [ForD]
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.11.2013
    Адрес
    Свердловская обл.
    Сообщений
    688
    Репутация:
    103 ±
    Эм,выскажу свое предположение.

    По сути можно сделать все через таймер,узнаешь время 1-го трека,ставишь таймер на отсчет(врямя указываешь столько,сколько длиться трек) по окончании таймера(ну и по сути трека) начинаеться воспроизведение следующего трека
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

    25% времени в программировании уходит на размышления о том, что пользователь может сделать не так.[HR]/Брайан Хьюмс/





    #FIXSAMP

  3. #3
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от [ForD] Посмотреть сообщение
    Эм,выскажу свое предположение.

    По сути можно сделать все через таймер,узнаешь время 1-го трека,ставишь таймер на отсчет(врямя указываешь столько,сколько длиться трек) по окончании таймера(ну и по сути трека) начинаеться воспроизведение следующего трека
    Верно, так и есть.

    В начало мода:

    PHP код:
    new const TrackLength[] = {00000}; // Продолжительность треков

    new const TrackStreams[][] = {
        
    "http://ссылка на аудиопоток первого трека",
        
    "http://ссылка на аудиопоток второго трека",
        
    "http://ссылка на аудиопоток третьего трека",
        
    "http://ссылка на аудиопоток четвёртого трека",
        
    "http://ссылка на аудиопоток пятого трека"
    }; 
    При проигрывании трека:

    PHP код:
    new random(sizeof(TrackLength));
    PlayAudioStreamForPlayer(playeridTrackStreams[r]);
    SetPVarInt(playerid"TrackID"r);
    SetPVarInt(playerid"TrackLength"GetTickCount() + TrackLength[r] * 1000); 
    В public OnPlayerConnect:

    PHP код:
    SetPVarInt(playerid"TrackID", -1); 
    В односекундный таймер, в цикл:

    PHP код:
    new tick GetTickCount();
    if(
    GetPVarInt(playerid"TrackID") && GetPVarInt(playerid"TrackLength") <= tick)
    {
        new 
    random(sizeof(TrackLength));
        
    PlayAudioStreamForPlayer(playeridTrackStreams[r]);
        
    SetPVarInt(playerid"TrackID"r);
        
    SetPVarInt(playerid"MusicLength"tick TrackLength[r] * 1000);

    При отключении трека:

    PHP код:
    StopAudioStreamForPlayer(playerid);
    SetPVarInt(playerid"TrackID", -1); 

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если с момента моего последнего ознакомления с функциями воспроизведения потоков ничего не изменилось, Ford прав. И я отслеживание сделал бы следующим образом
    Сначала две глобальные переменные
    PHP код:
    new MusicTime[6];//Где 5 - число треков, которые мы будем воспроизводить
    new MusicTimer;//В данную переменную запишем ID таймера, дабы после окончания воспроизведения убить ненужный таймер
    new track;//А тут мы будем хранить номер трека, который воспроизведён 
    Далее в функцию, где идёт воспроизведение первого текста, ставим следующее
    PHP код:
    MusicTimer SetTimer...//Секундный таймер 
    MusicTime[0] = 60*3+20;//Продолжительность трека - 3 минуты 20 секунд
    track 0;//А тут номер трека, который мы воспроизвели. Он равен номеру ячейки 
    Ну и паблик, который будет вызываться таймером
    PHP код:
    forward Blabla();
    public 
    Blabla()
    {
        if(
    MusicTime[track] != 0)
        {
            
    MusicTime[track]--;
            if(
    MusicTime[track] == 1)
            {
                
    track++;
                switch(
    track)
                {
                    case 
    0
                    {
                        
    MusicTime[track] = 60*3+20
                        
    //Запускаем новый трек
                    
    }
                    case 
    1:
                    {
                        
    MusicTime[track] = 60*2+50
                        
    //Запускаем новый трек
                    
    }
                    case 
    2:
                    {
                        
    MusicTime[track] = 60*1+52
                        
    //Запускаем новый трек
                    
    }
                    case 
    3:
                    {
                        
    MusicTime[track] = 60*4+12
                        
    //Запускаем новый трек
                    
    }
                    case 
    4:
                    {
                        
    MusicTime[track] = 60*3+22
                        
    //Запускаем первый трек, либо останавливаем всё, убивая таймер и приравнивая track к 0
                    
    }
                }
            }
        }  
        return 
    1;

    Ну и всё. Такой способ позволяет удобно управлять треками (узнать время до окончания трека, делать цикличность воспроизведения плейлиста и т.п.). Только нужно учесть, что скорость начала воспроизведения трека (задержка) зависит от интернета игрока, если мне память не изменяет. Хотя не уверен. Плюс эта система будет работать только если трек играет общий для всех и только один. Если каким-то образом нужно сделать для каждого игрока свои песни, придётся все переменные и таймер переводить в массив под всех игроков
    Последний раз редактировалось DeimoS; 02.02.2014 в 23:47. Причина: Опередили :с
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •