376

Re: Скрипты PAL для Sam Broadcaster

еще забыл сказать о том , что можно управлять энкодерами по их номеру.
для этого используйте команду - se.
знак плюс -включает , а знак минус выключает энкодер.
пример:
@01:07:00=se|+0|+1|-2|-3

Re: Скрипты PAL для Sam Broadcaster

скрипт ретрансляции ни у кого не завалялся?
хотелось бы сделать чтоб допустим с с 0:00 до 8:00 играло интернет радио, после 8:00 брал треки из библиотеки.
как так сделать и возможно ли?буду благодарен smile

378

Re: Скрипты PAL для Sam Broadcaster

Добрый день. Ребят, перечитал всю ветку, но не увидел нужного мне вопроса.. Подскажи pal или может как -то в настройках замутить что-бы заказанная песня на веб морде добавлялась не в конец списка, а в начало. Благодарю заранее.

379

Re: Скрипты PAL для Sam Broadcaster

в конец списка какого? Не понял вопроса smile

380

Re: Скрипты PAL для Sam Broadcaster

пишет Render:

Может подскажет кто, как реализовать подобное для Sound FX?
Перед проигрыванием Sound FX - убавление громкости играющей деки, после проигранного Sound FX, возвращение громкости обратно. Пытался вставить из этого примера, работает только изначальное снижение громкости, но как только запускается наложение Sound FX (код ниже), то громкость резко возвращается на исходную,
То есть по сути, не выходит нормально сделать тайм ожидания, для возвращения громкости.
Исходное

var Song : TSongInfo;
var P : TPlayer;
PAL.Loop := True; 
PAL.WaitForTime('+00:05:00');
P := SoundFX;
if P <> nil then
begin
Song := CAT['Sound FX (All)'].ChooseSong(smRandom,NoRules);
if Song <> nil then
begin
P.QueueSong(Song); //
P.Play;
end;
end;

То, что пытался сляпать (ибо не варю пока в pal)

var Song : TSongInfo;
var P : TPlayer;
var i : integer;
PAL.Loop := True; 
i := ActivePlayer.GetVolume;
PAL.WaitForTime('+00:05:00'); 
ActivePlayer.Volume := i - 40;
ActivePlayer.Volume := i - 80;
ActivePlayer.Volume := i - 120;
ActivePlayer.Volume := i - 160;
P := SoundFX;
if P <> nil then
begin
Song := CAT['Sound FX (All)'].ChooseSong(smRandom,NoRules);
if Song <> nil then
begin
PAL.WaitForTime('+00:00:10');
ActivePlayer.Volume := i - 160;
ActivePlayer.Volume := i - 120;
ActivePlayer.Volume := i - 80;
ActivePlayer.Volume := i - 40;
ActivePlayer.Volume := i;
P.QueueSong(Song);
P.Play;
end;
end;

Как и куда только не вставлял PAL.WaitForTime с возвратом громкости, но результата не удалось получить. Как только стартует наложение Sound FX, громкость просто резко возвращается.
Помогите подправить в работоспособный вариант... (может уже было решение где-то этой проблемы, не удалось найти)

я немного изменил скрипт и использую для включения Scheduler (Планировщик) любое время запуска или день недели и так далее...

var Song : TSongInfo;
var P : TPlayer;
var i : integer;

i := ActivePlayer.GetVolume;

ActivePlayer.Volume := 227; // приглушаем уровень громкости играющего трека
ActivePlayer.Volume := 199;
P := Aux1; // через что играть
if P <> nil then
begin
Song := Cat['radio-jingle'].ChooseSong(1,NoRules);
if Song <> nil then
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;
PAL.WaitForTime('+00:00:05'); // время ожидания к возрату увеличения громкости
ActivePlayer.Volume := 227;
ActivePlayer.Volume := 255;

время ожидания меняем на нужную длину вашего джингла
возможно кому то пригодится, удачи!

Отредактировано wisher (02-06-2015 10:08:48)

381

Re: Скрипты PAL для Sam Broadcaster

Очень нужный и полезный PAL скрипт, для тех кто использует какие либо действия с уменьшением или увеличением громкости в играющих Деках ...

При использовании различных эффектов или манипуляций, у меня было такое, что при воспроизведении с одной Деки на другую громкость осталась на прежнем уровне и не вернулось в нормальное состояние, а то и вовсе осталась на нуле. Чтоб такой ситуации не происходило я предлагаю использовать скрипт выравнивания громкости. За основу я взял скрипт с офф.сайта после многих проверок он мне не дал нужного результата, после различных экспериментов немного изменив удалением последней строчки и добавил нужную мне дополнительную функцию и всё стало работать на 100%

var Done : Boolean = False;
var Song : TSongInfo;

While not Done do
begin
if QueuedPlayer <> nil then
  begin
    Done := True;
    Song := QueuedPlayer.GetSongInfo;
    if (Song<>nil) then
     case song['songtype'] of
      'S' : QueuedPlayer.Volume := 255; // уровень громкости обычных треков
      'A','J','P' : QueuedPlayer.Volume := 320; // уровень громкости джинглов из категории A,J,P
      'C' : QueuedPlayer.Volume := 128; // уровень громкости из категории разное (эту строчку можно удалить)
      else QueuedPlayer.Volume := 255; // повторная проверка состояния громкости
     end; 
  end;
end;

PAL.Loop := True; // повторный запуск выполнения скрипта

всё очень просто и надёжно!

382

Re: Скрипты PAL для Sam Broadcaster

Всем привет. Подскажите пожалуйста, никак не могу скрипт допилить.
Задумка такая: одна из дэк фейдится в паузу или стоп при наступлении 20:00 и в Aux1 играет заготовка. А когда трек в Aux1 кончается нужно чтоб в любой из дэк начала играть музыка из Queue.

var Song : TSongInfo;
var P : TPlayer;
P := Aux1;
PAL.WaitForTime('20:00:00');
ActivePlayer.FadeToPause;
if P <> nil then
begin
  Song := CAT['20'].ChooseSong(1,NoRules);
  P.QueueSong(Song);
  P.Play;
end;

DeckA.Eject;
DeckB.Eject;

if Aux1.Status = 1 then
begin

Отредактировано Zidane Tribal (07-10-2014 21:09:59)

383

Re: Скрипты PAL для Sam Broadcaster

Че-то отвечать в последнее время некому.... Одни вопросы на форуме )

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

384

Re: Скрипты PAL для Sam Broadcaster

пишет Zidane Tribal:

Всем привет. Подскажите пожалуйста, никак не могу скрипт допилить.
Задумка такая: одна из дэк фейдится в паузу или стоп при наступлении 20:00 и в Aux1 играет заготовка. А когда трек в Aux1 кончается нужно чтоб в любой из дэк начала играть музыка из Queue.

var Song : TSongInfo;
var P : TPlayer;
P := Aux1;
PAL.WaitForTime('20:00:00');
ActivePlayer.FadeToPause;
if P <> nil then
begin
  Song := CAT['20'].ChooseSong(1,NoRules);
  P.QueueSong(Song);
  P.Play;
end;

DeckA.Eject;
DeckB.Eject;

if Aux1.Status = 1 then
begin

Zidane Tribal можешь описать более подробно, что точно необходимо выполнить...
стоп играющего трека или пауза или просто фейдинг
в этой теме есть много готовых скриптов и очень похожий на твой
и что ты хочешь фейдить, сколько времени в минутах или секундах будет идти трек через Aux1
опиши пожалуйста более подробно, я постараюсь помочь

385

Re: Скрипты PAL для Sam Broadcaster

Хорошо, постараюсь)
Скрипт будет ставиться в шедулер на немного более раннее время чем начало его выполнения.
Скрипт запускается по указанному времени  (PAL.WaitForTime('20:00:00');) и играющий  в  одной из дэк, по списку в Queue, трек фейдится (как я понял в стоп или паузу разницы нет, ибо ползунок на деке остается на месте остановки, а мне нужно чтобы после трека в Aux1 в деках играл следующиий в Queue трек, поэтому я ввел команду Eject) и в Aux1 играет трек из указанной директории.
Все выше написанное уже реализовано.
Теперь осталось сделать, чтобы после окончания трека в Aux1 (а лучше за 2-5 секунд до окончания) запустилось воспроизведение треков из списка Queue в любой из дэк А или В (треки в списке Queue уже находятся, ибо добавляются скриптом).
Сколько трек в Aux1 будет играть не могу сказать, потому что каждый день будет другой.

Отредактировано Zidane Tribal (13-10-2014 09:38:36)

386

Re: Скрипты PAL для Sam Broadcaster

Который выше скрипт  с уменьшением громкости тебе не подходит?
Там можно уменьшить звук играющего трека до минимума, а в это время будет играть через  Aux1  то что тебе необходимо
Затем выставить задержку времени на то которое тебе нужно и снова увеличить громкость
Или тебе нужно чтоб совершенно другой трек начал воспроизведение?

387

Re: Скрипты PAL для Sam Broadcaster

Zidane Tribal попробуй этот скрипт
Возможно это то что тебе необходимо

var Song : TSongInfo;
var P : TPlayer;

ActivePlayer.FadeToPause; // Перевод текущего трека в режим пауза

P := Aux1; // через что играть
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules);
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;

DeckA.Eject; // Очистка DeckA от текущего трека
DeckB.Eject; // Очистка DeckB от текущего трека

PAL.WaitForTime('+00:00:30'); // время ожидания 30 сек

IdlePlayer.Next; // Вставка очередного трека в ожидании в свободный плеер

DeckA.Play; // Начало воспроизведения через DeckA или
DeckB.Play; // Начало воспроизведения через DeckB

Время ожидания измени на желаемое
Да, Zidane Tribal не забудь скрипт запускать через планировщик
Удачи!!!

Отредактировано wisher (15-10-2014 11:19:07)

388

Re: Скрипты PAL для Sam Broadcaster

пишет wisher:

Zidane Tribal попробуй этот скрипт
Возможно это то что тебе необходимо

var Song : TSongInfo;
var P : TPlayer;
var i : integer;

ActivePlayer.FadeToPause; // Перевод текущего трека в режим пауза

P := Aux1; // через что играть
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules);
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;

DeckA.Eject; // Очистка DeckA от текущего трека
DeckB.Eject; // Очистка DeckB от текущего трека

PAL.WaitForTime('+00:00:30'); // время ожидания 30 сек

IdlePlayer.Next; // Вставка очередного трека в ожидании в свободный плеер

DeckA.Play; // Начало воспроизведения через DeckA или
DeckB.Play; // Начало воспроизведения через DeckB

Время ожидания измени на желаемое
Да, Zidane Tribal не забудь скрипт запускать через планировщик
Удачи!!!

Нет, мне не нужно чтоб на фоне Aux1 что-то играло, а после Aux1 нужно чтоб в деке А или В начал играть с начала (в смысле начала трека) трек  из списка Queue.
Нет, это мне придется каждый раз выставлять время в ручную, причем надо будет его сначала точно выверить опытным путем иначе будет каша

389

Re: Скрипты PAL для Sam Broadcaster

Как я понял через Aux1 у тебя будет играть что то другое, теперь всё ясно, что время будет всегда разное и поэтому тебе этот скрипт не подходит. Тебе нужно всё наоборот делать чтоб песни играли как обычно через Деки, а вот фон через Aux1 иначе ничего нельзя будет реализовать. Тебе что то другое необходимо реализовать .... Даже и не знаю чем помочь, единственное - это просто экспериментировать и может что и получится. Желаю тебе удачки!

390

Re: Скрипты PAL для Sam Broadcaster

Немного подумав... после утренней чашечки кофе, у меня появилась идея как тебе помочь.
Тебе нужно создать два скрипта и поставить их на включение через планировщик в одно время.
Допустим первый: будет фейдить чтоб запустить точно по времени треки из какой то категории или плейлист,
а второй: будет играть через Aux1 какой то фон, джингл или ещё чего то...
Затем только нужно будет настроить второй, точно плюс или минус по времени чтоб правильно налаживался на играющий трек и всё!
Думаю эта идея реально будет работать!!!

391

Re: Скрипты PAL для Sam Broadcaster

Все, допилил))) Только пока скрипт срабатывает возникает пауза в несколько секунд, а  это не хорошо, поэтому надо бы сделать чтоб определялось сколько осталось до конца трека в Aux1 и за 3-5 секунд до окончания уже срабатывал скрипт, а не ждал как сейчас когда трек закончится

var Song : TSongInfo;
var P : TPlayer;
PAL.WaitForTime('9:40:00');
ActivePlayer.FadeToPause;

P := Aux1;
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules);
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;

DeckA.Eject;
DeckB.Eject;

var Waiting : Boolean = True;
while Aux1.status = 0 do
begin
  Waiting := False;
end;


IdlePlayer.Next;
DeckA.FadeToPlay;
DeckB.FadeToPlay;

Отредактировано Zidane Tribal (14-10-2014 12:23:01)

392

Re: Скрипты PAL для Sam Broadcaster

Уррааа!! Допилил)) Теперь все как мне надо) Может кому пригодится)

//Скрипт для остановки воспроизведения в деках и запуска в Aux1, например, заранее записанной рубрики.
//Скрипт ставим в Scheduler на более раннее время чем указанное время срабатывания скрипта.
//by Zidane Tribal
//14.10.2014

var Song : TSongInfo;
var P : TPlayer;
PAL.WaitForTime('9:40:00'); //время в которое сработает скрипт
ActivePlayer.FadeToPause; //фейдим активную деку в паузу. Можно прописать FadeToStop.

P := Aux1; //через что будет играть трек
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules); //выбираем категорию где лежит наш трек
begin
Aux1.QueueSong(Song); //вставляем трек
Aux1.Play;            //проигрываем
End;
End;

DeckA.Eject;      //очищаем деки А
DeckB.Eject;      //и В


var Waiting : Boolean = True;
while ((Aux1.Duration-Aux1.CurTime)>4500) do    //выставляем через какое время до окончания трека скрипт продолжит работу
begin
 Waiting := False;
end;


IdlePlayer.Next;     //вставляем трек из Queue в одну из дек
DeckA.FadeToPlay;    //запуск с фейдером
DeckB.FadeToPlay;    //запуск с фейдером

393

Re: Скрипты PAL для Sam Broadcaster

Zidane Tribal
Очень рад, что у тебя получилось!

Я вот думаю что эту строчку можно просто удалить, она не столь важна

PAL.WaitForTime('9:40:00'); //время в которое сработает скрипт

В планировщике запуск скрипта можно отрегулировать с точностью до секунд
В любом случае Молодец! Может кому и пригодиться

394

Re: Скрипты PAL для Sam Broadcaster

пишет wisher:

Я вот думаю что эту строчку можно просто удалить, она не столь важна

PAL.WaitForTime('9:40:00'); //время в которое сработает скрипт

В планировщике запуск скрипта можно отрегулировать с точностью до секунд

Нужна, ибо пока скрипт добавится, пока запустится проходит время, а в моем случае он уже подготовленный и по наступлению указанного времени срабатывает за доли секунды

Отредактировано Zidane Tribal (14-10-2014 15:02:12)

395

Re: Скрипты PAL для Sam Broadcaster

Самое главное, что ты добился желаемого результата!
В помощь другим!

396

Re: Скрипты PAL для Sam Broadcaster

Универсальный автоматический скрипт-сценарий с голосом ведущего в начале передачи и перед завершением с накладкой на текущий трек, очисткой плейлистов до и после передачи, отключением скрипта после выполнения всей работы и всё это 4 в 1, время работы всего скрипта 1 час (что очень удобно для тех у кого слабенький компьютер, дабы не перегружать процессор ...) Можно использовать для программы "Час Зарубежной Музыки", "Альтернативного Рока", и так далее ... В планировщике можно установить запуск в любой день недели или к примеру дважды в субботу и воскресенье ...

Пример скрипта: Запуск в 10 часов утра

// Запуск этого сценария через планировщик (Event Scheduler) в 9:59:12

var P : TPlayer;
var Song : TSongInfo;

var OldTime : DateTime;
OldTime := Now;
PAL.Loop:=True; // Запуск выполнения работы скрипта

if (now >= T['09:59:16']) and (now <= T['09:59:30']) then // Время работы первого сценария 14 сек
 begin
        Queue.Clear; // Очистка плейлиста от треков
        Cat['english'].QueueBottom(smMRPA, EnforceRules); // Ставим 3 трека в плейлист из текущей категории
        Cat['english'].QueueBottom(smMRP, EnforceRules);
        Cat['english'].QueueBottom(smLemmingLogic, EnforceRules);
        Queue.AddFile('C:\voice-show\start-english.mp3',ipTop); // (Фоновый джингл) Голос ведущего о начале передачи (ТОП 20+, Алтернатива ...)

PAL.WaitForTime(T['+00:00:20']); // Задержка 20 сек. от повторного срабатывания
End;

if (now >= T['09:59:26']) and (now <= T['10:50:26']) then // Время работы второго сценария 51 мин
 begin
         Cat['english'].QueueBottom(smLemmingLogic, EnforceRules); // Добавление 1 трека из категории, можно изменить на (smMRPA, EnforceRules)

PAL.WaitForPlayCount(1); // Повторный запуск через 1 трек
End;

if (now >= T['10:58:16']) and (now <= T['10:58:30']) then // Время работы третьего сценария 14 сек
  begin
         P := Aux1; // через что играть (Эффект налаживания на играющий трек)
         if P <> nil then
          begin
         Song := Cat['end-english'].ChooseSong(1,NoRules); // (Чистый джингл без фона) Голос ведущего о завершении текущей передачи
         if Song <> nil then
          begin
         Aux1.QueueSong(Song);
         Aux1.Play;
         End;
         End;

PAL.WaitForTime(T['+00:00:20']); // Задержка 20 сек. от повторного срабатывания
End;

if (now >= T['10:59:16']) and (now <= T['10:59:30']) then // Время работы поледнего сценария 14 сек
 begin
        Queue.Clear; // Очистка плейлиста от оставшихся треков
        Cat['russian'].QueueBottom(smMRPA, EnforceRules); // Ставим 2 трека в плейлист из другой категории
        Cat['russian'].QueueBottom(smMRP, EnforceRules);

PAL.Loop:=False; // Завершение работы всего скрипта в режим стоп
End;

// После выполнения всех пунктов сценария, скрипт завершает свою работу

Время запуска скрипта возможно придётся изменить на желаемое ...
В дополнение: (для тех кто использует скрипт часовой отбивки, очень важно, чтоб этот скрипт запускался на несколько секунд раньше иначе будут сбои. Придётся просто немного протестировать и всё будет ОК)

Может кому пригодиться! Удачи!

Отредактировано wisher (02-11-2014 10:22:27)

397

Re: Скрипты PAL для Sam Broadcaster

wisher Спасибо, щас попробую поставить, посмотрим что получится

398

Re: Скрипты PAL для Sam Broadcaster

Радио 1068.wos.lv было создано мной в июле 2013 года при определенных обстоятельствах.
Каких?
Мне просто понравились записи с этой Станции.

big_smile big_smile big_smile big_smile big_smile big_smile улыбнуло откровение от чувака ...

Отредактировано VapSite (31-10-2014 19:42:48)

399

Re: Скрипты PAL для Sam Broadcaster

пишет pluta:

wisher Спасибо, щас попробую поставить, посмотрим что получится

да, не за что pluta, я ещё сам потихоньку учусь...
в любом случае пожалуйста!

400

Re: Скрипты PAL для Sam Broadcaster

пишет saxell:

Приветствую всех!

Долго читаю этот форум и вот назрела необходимость обратиться с вопросом за помощью.
Друзья, есть вот такой скрипт:

var P    : TPlayer;
var Song : TSongInfo;
var strFile, strPath, strJingle : String;

strPath := 'C:\Users\saxell\Desktop\Jingles\'; // Ïóòü ê ïàïêå, ãäå ëåæàò îòáèâêè ÷àñîâ
strJingle := 'C:\Users\saxell\Desktop\Jingles\EuropeRussia-reklama.mp3'; //Ïóòü è íàçâàíèå äæèíãëà ïîñëå îòáèâêè ÷àñîâ

PAL.Loop := True;

PAL.WaitForTime('XX:59:45'); //çàïóñêàåìñÿ â êîíöå êàæäîãî ÷àñà. 45 ñåê - âðåìÿ áóôåðåçàöèè, ïîäáèðàåì ïî ñâîì ïàðàìåòðàì, âêóñàì

strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3'; //îïðåäåëÿåì íàçâàíèå ôàéëà ñ íóæíûìè ÷àñèêàìè. Ôîðìàò èìåíè ôàéëà XX-XX.mp3

P := Aux1;
if P <> nil then
begin
    Queue.AddURL('mms://live.rfn.ru/vesti_fm',ipTop);
    PAL.WaitForTime(T['+00:00:15']); //Wait 15 secs
    Queue.AddFile(strJingle, ipTop);
    Queue.AddFile(strFile, ipTop);

P := ActivePlayer;
if P <> nil then P.FadeToNext;

end;

Здесь часовая отбивка, далее промо радио, далее новости с внешнего источника. Все работает прекрасно, но вот как сделать, чтобы этот внешний источник играл определенное время? Например 5 минут, а дальше штатный плейлист??

Прошу помощи!!

И вдогонку вопрос. Умеет ли SAM работать по DTMF или по какой-либо другой метке?

просматривал сообщения и вот наткнулся на выше описанное

смастерил такой скриптик может что и не правильно но всё вроде работает
пример ретрансляции выпуска новостей радиостанции Вести FM с увеличением громкости вещания
version.hour.jingle.improved.1.5

{Запуск скрипта через планировщик установить за 10 секунд до начала точного времени запуска}
var P    : TPlayer;
var Song : TSongInfo;
var strFile, strPath, strJingle : String;

strPath := 'C:\CLOCK\'; // Путь к папке, где лежат отбивки часов
strJingle := 'C:\CLOCK\start_hour.mp3'; // Путь и название джингла после отбивки часов

PAL.Loop := False; // Одноразовый цикл работы скрипта

PAL.WaitForTime('XX:59:46'); // Точное время запуска (подгоняем секунды опытным путём)

strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3'; // Определяем название файла с нужными часиками. Формат имени файла XX-XX.mp3

P := Aux1;
if P <> nil then
begin
    Queue.AddURL('http://icecast.vgtrk.cdnvideo.ru/vestifm_mp3_192kbps',ipTop); // Путь URL внешнего источника новостей
    Queue.AddFile(strJingle, ipTop);
    Queue.AddFile(strFile, ipTop);

P := ActivePlayer;
if P <> nil then P.FadeToNext;
end;

{Здесь очень важно настроить секунды в зависимости от длины ваших файлов отбивки часов и джингла время ожидания PAL.WaitForTime('+00:00:24');
необходимо изменить и добиться срабатывания IdlePlayer.Volume := 633; на увеличение громкости иначе не будет срабатывания увеличения громкости}

PAL.WaitForTime('+00:00:24'); // 24 сек. ожидания к принудительному увеличению уровня громкости не активного плеера (подгоняем секунды опытным путём)

IdlePlayer.Volume := 731; // увеличение положения громкости не активного плеера выше стандартного

PAL.WaitForTime('+00:03:18'); // время ожидания до завершения вещания новостей 

ActivePlayer.Volume := 537; // начало уменьшения горомкости новостей
ActivePlayer.Volume := 474;
ActivePlayer.Volume := 411;
ActivePlayer.Volume := 348;
ActivePlayer.Volume := 285;
ActivePlayer.Volume := 222;
ActivePlayer.Volume := 159;
ActivePlayer.Volume := 96;

ActivePlayer.FadeToNext; // плавный переход заврешения новостей и начало воспроизведения текущего трека в ожидании

PAL.WaitForTime('+00:00:04'); // 4 сек. ожидания (не изменять)

DeckA.Volume := 255; // возврат положения громкости DeckA в нормальное состояние
DeckB.Volume := 255; // возврат положения громкости DeckB в нормальное состояние
{После завершения сценария скрипт завершает свою работу}

Главное преимущество этого скрипта в том, что абсолютно любую радиостанцию имеющие в начале часа выпуски новостей
можно реализовать и ретранслировать для ваших нужд

Отредактировано wisher (14-01-2015 10:00:16)