PDA

Просмотр полной версии : Звуки вагонов


TRam_
14.02.2010, 23:20
После появления моей нарезки звуков и небольшого скрипта, их запускающего, назрела необходимость темы о скриптовых звуках стука.

Вообще, кончно, можно попытаться делать звуки телег стандартными tracksound'ами, но получить реалистичные звуки внутри вагона при этом вряд-ли удастся (предназначенный для этого тег mufle может только уменьшать громкость внешних звуков, да и то не всегда корректно)

Для того, чтобы отключить дефолтный стук, достаточно строки в trainzoptions.txt

-disablerailjointsound

Но кроме этого надо убирать и tracksound'ы телег. По дефолту (если не прописаны свои) тележкам прописывается <kuid:-3:10194>, так что если Вы радикально решили полностью убрать встроенные звуки, то открываем этот куид на редактирование, удаляем из него все звуки, а в config.txt оставляем только

kuid <kuid:-3:10194>
kind "tracksound"
asset-filename "default"

(не понравится - возвращайте куид к оригиналу)

Если не хочется портить этот куид, просто поставьте на тележки вагонов аналогичные "пустые" tracksound'ы.

Теперь по звукам. Что я нкашёл (это чисто опытные факты, не более) из позволяющего более-менее снизить глючность скриптовых звуков

1) желательно, чтобы максимальная громкость звука не превышала 70-75дБ . Если Вам покажется это слишком тихо, то всегда можно увеличить громкость колонок

2) в начале звука делать плавное увеличение уровня от 0 до обычного (втечение 0.2-0.3 секунды), а в конце - от обычного до 0

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


В дальнейшем, если появится материал и удастся выделить время, подумаю над скриптом, который бы запускал разные звуки в зависимости от вида (1 или (2 и 3) или 4) а также от нахождения в вагоне.

TRam_
14.02.2010, 23:36
ну а по существующему скрипту...

Итак, мы сделали звук внешнего вида. Определили точное время между перестуками - они хорошо видны (и в звуковом редакторе обычно есть возможность измерить время между ними). Затем делим длину вагона на это время (в секундах), и получаем скорость вагона в метрах в секунду.

Для того, чтобы скрипт понял этот звук, необходимо присвоить ему имя

vel_outside_*.wav

где * - округлённая скорость поезда в метрах/секунду.


Далее, чтобы добавить в скрипт

1) открываем файл krasn_strela.gs в блокноте...

2) ищем строку

thread void VelocitySoundLooper()

ниже в строке

int[] soundlib=new int[8];

вместо 8 ставим общее число наших звуков

далее в колонку


soundlib[0]=2;
soundlib[1]=7;
soundlib[2]=14;
soundlib[3]=15;
soundlib[4]=16;
soundlib[5]=19;
soundlib[6]=22;

указываем в "слотах" скорости, которые есть в именах звуков вида vel_outside_*.wav . Если требуется, добавляем новых.

А в той части, где

if(vel>soundlib[6])
Sleep(World.PlaySound(MyAsset1, "sound/vel_outside_"+soundlib[6]+".wav", 1.0f, 14.0f, 100.0f, me, "a.bog0")-0.2);
else


и т.п. можем добавить ещё таких строк, для новых слотов. В дальтнейшем я это изменю, но пока так...

Gregory_777
15.02.2010, 05:41
TRam_, лови звуки переезда. Обозначение:

[начальная скорость]-[конечная скорость]_[in/out].wav

in - приближение к переезду
out - удаление от.

http://stream.ifolder.ru/16419560

TRam_
15.02.2010, 20:35
лови результат

http://dump.ru/file/4318201


правда, слишком длинные звуки убивают звуковой движок ТРС на**р, но можешь попробовать. Если изменение громкости всё-таки не заработает, делай свою модель маркера с точкой привязки.

(ну и проверь логику определения направления движения состава - чувствую там ошибка закралась)

genesis
15.02.2010, 21:37
Эффект Доплера — скриптами? А тут понимают толк в извращениях, ничего не скажешь :)

TRam_
15.02.2010, 21:50
А тут понимают толк в извращениях, ничего не скажешьне, тут человек скриптовать просто учится. Ну и дал ему конструктор, раз уж просит уже год

genesis
15.02.2010, 22:40
Аа, а то я уже испугался :)

Gregory_777
16.02.2010, 01:59
Смех - смехом, а Ауран походу не собирается звуковой движок менять.

TRam_
16.02.2010, 02:02
мы это знаем. В джете изначально не было заложено ничего для управления звуками. Дефолтный стук - и тот сделан аналогично вышеприведённому триггеру (содержимое data.ja об этом говорит), только звуки там корче

Gregory_777
16.02.2010, 02:59
Пока звенеть заставить не удалось :(
Хотя бы просто звенеть.
Есть какая-то возможность кидать на экран значения переменных из скрипта в риалтайме?

TRam_
16.02.2010, 03:06
Пока звенеть заставить не удалосьну попробуй задом маркер поставить... У меня звенело.

Вообще есть способы, связанные с Interface.Log() и им подобные, но мне их заставить работать не удалось

Я по-дедовски делаю, с постпроверкой (всё равно скрипт после этого переделывать)

1) прописываем "-enablescriptmessagelogging" в трейнзопшонзах
2) в нужном месте делаем


PostMessage(me, "!!!!!!!!!!1!!!!!",<одна нужная переменная>+"__"+<вторая нужная переменная>,0.0);


После сессии залезаем в jetlog.txt и ищем наши восклицательные знаки

Gregory_777
16.02.2010, 06:06
Мозг взорвался. А вот это нам помочь не может?
public native void PlaySoundScriptEvent(string soundTrigger)
Parameters
soundTrigger = Name of the sound event to start playing, this equates to the trigger tag of the sound script subcontainer in config.txt.
Returned Value
None
Syntax
PlaySoundScriptEvent("dayloop");
Notes
Plays the specified sound event from the asset's SoundScript.
SoundScripts are defined as sub-containers in the soundscript container of the asset's configuration.
For details on creating assets with SoundScripts, see the Content Creators Guide.
This method will start playing the sound.
Depending on the SoundScript configuration, the sound will either be played just once or played continuously in a looping cycle such that StopSoundScriptEvent() will need to be called to stop it.

genesis
16.02.2010, 11:01
Подойдет, почему бы и нет.
Смех - смехом, а Ауран походу не собирается звуковой движок менять.
Здесь вновь собираются забивать гвозди микроскопом? :D

Combine
16.02.2010, 11:04
Есть какая-то возможность кидать на экран значения переменных из скрипта в риалтайме? Interface.Print(string); Выводит сообщение в пейджер. Только аккуратно, не забудь в релизе вывод убрать. И их число там ограничено (несколько тысяч).

TRam_
16.02.2010, 11:59
Мозг взорвался. А вот это нам помочь не может?я что-то не слышал, что отдельный звук из саундскрипта может быть остановлен. Так что разницы между PlaySoundScriptEvent и PlaySound никакой, а мороки больше

genesis
16.02.2010, 13:06
StopSoundScriptEvent(string)

TRam_
16.02.2010, 13:08
StopSoundScriptEvent(string)

звук мгновенно останавливается?

Combine
16.02.2010, 13:23
Вроде да. Но в скрипте он всегда закольцованный, и это ничем не убрать.

Gregory_777
16.02.2010, 18:52
И громкость регулировать нельзя, придётся делать точки привязки на самом маркере. Я думаю для изготовления маркера мне gMax'а хватит. Ща попробую.

Здесь вновь собираются забивать гвозди микроскопом? :D

Почему? Просто хотим сделать переезд с имитацией допплера. Собственно, переездный звонок - это единственное, что слышно в вагоне более-менее отчётливо, и когда он звенит без допплера это выглядит не айс. Небольшая имитация не помешает.

Вот допплер от колпар, свитска, тифона, МВ, дизеля - это уже из области фантастики, пока Ауран не сделает нормальную звуковую модель.

Кстати, а что такое SoundScript? Чот обнюхал весь Trainzdev - ничего внятного не нашёл.

Диспетчер
02.03.2010, 00:35
TRam Как продвигается разработка скрипта?

TRam_
02.03.2010, 00:46
пока никак. Учёба...

Диспетчер
02.03.2010, 01:10
Понятно,а с имитацией доплера у переезда.....что-то получилось?

Диспетчер
14.05.2010, 00:17
TRam_ приветствую! В ходе эксперементов со скриптом выяснилось,что он не может работать в тех моделях,где отсутствуют точки привязки задней и передней сцепки вагона.....как это победить? Ведь все модели с интерьером(за исключением некотроых) именно такие......

TRam_
14.05.2010, 03:14
открыть скрипт в блокноте, и поискать в нём строки типа

World.PlaySound(*,* <и так далее> *,"a.имя точки привязки")

и заменить a.имя точки привязки на a.bog0 или a.bog1

т.е. на

World.PlaySound(*,* <и так далее> *,"a.bog0")

Диспетчер
14.05.2010, 19:30
Значит ситуация такова-в скрипте всё подправил как описано выше,но осталась ошибка.....
http://s41.radikal.ru/i091/1005/2d/a383497a3b2bt.jpg (http://radikal.ru/F/s41.radikal.ru/i091/1005/2d/a383497a3b2b.jpg.html)
При этом звук внутри салона не воспроизводится....

Gregory_777
15.05.2010, 21:04
Понятно,а с имитацией доплера у переезда.....что-то получилось?Фигня получается. Если привязывать звук к маркеру переезда (чтобы правильно менялась громкость), то "допплер" появляется и снаружи. Если на виде "2" это ещё терпимо, то на виде "4" - убивает: создаётся ощущение, что звенит поезд.
Если воспроизводить звук внутри вагона, то приходится высчитывать громкость в зависимости от расстояния до маркера. К тому же нужен ещё один "запускающий" маркер, который надо ставить ~ за 50 метров до переезда, чтобы начать воспроизведение звука. Да и точность попадания "перегиба" характеристики допплера на переезд недостаточно. Может быть так: переезд давно пройден, а звук всё ещё "приближается". Это происходит, когда поезд движется с ускорением, а поскольку переезды в основном вблизи станций, то результат соответствующий.

Диспетчер
16.05.2010, 10:44
Фигня получается. Если привязывать звук к маркеру переезда (чтобы правильно менялась громкость), то "допплер" появляется и снаружи. Если на виде "2" это ещё терпимо, то на виде "4" - убивает: создаётся ощущение, что звенит поезд.
Если воспроизводить звук внутри вагона, то приходится высчитывать громкость в зависимости от расстояния до маркера. К тому же нужен ещё один "запускающий" маркер, который надо ставить ~ за 50 метров до переезда, чтобы начать воспроизведение звука. Да и точность попадания "перегиба" характеристики допплера на переезд недостаточно. Может быть так: переезд давно пройден, а звук всё ещё "приближается". Это происходит, когда поезд движется с ускорением, а поскольку переезды в основном вблизи станций, то результат соответствующий.Эх жалко......Ауран,когда же займётся звуком.....:russian:

Arturmachinist
16.05.2010, 10:55
Ауран,когда же займётся звуком.....

Да никогда.;)

Gregory_777
17.05.2010, 06:30
Зато вот тут моя версия (http://stream.ifolder.ru/17739731) скрипта TRam_ (надеюсь, ты не против, дорогой) и моя же версия внутренних звуков купе/плацкарта (на материале Бармалея, который очень надеюсь, тоже не против).

Заметил очень неприятную штуку: движок TRS очень не любит воспроизводить в тредах большие (больше примерно 1мБ) звуки: он их либо воспроизводит реже (то есть по окончинии одного loop следующий начинается не сразу, а с задержкой, которая зависит от размера звука) или вообще не воспроизводит...

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

Дать бы им там в Ауране молотком по голове за такие фокусы...

TRam_
17.05.2010, 13:15
(надеюсь, ты не против, дорогой)чтоб я был против доделки своих экспериментов? Да кому они тогда нужны...

Диспетчер
17.05.2010, 14:54
Ребят,подскажите что нужно добавить в скрипт для воспроизведения дополнительных звуков салона,не связанных со движением поезда,напр. звуков поездного радио?

Evgenyi
17.05.2010, 15:09
Написать скрипт и вставить звуки.

Gregory_777
17.05.2010, 15:47
Посмотри, как работает радио в кабине. Пишешь thread void функцию, которая с рандомными задержками воспроизводит рандомные звуки из списка.

Только звуки должны быть строго одного формата (моно, 44100Гц, 16 бит WAV) и по размеру не больше 1Мб (это примерно 10 сек в данном формате).

Диспетчер
17.05.2010, 16:42
Написать скрипт и вставить звуки.Скорее всего дописать скрипт.....:)

Диспетчер
17.05.2010, 16:45
Gregory_777 Спасибо большое за совет!

Диспетчер
17.05.2010, 16:56
thread void Radio_UKV()
{
if(true)
{
while(true)
{
int radio_m = Math.Rand(0,24);
Sleep(Math.Rand(10,22));
Sleep(World.PlaySound(asset,"sound/rm_" + radio_m + ".wav",0.9f,5.0f,5.0f,loco,"a.cabfront"));
Sleep(Math.Rand(25,98));
}
}
}
Правельные строки? Точка привязки кабины интерьера вагона правильна?

TRam_
17.05.2010, 17:11
1) если это скрипт вагона, то лучше

Sleep(World.PlaySound(asset,"sound/rm_" + radio_m + ".wav",0.9f,5.0f,5.0f,me,"a.cabfront"));

ну и делать

Sleep(Math.Rand(10,22));
Sleep(Math.Rand(25,98));

совсем не обязательно

Лучше просто
Sleep(Math.Rand(35,130));

Да, не забудь её ( Radio_UKV(); ) в ф-цию Init дописать

Диспетчер
17.05.2010, 19:06
Вот блин проблема эти скобки....чють всторону и ошибка готова.....

Gregory_777
17.05.2010, 19:30
Диспетчер, есть такое.
TRam_, ну и a.cabfront на a.bog0 заменить бы хорошо.

Диспетчер
17.05.2010, 20:18
Error: krasn_strela.gs(457) : parse error, line 457.......да уже 5я попытка прошла даром.....запутался я в этих скобках.....прошу помощи

Evgenyi
17.05.2010, 20:19
Блин, нафиг! Дай мне скрипт.

Диспетчер
17.05.2010, 20:21
Он здесь http://stream.ifolder.ru/17739731

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

TRam_
18.05.2010, 03:32
Не надо делать декларацию int radio_m ВНУТРИ треда. Делайте снаружи.а смысл?

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

Кстати 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
Кто-нибудь здесь
{
имеет
{
понятие об
{
индентациикода?
}
}
}

TRam_
18.05.2010, 17:21
В инитерьере вместо me всегда ставится loco. Это дваЖеня! Это не внутрисалонный, это вагонный скрипт. Так что me.

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

не имеет
{
никто
{
совсем();
}
}


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

Gregory_777
18.05.2010, 17:23
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);
}
}

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

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

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

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

genesis
18.05.2010, 17:40
Прародителем GSа сишарп ну никак быть не может, он появился позднее. Речь о джаве, но это вовсе не прародительство, а аналогия.
В инитерьере вместо me всегда ставится loco.
Мда, начнем с того что узнаем в чем разница между loco и me.

cosmos
20.05.2010, 22:25
Сегодня добавлю ешё рандомное воспроизведение звука движения по "бесстыковому" пути и перестука на скоростях выше 30 км/ч, чтобы перестук не задалбывал.
Да, работа скрипта с длинными звуками нереальна, а короткие, своей зацикленностью всю реалистичность сводят на нет.
Решил поступить так. Взял длинный звуковой файл соответсвующий определенной скорости и разрезал его на равные части. Так поступил и с другими. Звуки обозвал soundp_i, где p - № набора звуков определенной скорости, а i - № файла из набора.
Задача: воспроизведение звуков из набора друг за другом (ну, пока скорость позволяет, иначе будет "играть" другой набор), т.к. рандомно "играет" не всегда убедительно из-за несовпадений.
Скрипт работает, звуки воспроизводятся, правда надо еще все это настроить, чтоб без запинки и задоринки, а так, результат меня порадовал.
Единственное что напрягает, так это большая кипа звуковых файлов в папке sound. А вот сам фаргмент кода (поток), тестовый, сырой, но рабочий:
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);
Сразу говорю, он недоделанный, но идея может быть кому и пригодится.

Combine
20.05.2010, 23:36
А c soundscript экспериментировал кто-нибудь?

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

Evgenyi
21.05.2010, 00:31
А c soundscript экспериментировал кто-нибудь?

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

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

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

TRam_
21.05.2010, 01:04
Да я просто сначала думал что тут внутрсалонныйскрипт вагонный. Но скрипт следит за пользователем (внутри/снаружи) и воспроизводит соответственно нужные звуки

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

genesis
21.05.2010, 08:55
Я пробовал,прописывал звуки к точке привязки в салоне,но они не заработали......
Саундскрипт доступен для объектов начиная с мапобжекта (скенери, вагоны и т.п.). Кабина наследуется от мешобжекта, соответственно, такой функциональности не имеет.
Да я просто сначала думал что тут внутрсалонный пытались делать.
Внутрисалонный-внешний не суть важно, нужно понимать какой смысл несет me, какой loco.
me — ссылка на текущий объект. Тот, где находится метод, в котором ты пишешь код. Про него в 90% случаев можно забыть, окромя явного указания переменной-члена при перекрытии имен или передачи данного объекта функции.
loco — ну начнем с того, что это не ключевое слово. А во-вторых, его наличие обусловлено лишь реализацией DefaultLocomotiveCabin, ты можешь сделать двадцать других, а унаследовавшись от Cabin, никакого лока не будет. Ну а в-третьих, локо в DLC — это ссылка на локомотив, где стоит кабина.
Так что ни что ни кого не заменяет, все зависит от того, к чему нужно обращаться.

Gregory_777
21.05.2010, 19:59
cosmos, зачем такой огород городить? Да ещё и циклы внутри тредов... Бееее...

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

TRam_
21.05.2010, 20:49
тащемта столп программирования в ТРСедругой столп, изобретённый тобой - хендлер, сам себя запускающий. Только его писать дольше, да и останавливать сложнее.

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

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

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

cosmos
22.05.2010, 01:48
cosmos, зачем такой огород городить? Да ещё и циклы внутри тредов... Бееее...
Циклы внутри трэдов? Хде? Приглядись или я чего-то не понимаю? Это основной поток, больше нету.:) У этого огорода, тем неменее, звук получается красавный.
ЗЫ: кстати, я изначально ориентировался только на звуки внутри салона.

TRam_
22.05.2010, 01:57
кстати, я изначально ориентировался только на звуки внутри салона.лучше делать 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()
{
if(!brake_state)
{
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)
{
Sleep(World.PlaySound(MyAsset1, "sound/brake_loop.wav", brake_sound, 10.0f, 100.0f, me, "a.bog0")-0.2);
}

if(TC<1.0) //звук отпуска
Sleep(World.PlaySound(MyAsset1, "sound/brake_otpusk.wav",brake_sound, 10.0f, 100.0f, me, "a.bog0"));
else//звук остановки
Sleep(World.PlaySound(MyAsset1, "sound/brake_stop.wav",brake_sound, 10.0f, 100.0f, me, "a.bog0"));

brake_state=false;
}
}





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



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

TC=GetBrakeCylinderPressure()*981-1;


if(speed<0.8)
brake_sound=0.4;
else
if(speed<2)
brake_sound=0.8;
else
brake_sound=1;



if(TC>1.1)
{
brake_state_set=true;
BrakeLoop1();
}

if(TC<1.0 or speed<0.6)
brake_state_set=false;

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

TRam_
22.05.2010, 02:28
значит в этом месте

if(speed<0.8)
brake_sound=0.4;
else
if(speed<2)
brake_sound=0.8;
else
brake_sound=1;


добавляй ещё работу с номером звука. Главное - попробовать удачно зациклить все его части.

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
Слушайте, а вот в этом (http://www.youtube.com/watch?v=KeG-L5GVReg) ролике про трассу "Фантазия" какие-то интересные звуки пасс. вагонов. Это что?

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