1. При засыпании, перед 
MUTE, необходимо запомнить/сохранить значение уровня громкости. Но в iCarDS так просто уровень громкости не получить. Команда 
SETVARBYCODE;PrevVolume;VOLUME занесет в переменную 
PrevVolume значение метки 
VOLUME, т.е. громкость, но со знаком % на конце. Чтобы получить и запомнить именно число (без %), можно использовать Autoit-скрипт:
	PHP код:
	
		
			
; Если iCarDS запущен, то...
If ProcessExists("iCarDS.exe") Then
    $SDK = ObjCreate("RideRunner.sdk")
    $PrevVolume = $SDK.GetInfo("VOLUME") ; Получаем значение метки громкости
    $PrevVolume = StringLeft($PrevVolume, StringLen($PrevVolume) - 1) ; Отбрасываем символ %
    $SDK.Execute("SETVAR;PrevVolume;" & $PrevVolume) ; Запоминаем уровень громкости в переменной
EndIf 
		
	
 Перед 
MUTE необходимо прописать запуск скрипта с помощью 
RUNQW.
2. Для плавного возрастания громкости с 0 до запомненного значения можно использовать следующий код, размещенный в UserExecTBL.ini:
	PHP код:
	
		
			
"VOL_UP_SMOOTH","SetVar;CurrentVolume;0||StartTimer;_VOL_UP_SMOOTH2_;20"
"on_VOL_UP_SMOOTH2_timer","if;<($CurrentVolume$;$PrevVolume$);{EVAL;CurrentVolume;$CurrentVolume$+1||SETVOL;MASTER;$CurrentVolume$};{EndTimer;_VOL_UP_SMOOTH2_}" 
		
	
 Здесь используется таймер, срабатывающий с периодичностью 20 мс (чем меньше период, тем быстрее будет нарастать громкость). Цикл while не используется, т.к. iCarDS подвиснет до тех пор, пока цикл не завершится.
В ExecTBL.ini в команду выхода из сна (
ONRESUME) необходимо добавить запуск 
VOL_UP_SMOOTH.