well, look at your script, it says START sound when player is in range, so that you dont change states the sound starts playing over and over again. by the way there are commata missing, space-character etc.
;Artificial Intelligence Script
;Header
desc=PlaySoundwhenEntityisNear
;Triggers
:state=0,plrdistwithin=90:etimerstart,state=1
:state=1:sound=$0,state=2
:state=2,etimergreater=3000:state=0
;End of Script
this means "when player near 90, start sound=$1 last for 3 seconds, then check condition again". look how long your sound plays and edit the etimergreater-number to fit. if you want to play the sound only once, exchange last line "state=0" with "state=3".
should work. there is an alternative using "loopsound=x" and "stopsound" wich does basically the same as above and would run smoother because engine has not to check etimer, but the above should be ok.
;Artificial Intelligence Script
;Header
desc=PlayLoopSoundwhenEntityisNear
;Triggers
:state=0,plrdistwithin=90:state=1
:state=1:loopsound=$0
:state=2,plrdistfurther=90:stopsound,state=0
;End of Script