Писал большой ответ, но в момент отправки упала булка, схоронился тока код:
Type TSomeChannel
Global MAP:Tmap = CreateMap()
Field Channel:TChannel
Field Sound:TSound
Field MainVolume:String
Function Load:TSomeChannel(Source:String,MainVolume:Float,label:String)
Local somelist:TList = TList(MapValueForKey(MAP,label))
If(somelist = Null)
somelist = CreateList();
MapInsert MAP,label,Somelist
EndIf
Local S:TSomeChannel = New TSomeChannel
S.Sound = LoadSound(Source)
S.Channel = CueSound(S.Sound)
S.MainVolume = MainVolume
SetChannelVolume(S.Channel,MainVolume)
ListAddLast Somelist,S
Return S
End Function
Function PlayRand(label:String)
Local list:TList = MapValueForKey(MAP,label)
If(list = Null) Return
Local R:Int = Rand(1,CountList(list))
Local K:Int = 0
For Local S:TSomeChannel = EachIn list
K:+1
If(K = R)
ResumeChannel S.Channel
Exit
EndIf
Next
End Function
End Type