Вот рабочий пример:
SeedRnd(MilliSecs())
Global counter
Global channel
While Not (KeyHit (1))
If ChannelPlaying (channel) = 0 SelectRandMusic("music")
Wend
End
Function SelectRandMusic(DIR$)
Local counter%=0
Local dir_h%=ReadDir(DIR$)
While True
file$=NextFile$(dir_h)
If Upper$(Right(file$,3))="MP3"
counter=counter+1
EndIf
If file$="" Exit
Wend
CloseDir dir_h
Print "files="+counter
Local iR%=Rand(1,counter%)
If Not counter Return False
counter=0
dir_h%=ReadDir(DIR$)
While True
file$=NextFile$(dir_h)
If Upper$(Right(file$,3))="MP3"
counter=counter+1
If counter%=iR
Print "select - "+IR+" = "+file$
channel=PlayMusic(DIR$+"\"+file$)
Exit
EndIf
EndIf
Wend
Return channel
End Function
Изменения:
1. Сделал проверку играет ли щас муза или нет, если нет, то заново запускаем
2. ЛОКАЛЬНУЮ переменную channel удалил к чертям! Значение локальных переменных ТЕРЯЕТСЯ при выходе из функции.