Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   TrainZ - Звуки (http://www.trainsim.ru/forum/forumdisplay.php?f=29)
-   -   Звуки вагонов (http://www.trainsim.ru/forum/showthread.php?t=9581)

Evgenyi 17.05.2010 20:19

Блин, нафиг! Дай мне скрипт.

Диспетчер 17.05.2010 20:21

Он здесь [url]http://stream.ifolder.ru/17739731[/url]

Gregory_777 18.05.2010 03:26

Не надо делать декларацию int radio_m ВНУТРИ треда. Делайте снаружи.

TRam_ 18.05.2010 03:32

[QUOTE=Gregory_777;178058]Не надо делать декларацию int radio_m ВНУТРИ треда. Делайте снаружи.[/QUOTE]а смысл?

[QUOTE]да уже 5я попытка прошла даром...[/QUOTE]тоже смотрел. Тоже ошибок в скобках не нашёл. Попробуй кусочки кода в комментарии заносить, вдруг получится пофмиксить, чего нам не работает.

Кстати parse error также срабатывает на русские символы.

jim_spb 18.05.2010 10:44

Пробовал прогонять этот скрипт через компилятор - ошибок нет!

Evgenyi 18.05.2010 12:28

Блин нафиг....мужики, ну вы чего блин?! Ну ктож так делает:

} else Sleep(1);

А скобку после else дядя ставить будет?

Это раз.

В инитерьере вместо me всегда ставится loco. Это два

Но это при том условии что это внутрисалонный скрипт. Если это внешние звуки, т.е. приаттачен к вагону, тогда надо смотреть.

genesis 18.05.2010 13:39

[SIZE="3"][FONT="Courier New"]Кто-нибудь здесь
{[INDENT]имеет
{[INDENT]понятие об
{[INDENT][B][U]индентации[/U][/B][INDENT]кода?[/INDENT][/INDENT]}[/INDENT]}[/INDENT]}[/FONT][/SIZE]

TRam_ 18.05.2010 17:21

[QUOTE]В инитерьере вместо me всегда ставится loco. Это два[/QUOTE]Женя! Это не внутрисалонный, это вагонный скрипт. Так что me.

[QUOTE]Кто-нибудь здесь
{[INDENT]имеет
{[INDENT]понятие об
{
индентации
кода?
}
[/INDENT]}
[/INDENT]}[/QUOTE]

не имеет[INDENT]{
никто[INDENT]{
совсем();
}
[/INDENT]}[/INDENT]

особенно{ [INDENT]именно{[INDENT]в этом случае[/INDENT]}
[/INDENT]}

Gregory_777 18.05.2010 17:23

[code]thread void InternalSoundLoop() {
float vel;
while(1) {
if(Inside) {
vel=GetVelocity() * 3.6;
if (vel<1.2) Sleep(1);
else if(vel<10.0) Sleep(World.PlaySound(MyAsset1, "sound/vel_inside_0.wav", 1.0f, 14.0f, 100.0f, me, "a.bog1")-0.2);
else if(vel<20.0) Sleep(World.PlaySound(MyAsset1, "sound/vel_inside_1.wav", 1.0f, 14.0f, 100.0f, me, "a.bog1")-0.2);
else if(vel<30.0) Sleep(World.PlaySound(MyAsset1, "sound/vel_inside_2.wav", 1.0f, 14.0f, 100.0f, me, "a.bog1")-0.2);
else if(vel<50.0) Sleep(World.PlaySound(MyAsset1, "sound/vel_inside_3.wav", 1.0f, 14.0f, 100.0f, me, "a.bog1")-0.2);
else if(vel<60.0) Sleep(World.PlaySound(MyAsset1, "sound/vel_inside_4.wav", 1.0f, 14.0f, 100.0f, me, "a.bog1")-0.2);
else Sleep(World.PlaySound(MyAsset1, "sound/vel_inside_5.wav", 1.0f, 14.0f, 100.0f, me, "a.bog1")-0.2);
} else Sleep(1);
}
}[/code]

Вот так должна выглядеть ф-я в моей редакции. Нету там ошибок, всё замечательно работает. Сегодня доавлю ешё рандомное воспроизведение звука движения по "бесстыковому" пути и перестука на скоростях выше 30 км/ч, чтобы перестук не задалбывал.

[QUOTE=Evgenyi;178103]А скобку после else дядя ставить будет?[/QUOTE]

GameScript допускает (как PHP или Javascript) не заключать тело контейнеров for, if, while, else и try в скобки, если контейнер содержит не более 1 оператора.

TRam_ 18.05.2010 17:34

[QUOTE]GameScript допускает (как PHP или Javascript) не заключать тело контейнеров for, if, while, else и try в скобки, если контейнер содержит не более 1 оператора.[/QUOTE]Си это тоже позволяет. Как и C#, являющийся прародителем GameScript.

genesis 18.05.2010 17:40

Прародителем GSа сишарп ну никак быть не может, он появился позднее. Речь о джаве, но это вовсе не прародительство, а аналогия.
[QUOTE=Evgenyi;178103]В инитерьере вместо me всегда ставится loco.[/QUOTE]
Мда, начнем с того что узнаем в чем разница между [I]loco[/I] и [I]me[/I].

cosmos 20.05.2010 22:25

[QUOTE=Gregory_777;178149]
Сегодня добавлю ешё рандомное воспроизведение звука движения по "бесстыковому" пути и перестука на скоростях выше 30 км/ч, чтобы перестук не задалбывал.[/QUOTE]
Да, работа скрипта с длинными звуками нереальна, а короткие, своей зацикленностью всю реалистичность сводят на нет.
Решил поступить так. Взял длинный звуковой файл соответсвующий определенной скорости и разрезал его на равные части. Так поступил и с другими. Звуки обозвал soundp_i, где p - № набора звуков определенной скорости, а i - № файла из набора.
Задача: воспроизведение звуков из набора друг за другом (ну, пока скорость позволяет, иначе будет "играть" другой набор), т.к. рандомно "играет" не всегда убедительно из-за несовпадений.
Скрипт работает, звуки воспроизводятся, правда надо еще все это настроить, чтоб без запинки и задоринки, а так, результат меня порадовал.
Единственное что напрягает, так это большая кипа звуковых файлов в папке sound. А вот сам фаргмент кода (поток), тестовый, сырой, но рабочий:
[code]thread void SoundLooper(void)
{
while(true)
{
float speed=GetVelocity();
if (speed > 0.2 and speed <= 2.8)
{
p = 1;
i = 0;
sound = true;
count = true;
}
if (speed > 2.8 and speed <= 5.6)
{
p = 1;
count = true;
if (i >= 19)
i = 1;
else
{
sound = true;
i++;
}
}
if (speed > 5.6 and speed <= 8.4)
{
p = 2;
if (count == true or i == 20)
{
count = false;
i = 1;
}else{
sound = true;
i++;
//Interface.Print(i);
}
}
if (speed > 8.4 and speed <= 14.0)
{
p = 3;
if (count == false or i == 16)
{
count = true;
i = 0;
}else{
sound = true;
i++;
}
}
if (speed > 14.0 and speed <= 17.0)
{
p = 4;
if (count == true or i == 16)
{
count = false;
i = 0;
}else{
sound = true;
i++;
}
}
if (speed > 17.0 and speed <= 26.0)
{
p = 5;
if (count == false or i == 22)
{
count = true;
i = 0;
}else{
sound = true;
i++;
}
}
if (speed > 26.0)
{
p = 6;
if (count == true or i == 17)
{
count = false;
i = 0;
}else{
sound = true;
i++;
}
}
if (sound == true and p > 0)
Sleep(World.PlaySound(asset,"sound/sound" + p + "_" + i + ".wav",1.0,10.0,100.0,me,"a.bog0")-0.5);[/code]
Сразу говорю, он недоделанный, но идея может быть кому и пригодится.

Combine 20.05.2010 23:36

А c soundscript экспериментировал кто-нибудь?

Диспетчер 20.05.2010 23:54

Я пробовал,прописывал звуки к точке привязки в салоне,но они не заработали......

Evgenyi 21.05.2010 00:31

[QUOTE=Combine;178575]А c soundscript экспериментировал кто-нибудь?[/QUOTE]

Ну есть такие ;)

[QUOTE]Мда, начнем с того что узнаем в чем разница между loco и me.[/QUOTE]

Да я просто сначала думал что тут внутрсалонный пытались делать.

TRam_ 21.05.2010 01:04

[QUOTE]Да я просто сначала думал что тут внутрсалонный[/QUOTE]скрипт вагонный. Но скрипт следит за пользователем (внутри/снаружи) и воспроизводит соответственно нужные звуки

[QUOTE]Единственное что напрягает, так это большая кипа звуковых файлов в папке sound.[/QUOTE]можно сделать получение asset из одного куида, общего для всех вагонов

genesis 21.05.2010 08:55

[QUOTE=Диспетчер;178576]Я пробовал,прописывал звуки к точке привязки в салоне,но они не заработали......[/QUOTE]
Саундскрипт доступен для объектов начиная с мапобжекта (скенери, вагоны и т.п.). Кабина наследуется от мешобжекта, соответственно, такой функциональности не имеет.
[QUOTE=Evgenyi;178580]Да я просто сначала думал что тут внутрсалонный пытались делать.[/QUOTE]
Внутрисалонный-внешний не суть важно, нужно понимать какой смысл несет [I]me[/I], какой [I]loco[/I].
[I]me[/I] — ссылка на текущий объект. Тот, где находится метод, в котором ты пишешь код. Про него в 90% случаев можно забыть, окромя явного указания переменной-члена при перекрытии имен или передачи данного объекта функции.
[I]loco[/I] — ну начнем с того, что это не ключевое слово. А во-вторых, его наличие обусловлено лишь реализацией DefaultLocomotiveCabin, ты можешь сделать двадцать других, а унаследовавшись от Cabin, никакого лока не будет. Ну а в-третьих, локо в DLC — это ссылка на локомотив, где стоит кабина.
Так что ни что ни кого не заменяет, все зависит от того, к чему нужно обращаться.

Gregory_777 21.05.2010 19:59

[B]cosmos[/B], зачем такой огород городить? Да ещё и циклы внутри тредов... Бееее...

genesis 21.05.2010 20:14

Цикл внутри нити тащемта столп программирования в ТРСе :)

TRam_ 21.05.2010 20:49

[QUOTE]тащемта столп программирования в ТРСе[/QUOTE]другой столп, изобретённый тобой - хендлер, сам себя запускающий. Только его писать дольше, да и останавливать сложнее.

genesis 21.05.2010 21:24

Удалить месседж из очереди проще простого — ClearMessages(string, string). А вот для остановки потока ему нужно регулярно проверять условие остановки, что не всегда рационально.

TRam_ 21.05.2010 23:12

Да, по этому соглашусь - не то хотел сказать в предыдущем сообщении.

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

cosmos 22.05.2010 01:48

[QUOTE=Gregory_777;178726][B]cosmos[/B], зачем такой огород городить? Да ещё и циклы внутри тредов... Бееее...[/QUOTE]
Циклы внутри трэдов? Хде? Приглядись или я чего-то не понимаю? Это основной поток, больше нету.:) У этого огорода, тем неменее, звук получается красавный.
ЗЫ: кстати, я изначально ориентировался только на звуки внутри салона.

TRam_ 22.05.2010 01:57

[QUOTE]кстати, я изначально ориентировался только на звуки внутри салона.[/QUOTE]лучше делать 3 звука

1) внутри салона (записанный в купе) - для "Internal-View"
2) для вида снаружи (записанный в тамбуре) - для "External-View" и "Tracking-View"
3) для вида с земли (записанный возле проезжающего поезда) - для "Roaming-View"

Напоминаю, доплера в трс нет (да и в "External-View" доплера быть не должно :) )

cosmos 22.05.2010 02:10

Я задумывался насчет этого, но хочу сначала звук торможения внутри замутить (характерное шуршание такое на скорости). Уж очень меня он цепляет.:)

TRam_ 22.05.2010 02:17

я когда-то так делал

thread void BrakeLoop1()
[INDENT]{
if(!brake_state)[INDENT] {
brake_state=true;
Sleep(World.PlaySound(MyAsset1, "sound/brake_start.wav", brake_sound, 10.0f, 100.0f, me, "a.bog0")-0.2);

while(brake_state_set)
[INDENT]{
Sleep(World.PlaySound(MyAsset1, "sound/brake_loop.wav", brake_sound, 10.0f, 100.0f, me, "a.bog0")-0.2);
}[/INDENT]
if(TC<1.0) //звук отпуска
[INDENT]Sleep(World.PlaySound(MyAsset1, "sound/brake_otpusk.wav",brake_sound, 10.0f, 100.0f, me, "a.bog0"));
else//звук остановки[/INDENT] Sleep(World.PlaySound(MyAsset1, "sound/brake_stop.wav",brake_sound, 10.0f, 100.0f, me, "a.bog0"));

brake_state=false;
}[/INDENT] }[/INDENT]




и в цикл того потока добавлялось


[INDENT] speed=Math.Fabs(GetVelocity()); //скорость нужна по модулю

TC=GetBrakeCylinderPressure()*981-1;


if(speed<0.8)
[INDENT]brake_sound=0.4;[/INDENT] else [INDENT]if(speed<2)
[INDENT]brake_sound=0.8;[/INDENT] else
[INDENT]brake_sound=1;[/INDENT] [/INDENT]

if(TC>1.1)
[INDENT]{
brake_state_set=true;
BrakeLoop1();
}[/INDENT]
if(TC<1.0 or speed<0.6)
[INDENT]brake_state_set=false;[/INDENT][/INDENT]

cosmos 22.05.2010 02:27

У меня звук торможения опять же длинный и в зависимости от скорости он меняется в звучании, вот тут-то и хотелось бы поэкспериментировать.:)
Хотя, из этого кода кое-что можно подчерпнуть, спасибо.

TRam_ 22.05.2010 02:28

значит в этом месте

if(speed<0.8)
[INDENT]brake_sound=0.4;[/INDENT] else [INDENT]if(speed<2)
[INDENT]brake_sound=0.8;[/INDENT] else
[INDENT]brake_sound=1;[/INDENT] [/INDENT]
добавляй ещё работу с номером звука. Главное - попробовать удачно зациклить все его части.

cosmos 22.05.2010 02:45

Да да, я уже узрел.:) Тут самое сложное - это грамотная обработка звука (а у меня с этим как бы так), т.к. подгонка скрипта мера общая по отношению к звукам.

Диспетчер 29.08.2010 10:39

Помогите пожалуйста....В Саундскрипте есть такой тег value-range ,который устанавливает время(в зависимости от времени суток)звучания.Мне нужно получить время звучания с 9.00утра до 23.00 вечера.Ночью звук должен молчать...Какие цифровые значения у этого тэга в данном случае должны быть?

genesis 03.09.2010 19:16

0.375, 0.9583 (если 0 - 0 часов, а 1 - 24 часа. Там вроде так и есть)

Gregory_777 20.10.2010 16:27

Слушайте, а вот в [URL="http://www.youtube.com/watch?v=KeG-L5GVReg"]этом[/URL] ролике про трассу "Фантазия" какие-то интересные звуки пасс. вагонов. Это что?

Sandrilyon 21.10.2010 18:53

Звуки, скорее всего, просто наложены на видео.


Текущее время: 06:05. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim